@@ -205,6 +205,8 @@ private func checkCachingBuildJobDependencies(job: Job,
205205
206206
207207final class CachingBuildTests : XCTestCase {
208+ let dependencyOracle = InterModuleDependencyOracle ( )
209+
208210 override func setUpWithError( ) throws {
209211 try super. setUpWithError ( )
210212
@@ -499,12 +501,12 @@ final class CachingBuildTests: XCTestCase {
499501 " -cache-compile-job " , " -cas-path " , casPath. nativePathString ( escaped: true ) ,
500502 " -working-directory " , path. nativePathString ( escaped: true ) ,
501503 main. nativePathString ( escaped: true ) ] + sdkArgumentsForTesting,
502- env: ProcessEnv . vars)
504+ env: ProcessEnv . vars,
505+ interModuleDependencyOracle: dependencyOracle)
503506 let jobs = try driver. planBuild ( )
504507 try driver. run ( jobs: jobs)
505508 XCTAssertFalse ( driver. diagnosticEngine. hasErrors)
506509
507- let dependencyOracle = InterModuleDependencyOracle ( )
508510 let scanLibPath = try XCTUnwrap ( driver. toolchain. lookupSwiftScanLib ( ) )
509511 guard try dependencyOracle
510512 . verifyOrCreateScannerInstance ( fileSystem: localFileSystem,
@@ -513,7 +515,12 @@ final class CachingBuildTests: XCTestCase {
513515 return
514516 }
515517
516- let cas = try dependencyOracle. createCAS ( pluginPath: nil , onDiskPath: casPath, pluginOptions: [ ] )
518+ let cas = try dependencyOracle. getOrCreateCAS ( pluginPath: nil , onDiskPath: casPath, pluginOptions: [ ] )
519+ if let driverCAS = driver. cas {
520+ XCTAssertEqual ( cas, driverCAS, " CAS should only be created once " )
521+ } else {
522+ XCTFail ( " Cached compilation doesn't have a CAS " )
523+ }
517524 try checkCASForResults ( jobs: jobs, cas: cas, fs: driver. fileSystem)
518525 }
519526 }
@@ -556,9 +563,9 @@ final class CachingBuildTests: XCTestCase {
556563 " -pch-output-dir " , PCHPath . nativePathString ( escaped: true ) ,
557564 FooInstallPath . appending ( component: " Foo.swiftmodule " ) . nativePathString ( escaped: true ) ]
558565 + sdkArgumentsForTesting,
559- env: ProcessEnv . vars)
566+ env: ProcessEnv . vars,
567+ interModuleDependencyOracle: dependencyOracle)
560568
561- let dependencyOracle = InterModuleDependencyOracle ( )
562569 let scanLibPath = try XCTUnwrap ( fooBuildDriver. toolchain. lookupSwiftScanLib ( ) )
563570 guard try dependencyOracle
564571 . verifyOrCreateScannerInstance ( fileSystem: localFileSystem,
@@ -574,7 +581,12 @@ final class CachingBuildTests: XCTestCase {
574581 try fooBuildDriver. run ( jobs: fooJobs)
575582 XCTAssertFalse ( fooBuildDriver. diagnosticEngine. hasErrors)
576583
577- let cas = try dependencyOracle. createCAS ( pluginPath: nil , onDiskPath: casPath, pluginOptions: [ ] )
584+ let cas = try dependencyOracle. getOrCreateCAS ( pluginPath: nil , onDiskPath: casPath, pluginOptions: [ ] )
585+ if let driverCAS = fooBuildDriver. cas {
586+ XCTAssertEqual ( cas, driverCAS, " CAS should only be created once " )
587+ } else {
588+ XCTFail ( " Cached compilation doesn't have a CAS " )
589+ }
578590 try checkCASForResults ( jobs: fooJobs, cas: cas, fs: fooBuildDriver. fileSystem)
579591
580592 var driver = try Driver ( args: [ " swiftc " ,
@@ -585,7 +597,8 @@ final class CachingBuildTests: XCTestCase {
585597 " -cache-compile-job " , " -cas-path " , casPath. nativePathString ( escaped: true ) ,
586598 " -working-directory " , path. nativePathString ( escaped: true ) ,
587599 main. nativePathString ( escaped: true ) ] + sdkArgumentsForTesting,
588- env: ProcessEnv . vars)
600+ env: ProcessEnv . vars,
601+ interModuleDependencyOracle: dependencyOracle)
589602 // This is currently not supported.
590603 XCTAssertThrowsError ( try driver. planBuild ( ) ) {
591604 XCTAssertEqual ( $0 as? Driver . Error , . unsupportedConfigurationForCaching( " module Foo has prebuilt header dependency " ) )
@@ -623,8 +636,8 @@ final class CachingBuildTests: XCTestCase {
623636 " -Xcc " , " -ivfsoverlay " , " -Xcc " , vfsoverlay. nativePathString ( escaped: true ) ,
624637 " -disable-clang-target " ,
625638 main. nativePathString ( escaped: true ) ] + sdkArgumentsForTesting,
626- env: ProcessEnv . vars)
627- let dependencyOracle = InterModuleDependencyOracle ( )
639+ env: ProcessEnv . vars,
640+ interModuleDependencyOracle : dependencyOracle )
628641 let scanLibPath = try XCTUnwrap ( driver. toolchain. lookupSwiftScanLib ( ) )
629642 guard try dependencyOracle
630643 . verifyOrCreateScannerInstance ( fileSystem: localFileSystem,
@@ -760,11 +773,11 @@ final class CachingBuildTests: XCTestCase {
760773 " -scanner-prefix-map " , testInputsPath. description + " =/^src " ,
761774 " -scanner-prefix-map " , path. description + " =/^tmp " ,
762775 main. nativePathString ( escaped: true ) ] + sdkArgumentsForTesting,
763- env: ProcessEnv . vars)
776+ env: ProcessEnv . vars,
777+ interModuleDependencyOracle: dependencyOracle)
764778 guard driver. isFrontendArgSupported ( . scannerPrefixMap) else {
765779 throw XCTSkip ( " frontend doesn't support prefix map " )
766780 }
767- let dependencyOracle = InterModuleDependencyOracle ( )
768781 let scanLibPath = try XCTUnwrap ( driver. toolchain. lookupSwiftScanLib ( ) )
769782 guard try dependencyOracle
770783 . verifyOrCreateScannerInstance ( fileSystem: localFileSystem,
@@ -830,12 +843,12 @@ final class CachingBuildTests: XCTestCase {
830843 " -output-file-map " , ofm. nativePathString ( escaped: true ) ,
831844 " -working-directory " , path. nativePathString ( escaped: true ) ,
832845 main. nativePathString ( escaped: true ) ] + sdkArgumentsForTesting,
833- env: ProcessEnv . vars)
846+ env: ProcessEnv . vars,
847+ interModuleDependencyOracle: dependencyOracle)
834848 let jobs = try driver. planBuild ( )
835849 try driver. run ( jobs: jobs)
836850 XCTAssertFalse ( driver. diagnosticEngine. hasErrors)
837851
838- let dependencyOracle = InterModuleDependencyOracle ( )
839852 let scanLibPath = try XCTUnwrap ( driver. toolchain. lookupSwiftScanLib ( ) )
840853 guard try dependencyOracle
841854 . verifyOrCreateScannerInstance ( fileSystem: localFileSystem,
@@ -844,7 +857,12 @@ final class CachingBuildTests: XCTestCase {
844857 return
845858 }
846859
847- let cas = try dependencyOracle. createCAS ( pluginPath: nil , onDiskPath: casPath, pluginOptions: [ ] )
860+ let cas = try dependencyOracle. getOrCreateCAS ( pluginPath: nil , onDiskPath: casPath, pluginOptions: [ ] )
861+ if let driverCAS = driver. cas {
862+ XCTAssertEqual ( cas, driverCAS, " CAS should only be created once " )
863+ } else {
864+ XCTFail ( " Cached compilation doesn't have a CAS " )
865+ }
848866 try checkCASForResults ( jobs: jobs, cas: cas, fs: driver. fileSystem)
849867
850868 // try replan the job and make sure some key command-line options are generated.
0 commit comments