@@ -3136,6 +3136,158 @@ final class SwiftDriverTests: XCTestCase {
31363136 XCTAssertTrue ( job. commandLine. contains ( . flag( " -use-static-resource-dir " ) ) )
31373137 }
31383138 }
3139+
3140+ func testFilelist( ) throws {
3141+ do {
3142+ var driver = try Driver ( args: [ " swiftc " , " -emit-module " , " ./a.swift " , " ./b.swift " , " ./c.swift " , " -module-name " , " main " , " -target " , " x86_64-apple-macosx10.9 " , " -driver-filelist-threshold=0 " ] )
3143+ let plannedJobs = try driver. planBuild ( )
3144+
3145+ let jobA = plannedJobs [ 0 ]
3146+ let flagA = jobA. commandLine. firstIndex ( of: . flag( " -supplementary-output-file-map " ) ) !
3147+ let fileListArgumentA = jobA. commandLine [ jobA. commandLine. index ( after: flagA) ]
3148+ guard case let . path( . fileList( _, fileListA) ) = fileListArgumentA else {
3149+ XCTFail ( " Argument wasn't a filelist " )
3150+ return
3151+ }
3152+ guard case let . outputFileMap( mapA) = fileListA else {
3153+ XCTFail ( " FileList wasn't OutputFileMap " )
3154+ return
3155+ }
3156+ let filesA = try XCTUnwrap ( mapA. entries [ . relative( RelativePath ( " a.swift " ) ) ] )
3157+ XCTAssertTrue ( filesA. keys. contains ( . swiftModule) )
3158+ XCTAssertTrue ( filesA. keys. contains ( . swiftDocumentation) )
3159+ XCTAssertTrue ( filesA. keys. contains ( . swiftSourceInfoFile) )
3160+
3161+ let jobB = plannedJobs [ 1 ]
3162+ let flagB = jobB. commandLine. firstIndex ( of: . flag( " -supplementary-output-file-map " ) ) !
3163+ let fileListArgumentB = jobB. commandLine [ jobB. commandLine. index ( after: flagB) ]
3164+ guard case let . path( . fileList( _, fileListB) ) = fileListArgumentB else {
3165+ XCTFail ( " Argument wasn't a filelist " )
3166+ return
3167+ }
3168+ guard case let . outputFileMap( mapB) = fileListB else {
3169+ XCTFail ( " FileList wasn't OutputFileMap " )
3170+ return
3171+ }
3172+ let filesB = try XCTUnwrap ( mapB. entries [ . relative( RelativePath ( " b.swift " ) ) ] )
3173+ XCTAssertTrue ( filesB. keys. contains ( . swiftModule) )
3174+ XCTAssertTrue ( filesB. keys. contains ( . swiftDocumentation) )
3175+ XCTAssertTrue ( filesB. keys. contains ( . swiftSourceInfoFile) )
3176+
3177+ let jobC = plannedJobs [ 2 ]
3178+ let flagC = jobC. commandLine. firstIndex ( of: . flag( " -supplementary-output-file-map " ) ) !
3179+ let fileListArgumentC = jobC. commandLine [ jobC. commandLine. index ( after: flagC) ]
3180+ guard case let . path( . fileList( _, fileListC) ) = fileListArgumentC else {
3181+ XCTFail ( " Argument wasn't a filelist " )
3182+ return
3183+ }
3184+ guard case let . outputFileMap( mapC) = fileListC else {
3185+ XCTFail ( " FileList wasn't OutputFileMap " )
3186+ return
3187+ }
3188+ let filesC = try XCTUnwrap ( mapC. entries [ . relative( RelativePath ( " c.swift " ) ) ] )
3189+ XCTAssertTrue ( filesC. keys. contains ( . swiftModule) )
3190+ XCTAssertTrue ( filesC. keys. contains ( . swiftDocumentation) )
3191+ XCTAssertTrue ( filesC. keys. contains ( . swiftSourceInfoFile) )
3192+ }
3193+
3194+ do {
3195+ var driver = try Driver ( args: [ " swiftc " , " -c " , " ./a.swift " , " ./b.swift " , " ./c.swift " , " -module-name " , " main " , " -target " , " x86_64-apple-macosx10.9 " , " -driver-filelist-threshold=0 " , " -whole-module-optimization " ] )
3196+ let plannedJobs = try driver. planBuild ( )
3197+ let job = plannedJobs [ 0 ]
3198+ let inputsFlag = job. commandLine. firstIndex ( of: . flag( " -filelist " ) ) !
3199+ let inputFileListArgument = job. commandLine [ job. commandLine. index ( after: inputsFlag) ]
3200+ guard case let . path( . fileList( _, inputFileList) ) = inputFileListArgument else {
3201+ XCTFail ( " Argument wasn't a filelist " )
3202+ return
3203+ }
3204+ guard case let . list( inputs) = inputFileList else {
3205+ XCTFail ( " FileList wasn't List " )
3206+ return
3207+ }
3208+ XCTAssertEqual ( inputs, [ . relative( RelativePath ( " a.swift " ) ) , . relative( RelativePath ( " b.swift " ) ) , . relative( RelativePath ( " c.swift " ) ) ] )
3209+
3210+ let outputsFlag = job. commandLine. firstIndex ( of: . flag( " -output-filelist " ) ) !
3211+ let outputFileListArgument = job. commandLine [ job. commandLine. index ( after: outputsFlag) ]
3212+ guard case let . path( . fileList( _, outputFileList) ) = outputFileListArgument else {
3213+ XCTFail ( " Argument wasn't a filelist " )
3214+ return
3215+ }
3216+ guard case let . list( outputs) = outputFileList else {
3217+ XCTFail ( " FileList wasn't List " )
3218+ return
3219+ }
3220+ XCTAssertEqual ( outputs, [ . relative( RelativePath ( " main.o " ) ) ] )
3221+ }
3222+
3223+ do {
3224+ var driver = try Driver ( args: [ " swiftc " , " -c " , " ./a.swift " , " ./b.swift " , " ./c.swift " , " -module-name " , " main " , " -target " , " x86_64-apple-macosx10.9 " , " -driver-filelist-threshold=0 " , " -whole-module-optimization " , " -num-threads " , " 1 " ] )
3225+ let plannedJobs = try driver. planBuild ( )
3226+ let job = plannedJobs [ 0 ]
3227+ let outputsFlag = job. commandLine. firstIndex ( of: . flag( " -output-filelist " ) ) !
3228+ let outputFileListArgument = job. commandLine [ job. commandLine. index ( after: outputsFlag) ]
3229+ guard case let . path( . fileList( _, outputFileList) ) = outputFileListArgument else {
3230+ XCTFail ( " Argument wasn't a filelist " )
3231+ return
3232+ }
3233+ guard case let . list( outputs) = outputFileList else {
3234+ XCTFail ( " FileList wasn't List " )
3235+ return
3236+ }
3237+ XCTAssertEqual ( outputs, [ . relative( RelativePath ( " a.o " ) ) , . relative( RelativePath ( " b.o " ) ) , . relative( RelativePath ( " c.o " ) ) ] )
3238+ }
3239+
3240+ do {
3241+ var driver = try Driver ( args: [ " swiftc " , " -c " , " ./a.swift " , " ./b.swift " , " ./c.swift " , " -module-name " , " main " , " -target " , " x86_64-apple-macosx10.9 " , " -driver-filelist-threshold=0 " , " -whole-module-optimization " , " -num-threads " , " 1 " , " -embed-bitcode " ] )
3242+ let plannedJobs = try driver. planBuild ( )
3243+ let job = plannedJobs [ 0 ]
3244+ let outputsFlag = job. commandLine. firstIndex ( of: . flag( " -output-filelist " ) ) !
3245+ let outputFileListArgument = job. commandLine [ job. commandLine. index ( after: outputsFlag) ]
3246+ guard case let . path( . fileList( _, outputFileList) ) = outputFileListArgument else {
3247+ XCTFail ( " Argument wasn't a filelist " )
3248+ return
3249+ }
3250+ guard case let . list( outputs) = outputFileList else {
3251+ XCTFail ( " FileList wasn't List " )
3252+ return
3253+ }
3254+ XCTAssertEqual ( outputs, [ . temporary( RelativePath ( " a.bc " ) ) , . temporary( RelativePath ( " b.bc " ) ) , . temporary( RelativePath ( " c.bc " ) ) ] )
3255+ }
3256+
3257+ do {
3258+ var driver = try Driver ( args: [ " swiftc " , " -emit-library " , " ./a.swift " , " ./b.swift " , " ./c.swift " , " -module-name " , " main " , " -target " , " x86_64-apple-macosx10.9 " , " -driver-filelist-threshold=0 " ] )
3259+ let plannedJobs = try driver. planBuild ( )
3260+ let job = plannedJobs [ 3 ]
3261+ let inputsFlag = job. commandLine. firstIndex ( of: . flag( " -filelist " ) ) !
3262+ let inputFileListArgument = job. commandLine [ job. commandLine. index ( after: inputsFlag) ]
3263+ guard case let . path( . fileList( _, inputFileList) ) = inputFileListArgument else {
3264+ XCTFail ( " Argument wasn't a filelist " )
3265+ return
3266+ }
3267+ guard case let . list( inputs) = inputFileList else {
3268+ XCTFail ( " FileList wasn't List " )
3269+ return
3270+ }
3271+ XCTAssertEqual ( inputs, [ . temporary( RelativePath ( " a.o " ) ) , . temporary( RelativePath ( " b.o " ) ) , . temporary( RelativePath ( " c.o " ) ) ] )
3272+ }
3273+
3274+ do {
3275+ var driver = try Driver ( args: [ " swiftc " , " -emit-library " , " ./a.swift " , " ./b.swift " , " ./c.swift " , " -module-name " , " main " , " -target " , " x86_64-apple-macosx10.9 " , " -driver-filelist-threshold=0 " , " -whole-module-optimization " , " -num-threads " , " 1 " ] )
3276+ let plannedJobs = try driver. planBuild ( )
3277+ let job = plannedJobs [ 1 ]
3278+ let inputsFlag = job. commandLine. firstIndex ( of: . flag( " -filelist " ) ) !
3279+ let inputFileListArgument = job. commandLine [ job. commandLine. index ( after: inputsFlag) ]
3280+ guard case let . path( . fileList( _, inputFileList) ) = inputFileListArgument else {
3281+ XCTFail ( " Argument wasn't a filelist " )
3282+ return
3283+ }
3284+ guard case let . list( inputs) = inputFileList else {
3285+ XCTFail ( " FileList wasn't List " )
3286+ return
3287+ }
3288+ XCTAssertEqual ( inputs, [ . temporary( RelativePath ( " a.o " ) ) , . temporary( RelativePath ( " b.o " ) ) , . temporary( RelativePath ( " c.o " ) ) ] )
3289+ }
3290+ }
31393291}
31403292
31413293func assertString(
0 commit comments