Skip to content

Commit c4a40a6

Browse files
authored
Merge pull request #874 from compnerd/driver-tests
SwiftDriverTests: adjust for Windows
2 parents b5f18f5 + 3d10de4 commit c4a40a6

File tree

1 file changed

+112
-64
lines changed

1 file changed

+112
-64
lines changed

Tests/SwiftDriverTests/ExplicitModuleBuildTests.swift

Lines changed: 112 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ import TSCBasic
1616
import XCTest
1717
import TestUtilities
1818

19+
private var testInputsPath: AbsolutePath = {
20+
var root: AbsolutePath = AbsolutePath(#file)
21+
while root.basename != "Tests" {
22+
root = root.parentDirectory
23+
}
24+
return root.parentDirectory.appending(component: "TestInputs")
25+
}()
26+
1927
/// Check that an explicit module build job contains expected inputs and options
2028
private func checkExplicitModuleBuildJob(job: Job,
2129
pcmArgs: [String],
@@ -305,18 +313,21 @@ final class ExplicitModuleBuildTests: XCTestCase {
305313
$0 <<< "import G;"
306314
}
307315

308-
let packageRootPath = URL(fileURLWithPath: #file).pathComponents
309-
.prefix(while: { $0 != "Tests" }).joined(separator: "/").dropFirst()
310-
let testInputsPath = packageRootPath + "/TestInputs"
311-
let cHeadersPath : String = testInputsPath + "/ExplicitModuleBuilds/CHeaders"
312-
let swiftModuleInterfacesPath : String = testInputsPath + "/ExplicitModuleBuilds/Swift"
316+
let cHeadersPath: String =
317+
testInputsPath.appending(component: "ExplicitModuleBuilds")
318+
.appending(component: "CHeaders")
319+
.pathString
320+
let swiftModuleInterfacesPath: String =
321+
testInputsPath.appending(component: "ExplicitModuleBuilds")
322+
.appending(component: "Swift")
323+
.pathString
313324
let sdkArgumentsForTesting = (try? Driver.sdkArgumentsForTesting()) ?? []
314325
var driver = try Driver(args: ["swiftc",
315326
"-target", "x86_64-apple-macosx11.0",
316-
"-I", cHeadersPath,
317-
"-I", swiftModuleInterfacesPath,
327+
"-I", cHeadersPath.nativePathString().escaped(),
328+
"-I", swiftModuleInterfacesPath.nativePathString().escaped(),
318329
"-explicit-module-build",
319-
main.pathString] + sdkArgumentsForTesting)
330+
main.pathString.escaped()] + sdkArgumentsForTesting)
320331

321332
let jobs = try driver.planBuild()
322333
// Figure out which Triples to use.
@@ -453,18 +464,21 @@ final class ExplicitModuleBuildTests: XCTestCase {
453464
$0 <<< "import C\n"
454465
}
455466

456-
let packageRootPath = URL(fileURLWithPath: #file).pathComponents
457-
.prefix(while: { $0 != "Tests" }).joined(separator: "/").dropFirst()
458-
let testInputsPath = packageRootPath + "/TestInputs"
459-
let cHeadersPath : String = testInputsPath + "/ExplicitModuleBuilds/CHeaders"
460-
let swiftModuleInterfacesPath : String = testInputsPath + "/ExplicitModuleBuilds/Swift"
467+
let cHeadersPath: String =
468+
testInputsPath.appending(component: "ExplicitModuleBuilds")
469+
.appending(component: "CHeaders")
470+
.pathString
471+
let swiftModuleInterfacesPath: String =
472+
testInputsPath.appending(component: "ExplicitModuleBuilds")
473+
.appending(component: "Swift")
474+
.pathString
461475
let sdkArgumentsForTesting = (try? Driver.sdkArgumentsForTesting()) ?? []
462476
var driver = try Driver(args: ["swift",
463477
"-target", "x86_64-apple-macosx11.0",
464-
"-I", cHeadersPath,
465-
"-I", swiftModuleInterfacesPath,
478+
"-I", cHeadersPath.nativePathString().escaped(),
479+
"-I", swiftModuleInterfacesPath.nativePathString().escaped(),
466480
"-explicit-module-build",
467-
main.pathString] + sdkArgumentsForTesting)
481+
main.pathString.escaped()] + sdkArgumentsForTesting)
468482

