Skip to content

Commit 3f04fa5

Browse files
committed
SwiftDriverTests: adjust for Windows
This adjusts the tests for Windows. With this set of changes, the ExplicitModuleBuildTests all pass on Windows (except those which use a macOS target triple).
1 parent 0e39f4f commit 3f04fa5

File tree

1 file changed

+111
-64
lines changed

1 file changed

+111
-64
lines changed

Tests/SwiftDriverTests/ExplicitModuleBuildTests.swift

Lines changed: 111 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,24 @@ 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(compnent: "CHeaders")
605+
.pathString
606+
let swiftModuleInterfacesPath: String =
607+
testInputsPath.appending(component: "ExplicitModuleBuilds")
608+
.appending(component: "Swift")
593609
let sdkArgumentsForTesting = (try? Driver.sdkArgumentsForTesting()) ?? []
594610
var driver = try Driver(args: ["swiftc",
595-
"-I", cHeadersPath,
596-
"-I", swiftModuleInterfacesPath,
611+
"-I", cHeadersPath.nativePathString().escaped(),
612+
"-I", swiftModuleInterfacesPath.nativePathString().escaped(),
597613
"-explicit-module-build",
598-
"-working-directory", path.pathString,
614+
"-working-directory", path.pathString.nativePathString().escaped(),
599615
// TODO: clang targets need to be taught
600616
// how to work with explicit modules
601617
// properly.
602618
"-disable-clang-target",
603-
main.pathString] + sdkArgumentsForTesting,
619+
main.pathString.escaped()] + sdkArgumentsForTesting,
604620
env: ProcessEnv.vars)
605621
let jobs = try driver.planBuild()
606622
try driver.run(jobs: jobs)
@@ -624,6 +640,26 @@ final class ExplicitModuleBuildTests: XCTestCase {
624640
.appending(component: "lib")
625641
.appending(component: "swift")
626642
return (stdLibPath, stdLibPath.appending(component: "shims"))
643+
} else if driver.targetTriple.isWindows {
644+
if let sdkroot = try driver.toolchain.defaultSDKPath(driver.targetTriple) {
645+
return (sdkroot
646+
.appending(component: "usr")
647+
.appending(component: "lib")
648+
.appending(component: "swift"),
649+
sdkroot
650+
.appending(component: "usr")
651+
.appending(component: "lib")
652+
.appending(component: "swift")
653+
.appending(component: "shims"))
654+
}
655+
return (toolchainRootPath
656+
.appending(component: "lib")
657+
.appending(component: "swift")
658+
.appending(component: driver.targetTriple.osNameUnversioned),
659+
toolchainRootPath
660+
.appending(component: "lib")
661+
.appending(component: "swift")
662+
.appending(component: "shims"))
627663
} else {
628664
return (toolchainRootPath.appending(component: "lib")
629665
.appending(component: "swift")
@@ -675,19 +711,22 @@ final class ExplicitModuleBuildTests: XCTestCase {
675711
$0 <<< "import E;"
676712
$0 <<< "import G;"
677713
}
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"
714+
let cHeadersPath: String =
715+
testInputsPath.appending(component: "ExplicitModuleBuilds")
716+
.appending(component: "CHeaders")
717+
.pathString
718+
let swiftModuleInterfacesPath: String =
719+
testInputsPath.appending(component: "ExplicitModuleBuilds")
720+
.appending(component: "Swift")
721+
.pathString
683722
let sdkArgumentsForTesting = (try? Driver.sdkArgumentsForTesting()) ?? []
684723
let scannerCommand = ["-scan-dependencies",
685724
"-import-prescan",
686-
"-I", cHeadersPath,
687-
"-I", swiftModuleInterfacesPath,
688-
"-I", stdLibPath.description,
689-
"-I", shimsPath.description,
690-
main.pathString] + sdkArgumentsForTesting
725+
"-I", cHeadersPath.nativePathString().escaped(),
726+
"-I", swiftModuleInterfacesPath.nativePathString().escaped(),
727+
"-I", stdLibPath.description.nativePathString().escaped(),
728+
"-I", shimsPath.description.nativePathString().escaped(),
729+
main.pathString.escaped()] + sdkArgumentsForTesting
691730

692731
let imports =
693732
try! dependencyOracle.getImports(workingDirectory: path,
@@ -710,8 +749,8 @@ final class ExplicitModuleBuildTests: XCTestCase {
710749
let sdkArgumentsForTesting = (try? Driver.sdkArgumentsForTesting()) ?? []
711750
var driver = try Driver(args: ["swiftc",
712751
"-explicit-module-build",
713-
"-working-directory", path.pathString,
714-
main.pathString] + lotsOfInputs + sdkArgumentsForTesting,
752+
"-working-directory", path.pathString.nativePathString().escaped(),
753+
main.pathString.escaped()] + lotsOfInputs + sdkArgumentsForTesting,
715754
env: ProcessEnv.vars)
716755
let scannerJob = try driver.dependencyScanningJob()
717756

@@ -749,20 +788,24 @@ final class ExplicitModuleBuildTests: XCTestCase {
749788
$0 <<< "import E;"
750789
$0 <<< "import G;"
751790
}
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"
791+
792+
let cHeadersPath: String =
793+
testInputsPath.appending(component: "ExplicitModuleBuilds")
794+
.appending(component: "CHeaders")
795+
.pathString
796+
let swiftModuleInterfacesPath: String =
797+
testInputsPath.appending(component: "ExplicitModuleBuilds")
798+
.appending(component: "Swift")
799+
.pathString
757800
let sdkArgumentsForTesting = (try? Driver.sdkArgumentsForTesting()) ?? []
758801
var driver = try Driver(args: ["swiftc",
759-
"-I", cHeadersPath,
760-
"-I", swiftModuleInterfacesPath,
802+
"-I", cHeadersPath.nativePathString().escaped(),
803+
"-I", swiftModuleInterfacesPath.nativePathString().escaped(),
761804
"-import-objc-header",
762805
"-explicit-module-build",
763-
"-working-directory", path.pathString,
806+
"-working-directory", path.pathString.nativePathString().escaped(),
764807
"-disable-clang-target",
765-
main.pathString] + sdkArgumentsForTesting,
808+
main.pathString.escaped()] + sdkArgumentsForTesting,
766809
env: ProcessEnv.vars)
767810
let resolver = try ArgsResolver(fileSystem: localFileSystem)
768811
var scannerCommand = try driver.dependencyScannerInvocationCommand().1.map { try resolver.resolve($0) }
@@ -785,6 +828,8 @@ final class ExplicitModuleBuildTests: XCTestCase {
785828
if hostTriple.isMacOSX,
786829
hostTriple.version(for: .macOS) >= Triple.Version(11, 0, 0) {
787830
expectedNumberOfDependencies = 11
831+
} else if driver.targetTriple.isWindows {
832+
expectedNumberOfDependencies = 13
788833
} else {
789834
expectedNumberOfDependencies = 12
790835
}
@@ -833,19 +878,23 @@ final class ExplicitModuleBuildTests: XCTestCase {
833878
$0 <<< "import E;"
834879
$0 <<< "import G;"
835880
}
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"
881+
882+
let cHeadersPath: String =
883+
testInputsPath.appending(component: "ExplicitModuleBuilds")
884+
.appending(component: "CHeaders")
885+
.pathString
886+
let swiftModuleInterfacesPath: String =
887+
testInputsPath.appending(component: "ExplicitModuleBuilds")
888+
.appending(component: "Swift")
889+
.pathString
841890
let sdkArgumentsForTesting = (try? Driver.sdkArgumentsForTesting()) ?? []
842891
var driver = try Driver(args: ["swiftc",
843-
"-I", cHeadersPath,
844-
"-I", swiftModuleInterfacesPath,
892+
"-I", cHeadersPath.nativePathString().escaped(),
893+
"-I", swiftModuleInterfacesPath.nativePathString().escaped(),
845894
"-explicit-module-build",
846-
"-working-directory", path.pathString,
895+
"-working-directory", path.pathString.nativePathString().escaped(),
847896
"-disable-clang-target",
848-
main.pathString] + sdkArgumentsForTesting,
897+
main.pathString.escaped()] + sdkArgumentsForTesting,
849898
env: ProcessEnv.vars)
850899
let resolver = try ArgsResolver(fileSystem: localFileSystem)
851900
var scannerCommand = try driver.dependencyScannerInvocationCommand().1.map { try resolver.resolve($0) }
@@ -960,10 +1009,9 @@ final class ExplicitModuleBuildTests: XCTestCase {
9601009
job.outputs[0].file.basenameWithoutExt == basenameWithoutExt
9611010
}
9621011
}
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"
1012+
1013+
let mockSDKPath: String =
1014+
testInputsPath.appending(component: "mock-sdk.sdk").pathString
9671015
let diagnosticEnging = DiagnosticsEngine()
9681016
let collector = try SDKPrebuiltModuleInputsCollector(VirtualPath(path: mockSDKPath).absolutePath!, diagnosticEnging)
9691017
let interfaceMap = try collector.collectSwiftInterfaceMap()
@@ -1137,11 +1185,10 @@ final class ExplicitModuleBuildTests: XCTestCase {
11371185
XCTAssertTrue(current.file != baseline.file)
11381186
XCTAssertTrue(current.file.basename == baseline.file.basename)
11391187
}
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"
1188+
let mockSDKPath: String =
1189+
testInputsPath.appending(component: "mock-sdk.sdk").pathString
1190+
let baselineABIPath: String =
1191+
testInputsPath.appending(component: "ABIBaselines").pathString
11451192
let collector = try SDKPrebuiltModuleInputsCollector(VirtualPath(path: mockSDKPath).absolutePath!, DiagnosticsEngine())
11461193
let interfaceMap = try collector.collectSwiftInterfaceMap()
11471194
try withTemporaryDirectory { path in

0 commit comments

Comments
 (0)