1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2023-2024 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import Basics
import Build
import PackageGraph
import PackageModel
import SourceKitLSPAPI
import SPMTestSupport
import XCTest
final class SourceKitLSPAPITests: XCTestCase {
func testBasicSwiftPackage() throws {
let fs = InMemoryFileSystem(emptyFiles:
"/Pkg/Sources/exe/main.swift",
"/Pkg/Sources/lib/lib.swift"
)
let observability = ObservabilitySystem.makeForTesting()
let graph = try loadModulesGraph(
fileSystem: fs,
manifests: [
Manifest.createRootManifest(
displayName: "Pkg",
path: "/Pkg",
targets: [
TargetDescription(name: "exe", dependencies: ["lib"]),
TargetDescription(name: "lib", dependencies: []),
]),
],
observabilityScope: observability.topScope
)
XCTAssertNoDiagnostics(observability.diagnostics)
let plan = try BuildPlan(
destinationBuildParameters: mockBuildParameters(
destination: .target,
shouldLinkStaticSwiftStdlib: true
),
toolsBuildParameters: mockBuildParameters(
destination: .host,
shouldLinkStaticSwiftStdlib: true
),
graph: graph,
fileSystem: fs,
observabilityScope: observability.topScope
)
let description = BuildDescription(buildPlan: plan)
try description.checkArguments(
for: "exe",
graph: graph,
partialArguments: [
"-module-name", "exe",
"-emit-dependencies",
"-emit-module",
"-emit-module-path", "/path/to/build/\(plan.destinationBuildParameters.triple)/debug/exe.build/exe.swiftmodule"
],
isPartOfRootPackage: true
)
try description.checkArguments(
for: "lib",
graph: graph,
partialArguments: [
"-module-name", "lib",
"-emit-dependencies",
"-emit-module",
"-emit-module-path", "/path/to/build/\(plan.destinationBuildParameters.triple)/debug/Modules/lib.swiftmodule"
],
isPartOfRootPackage: true
)
}
}
extension SourceKitLSPAPI.BuildDescription {
@discardableResult func checkArguments(
for targetName: String,
graph: ModulesGraph,
partialArguments: [String],
isPartOfRootPackage: Bool
) throws -> Bool {
let target = try XCTUnwrap(graph.module(for: targetName, destination: .destination))
let buildTarget = try XCTUnwrap(self.getBuildTarget(for: target, in: graph))
guard let file = buildTarget.sources.first else {
XCTFail("build target \(targetName) contains no files")
return false
}
let arguments = try buildTarget.compileArguments(for: file)
let result = arguments.contains(partialArguments)
XCTAssertTrue(result, "could not match \(partialArguments) to actual arguments \(arguments)")
XCTAssertEqual(buildTarget.isPartOfRootPackage, isPartOfRootPackage)
return result
}
}
|