469483
let jobs = try driver.planBuild()
470484

@@ -585,22 +599,25 @@ final class ExplicitModuleBuildTests: XCTestCase {
585599
$0 <<< "import G;"
586600
}
587601

588-
let packageRootPath = URL(fileURLWithPath: #file).pathComponents
589-
.prefix(while: { $0 != "Tests" }).joined(separator: "/").dropFirst()
590-
let testInputsPath = packageRootPath + "/TestInputs"
591-
let cHeadersPath : String = testInputsPath + "/ExplicitModuleBuilds/CHeaders"
592-
let swiftModuleInterfacesPath : String = testInputsPath + "/ExplicitModuleBuilds/Swift"
602+
let cHeadersPath: String =
603+
testInputsPath.appending(component: "ExplicitModuleBuilds")
604+
.appending(component: "CHeaders")
605+
.pathString
606+
let swiftModuleInterfacesPath: String =
607+
testInputsPath.appending(component: "ExplicitModuleBuilds")
608+
.appending(component: "Swift")
609+
.pathString
593610
let sdkArgumentsForTesting = (try? Driver.sdkArgumentsForTesting()) ?? []
594611
var driver = try Driver(args: ["swiftc",
595-
"-I", cHeadersPath,
596-
"-I", swiftModuleInterfacesPath,
612+
"-I", cHeadersPath.nativePathString().escaped(),
613+
"-I", swiftModuleInterfacesPath.nativePathString().escaped(),
597614
"-explicit-module-build",
598-
"-working-directory", path.pathString,
615+
"-working-directory", path.pathString.nativePathString().escaped(),
599616
// TODO: clang targets need to be taught
600617
// how to work with explicit modules
601618
// properly.
602619
"-disable-clang-target",
603-
main.pathString] + sdkArgumentsForTesting,
620+
main.pathString.escaped()] + sdkArgumentsForTesting,
604621
env: ProcessEnv.vars)
605622
let jobs = try driver.planBuild()
606623
try driver.run(jobs: jobs)
@@ -624,6 +641,26 @@ final class ExplicitModuleBuildTests: XCTestCase {
624641
.appending(component: "lib")
625642
.appending(component: "swift")
626643
return (stdLibPath, stdLibPath.appending(component: "shims"))
644+
} else if driver.targetTriple.isWindows {
645+
if let sdkroot = try driver.toolchain.defaultSDKPath(driver.targetTriple) {
646+
return (sdkroot
647+
.appending(component: "usr")
648+
.appending(component: "lib")
649+
.appending(component: "swift"),
650+
sdkroot
651+
.appending(component: "usr")
652+
.appending(component: "lib")
653+
.appending(component: "swift")
654+
.appending(component: "shims"))
655+
}
656+
return (toolchainRootPath
657+
.appending(component: "lib")
658+
.appending(component: "swift")
659+
.appending(component: driver.targetTriple.osNameUnversioned),
660+
toolchainRootPath
661+
.appending(component: "lib")
662+
.appending(component: "swift")
663+
.appending(component: "shims"))
627664
} else {
628665
return (toolchainRootPath.appending(component: "lib")
629666
.appending(component: "swift")
@@ -675,19 +712,22 @@ final class ExplicitModuleBuildTests: XCTestCase {
675712
$0 <<< "import E;"
676713
$0 <<< "import G;"
677714
}
678-
let packageRootPath = URL(fileURLWithPath: #file).pathComponents
679-
.prefix(while: { $0 != "Tests" }).joined(separator: "/").dropFirst()
680-
let testInputsPath = packageRootPath + "/TestInputs"
681-
let cHeadersPath : String = testInputsPath + "/ExplicitModuleBuilds/CHeaders"
682-
let swiftModuleInterfacesPath : String = testInputsPath + "/ExplicitModuleBuilds/Swift"
715+
let cHeadersPath: String =
716+
testInputsPath.appending(component: "ExplicitModuleBuilds")
717+
.appending(component: "CHeaders")
718+
.pathString
719+
let swiftModuleInterfacesPath: String =
720+
testInputsPath.appending(component: "ExplicitModuleBuilds")
721+
.appending(component: "Swift")
722+
.pathString
683723
let sdkArgumentsForTesting = (try? Driver.sdkArgumentsForTesting()) ?? []
684724
let scannerCommand = ["-scan-dependencies",
685725
"-import-prescan",
686-
"-I", cHeadersPath,
687-
"-I", swiftModuleInterfacesPath,
688-
"-I", stdLibPath.description,
689-
"-I", shimsPath.description,
690-
main.pathString] + sdkArgumentsForTesting
726+
"-I", cHeadersPath.nativePathString().escaped(),
727+
"-I", swiftModuleInterfacesPath.nativePathString().escaped(),
728+
"-I", stdLibPath.description.nativePathString().escaped(),
729+
"-I", shimsPath.description.nativePathString().escaped(),
730+
main.pathString.escaped()] + sdkArgumentsForTesting
691731

692732
let imports =
693733
try! dependencyOracle.getImports(workingDirectory: path,
@@ -710,8 +750,8 @@ final class ExplicitModuleBuildTests: XCTestCase {
710750
let sdkArgumentsForTesting = (try? Driver.sdkArgumentsForTesting()) ?? []
711751
var driver = try Driver(args: ["swiftc",
712752
"-explicit-module-build",
713-
"-working-directory", path.pathString,
714-
main.pathString] + lotsOfInputs + sdkArgumentsForTesting,
753+
"-working-directory", path.pathString.nativePathString().escaped(),
754+
main.pathString.escaped()] + lotsOfInputs + sdkArgumentsForTesting,
715755
env: ProcessEnv.vars)
716756
let scannerJob = try driver.dependencyScanningJob()
717757

@@ -749,20 +789,24 @@ final class ExplicitModuleBuildTests: XCTestCase {
749789
$0 <<< "import E;"
750790
$0 <<< "import G;"
751791
}
752-
let packageRootPath = URL(fileURLWithPath: #file).pathComponents
753-
.prefix(while: { $0 != "Tests" }).joined(separator: "/").dropFirst()
754-
let testInputsPath = packageRootPath + "/TestInputs"
755-
let cHeadersPath : String = testInputsPath + "/ExplicitModuleBuilds/CHeaders"
756-
let swiftModuleInterfacesPath : String = testInputsPath + "/ExplicitModuleBuilds/Swift"
792+
793+
let cHeadersPath: String =
794+
testInputsPath.appending(component: "ExplicitModuleBuilds")
795+
.appending(component: "CHeaders")
796+
.pathString
797+
let swiftModuleInterfacesPath: String =
798+
testInputsPath.appending(component: "ExplicitModuleBuilds")
799+
.appending(component: "Swift")
800+
.pathString
757801
let sdkArgumentsForTesting = (try? Driver.sdkArgumentsForTesting()) ?? []
758802
var driver = try Driver(args: ["swiftc",
759-
"-I", cHeadersPath,
760-
"-I", swiftModuleInterfacesPath,
803+
"-I", cHeadersPath.nativePathString().escaped(),
804+
"-I", swiftModuleInterfacesPath.nativePathString().escaped(),
761805
"-import-objc-header",
762806
"-explicit-module-build",
763-
"-working-directory", path.pathString,
807+
"-working-directory", path.pathString.nativePathString().escaped(),
764808
"-disable-clang-target",
765-
main.pathString] + sdkArgumentsForTesting,
809+
main.pathString.escaped()] + sdkArgumentsForTesting,
766810
env: ProcessEnv.vars)
767811
let resolver = try ArgsResolver(fileSystem: localFileSystem)
768812
var scannerCommand = try driver.dependencyScannerInvocationCommand().1.map { try resolver.resolve($0) }
@@ -785,6 +829,8 @@ final class ExplicitModuleBuildTests: XCTestCase {
785829
if hostTriple.isMacOSX,
786830
hostTriple.version(for: .macOS) >= Triple.Version(11, 0, 0) {
787831
expectedNumberOfDependencies = 11
832+
} else if driver.targetTriple.isWindows {
833+
expectedNumberOfDependencies = 13
788834
} else {
789835
expectedNumberOfDependencies = 12
790836
}
@@ -833,19 +879,23 @@ final class ExplicitModuleBuildTests: XCTestCase {
833879
$0 <<< "import E;"
834880
$0 <<< "import G;"
835881
}
836-
let packageRootPath = URL(fileURLWithPath: #file).pathComponents
837-
.prefix(while: { $0 != "Tests" }).joined(separator: "/").dropFirst()
838-
let testInputsPath = packageRootPath + "/TestInputs"
839-
let cHeadersPath : String = testInputsPath + "/ExplicitModuleBuilds/CHeaders"
840-
let swiftModuleInterfacesPath : String = testInputsPath + "/ExplicitModuleBuilds/Swift"
882+
883+
let cHeadersPath: String =
884+
testInputsPath.appending(component: "ExplicitModuleBuilds")
885+
.appending(component: "CHeaders")
886+
.pathString
887+
let swiftModuleInterfacesPath: String =
888+
testInputsPath.appending(component: "ExplicitModuleBuilds")
889+
.appending(component: "Swift")
890+
.pathString
841891
let sdkArgumentsForTesting = (try? Driver.sdkArgumentsForTesting()) ?? []
842892
var driver = try Driver(args: ["swiftc",
843-
"-I", cHeadersPath,
844-
"-I", swiftModuleInterfacesPath,
893+
"-I", cHeadersPath.nativePathString().escaped(),
894+
"-I", swiftModuleInterfacesPath.nativePathString().escaped(),
845895
"-explicit-module-build",
846-
"-working-directory", path.pathString,
896+
"-working-directory", path.pathString.nativePathString().escaped(),
847897
"-disable-clang-target",
848-
main.pathString] + sdkArgumentsForTesting,
898+
main.pathString.escaped()] + sdkArgumentsForTesting,
849899
env: ProcessEnv.vars)
850900
let resolver = try ArgsResolver(fileSystem: localFileSystem)
851901
var scannerCommand = try driver.dependencyScannerInvocationCommand().1.map { try resolver.resolve($0) }
@@ -960,10 +1010,9 @@ final class ExplicitModuleBuildTests: XCTestCase {
9601010
job.outputs[0].file.basenameWithoutExt == basenameWithoutExt
9611011
}
9621012
}
963-
let packageRootPath = URL(fileURLWithPath: #file).pathComponents
964-
.prefix(while: { $0 != "Tests" }).joined(separator: "/").dropFirst()
965-
let testInputsPath = packageRootPath + "/TestInputs"
966-
let mockSDKPath : String = testInputsPath + "/mock-sdk.sdk"
1013+
1014+
let mockSDKPath: String =
1015+
testInputsPath.appending(component: "mock-sdk.sdk").pathString
9671016
let diagnosticEnging = DiagnosticsEngine()
9681017
let collector = try SDKPrebuiltModuleInputsCollector(VirtualPath(path: mockSDKPath).absolutePath!, diagnosticEnging)
9691018
let interfaceMap = try collector.collectSwiftInterfaceMap()
@@ -1137,11 +1186,10 @@ final class ExplicitModuleBuildTests: XCTestCase {
11371186
XCTAssertTrue(current.file != baseline.file)
11381187
XCTAssertTrue(current.file.basename == baseline.file.basename)
11391188
}
1140-
let packageRootPath = URL(fileURLWithPath: #file).pathComponents
1141-
.prefix(while: { $0 != "Tests" }).joined(separator: "/").dropFirst()
1142-
let testInputsPath = packageRootPath + "/TestInputs"
1143-
let mockSDKPath : String = testInputsPath + "/mock-sdk.sdk"
1144-
let baselineABIPath : String = testInputsPath + "/ABIBaselines"
1189+
let mockSDKPath: String =
1190+
testInputsPath.appending(component: "mock-sdk.sdk").pathString
1191+
let baselineABIPath: String =
1192+
testInputsPath.appending(component: "ABIBaselines").pathString
11451193
let collector = try SDKPrebuiltModuleInputsCollector(VirtualPath(path: mockSDKPath).absolutePath!, DiagnosticsEngine())
11461194
let interfaceMap = try collector.collectSwiftInterfaceMap()
11471195
try withTemporaryDirectory { path in

0 commit comments

Comments
 (0)