@@ -771,6 +771,22 @@ final class ExplicitModuleBuildTests: XCTestCase {
771
771
XCTAssertTrue ( input. file. basename == name)
772
772
}
773
773
}
774
+ let packageRootPath = URL ( fileURLWithPath: #file) . pathComponents
775
+ . prefix ( while: { $0 != " Tests " } ) . joined ( separator: " / " ) . dropFirst ( )
776
+ let testInputsPath = packageRootPath + " /TestInputs "
777
+ let mockSDKPath : String = testInputsPath + " /mock-sdk.sdk "
778
+ let diagnosticEnging = DiagnosticsEngine ( )
779
+ let collector = try SDKPrebuiltModuleInputsCollector ( VirtualPath ( path: mockSDKPath) . absolutePath!, diagnosticEnging)
780
+ let interfaceMap = try collector. collectSwiftInterfaceMap ( )
781
+
782
+ // Check interface map always contain everything
783
+ XCTAssertTrue ( interfaceMap [ " Swift " ] !. count == 2 )
784
+ XCTAssertTrue ( interfaceMap [ " A " ] !. count == 2 )
785
+ XCTAssertTrue ( interfaceMap [ " E " ] !. count == 2 )
786
+ XCTAssertTrue ( interfaceMap [ " F " ] !. count == 2 )
787
+ XCTAssertTrue ( interfaceMap [ " G " ] !. count == 2 )
788
+ XCTAssertTrue ( interfaceMap [ " H " ] !. count == 2 )
789
+
774
790
try withTemporaryDirectory { path in
775
791
let main = path. appending ( component: " testPrebuiltModuleGenerationJobs.swift " )
776
792
try localFileSystem. writeFileContents ( main) {
@@ -781,26 +797,13 @@ final class ExplicitModuleBuildTests: XCTestCase {
781
797
$0 <<< " import H \n "
782
798
$0 <<< " import Swift \n "
783
799
}
784
- let packageRootPath = URL ( fileURLWithPath: #file) . pathComponents
785
- . prefix ( while: { $0 != " Tests " } ) . joined ( separator: " / " ) . dropFirst ( )
786
- let testInputsPath = packageRootPath + " /TestInputs "
787
- let mockSDKPath : String = testInputsPath + " /mock-sdk.sdk "
788
800
var driver = try Driver ( args: [ " swiftc " , main. pathString,
789
801
" -sdk " , mockSDKPath,
790
802
] )
791
803
792
- let diagnosticEnging = DiagnosticsEngine ( )
793
- let collector = try SDKPrebuiltModuleInputsCollector ( VirtualPath ( path: mockSDKPath) . absolutePath!, diagnosticEnging)
794
- let interfaceMap = try collector. collectSwiftInterfaceMap ( )
795
- XCTAssertTrue ( interfaceMap [ " Swift " ] !. count == 2 )
796
- XCTAssertTrue ( interfaceMap [ " A " ] !. count == 2 )
797
- XCTAssertTrue ( interfaceMap [ " E " ] !. count == 2 )
798
- XCTAssertTrue ( interfaceMap [ " F " ] !. count == 2 )
799
- XCTAssertTrue ( interfaceMap [ " G " ] !. count == 2 )
800
- XCTAssertTrue ( interfaceMap [ " H " ] !. count == 2 )
801
-
802
- let ( jobs, danglingJobs) = try driver. generatePrebuitModuleGenerationJobs ( interfaceMap,
803
- VirtualPath ( path: " /tmp/ " ) . absolutePath!)
804
+ let ( jobs, danglingJobs) = try driver. generatePrebuitModuleGenerationJobs ( with: interfaceMap,
805
+ into: VirtualPath ( path: " /tmp/ " ) . absolutePath!,
806
+ exhaustive: true )
804
807
805
808
XCTAssertTrue ( danglingJobs. count == 2 )
806
809
XCTAssertTrue ( danglingJobs. allSatisfy { job in
@@ -825,6 +828,77 @@ final class ExplicitModuleBuildTests: XCTestCase {
825
828
checkInputOutputIntegrity ( GJobs [ 0 ] )
826
829
checkInputOutputIntegrity ( GJobs [ 1 ] )
827
830
}
831
+ try withTemporaryDirectory { path in
832
+ let main = path. appending ( component: " testPrebuiltModuleGenerationJobs.swift " )
833
+ try localFileSystem. writeFileContents ( main) {
834
+ $0 <<< " import H \n "
835
+ }
836
+ var driver = try Driver ( args: [ " swiftc " , main. pathString,
837
+ " -sdk " , mockSDKPath,
838
+ ] )
839
+
840
+ let ( jobs, danglingJobs) = try driver. generatePrebuitModuleGenerationJobs ( with: interfaceMap,
841
+ into: VirtualPath ( path: " /tmp/ " ) . absolutePath!,
842
+ exhaustive: false )
843
+
844
+ XCTAssertTrue ( danglingJobs. isEmpty)
845
+ XCTAssertTrue ( jobs. count == 12 )
846
+ XCTAssertTrue ( jobs. allSatisfy { $0. outputs. count == 1 } )
847
+ XCTAssertTrue ( jobs. allSatisfy { $0. kind == . compile} )
848
+ XCTAssertTrue ( jobs. allSatisfy { $0. commandLine. contains ( . flag( " -compile-module-from-interface " ) ) } )
849
+ let HJobs = jobs. filter { $0. moduleName == " H " }
850
+ XCTAssertTrue ( HJobs . count == 2 )
851
+ XCTAssertTrue ( getInputModules ( HJobs [ 0 ] ) == [ " A " , " E " , " F " , " G " , " Swift " ] )
852
+ XCTAssertTrue ( getInputModules ( HJobs [ 1 ] ) == [ " A " , " E " , " F " , " G " , " Swift " ] )
853
+ XCTAssertTrue ( getOutputName ( HJobs [ 0 ] ) != getOutputName ( HJobs [ 1 ] ) )
854
+ checkInputOutputIntegrity ( HJobs [ 0 ] )
855
+ checkInputOutputIntegrity ( HJobs [ 1 ] )
856
+ let GJobs = jobs. filter { $0. moduleName == " G " }
857
+ XCTAssertTrue ( GJobs . count == 2 )
858
+ XCTAssertTrue ( getInputModules ( GJobs [ 0 ] ) == [ " E " , " Swift " ] )
859
+ XCTAssertTrue ( getInputModules ( GJobs [ 1 ] ) == [ " E " , " Swift " ] )
860
+ XCTAssertTrue ( getOutputName ( GJobs [ 0 ] ) != getOutputName ( GJobs [ 1 ] ) )
861
+ checkInputOutputIntegrity ( GJobs [ 0 ] )
862
+ checkInputOutputIntegrity ( GJobs [ 1 ] )
863
+ }
864
+ try withTemporaryDirectory { path in
865
+ let main = path. appending ( component: " testPrebuiltModuleGenerationJobs.swift " )
866
+ try localFileSystem. writeFileContents ( main) {
867
+ $0 <<< " import Swift \n "
868
+ }
869
+ var driver = try Driver ( args: [ " swiftc " , main. pathString,
870
+ " -sdk " , mockSDKPath,
871
+ ] )
872
+
873
+ let ( jobs, danglingJobs) = try driver. generatePrebuitModuleGenerationJobs ( with: interfaceMap,
874
+ into: VirtualPath ( path: " /tmp/ " ) . absolutePath!,
875
+ exhaustive: false )
876
+
877
+ XCTAssertTrue ( danglingJobs. isEmpty)
878
+ XCTAssert ( jobs. count == 2 )
879
+ XCTAssert ( jobs. allSatisfy { $0. moduleName == " Swift " } )
880
+ }
881
+ try withTemporaryDirectory { path in
882
+ let main = path. appending ( component: " testPrebuiltModuleGenerationJobs.swift " )
883
+ try localFileSystem. writeFileContents ( main) {
884
+ $0 <<< " import F \n "
885
+ }
886
+ var driver = try Driver ( args: [ " swiftc " , main. pathString,
887
+ " -sdk " , mockSDKPath,
888
+ ] )
889
+
890
+ let ( jobs, danglingJobs) = try driver. generatePrebuitModuleGenerationJobs ( with: interfaceMap,
891
+ into: VirtualPath ( path: " /tmp/ " ) . absolutePath!,
892
+ exhaustive: false )
893
+
894
+ XCTAssertTrue ( danglingJobs. isEmpty)
895
+ XCTAssertTrue ( jobs. count == 6 )
896
+ jobs. forEach ( { job in
897
+ // Check we don't pull in other modules than A, F and Swift
898
+ XCTAssertTrue ( [ " A " , " F " , " Swift " ] . contains ( job. moduleName) )
899
+ checkInputOutputIntegrity ( job)
900
+ } )
901
+ }
828
902
}
829
903
#endif
830
904
}
0 commit comments