@@ -482,6 +482,51 @@ final class SwiftDriverTests: XCTestCase {
482
482
XCTAssertEqual ( escapingArgs, [ " swift " , " --driver-mode=swiftc " , " -v " , " the end " ] )
483
483
}
484
484
}
485
+
486
+ func testUsingResponseFiles( ) throws {
487
+ let manyArgs = ( 1 ... 500_000 ) . map { " -DTEST_ \( $0) " }
488
+ // Needs response file
489
+ do {
490
+ var driver = try Driver ( args: [ " swift " ] + manyArgs + [ " foo.swift " ] )
491
+ let jobs = try driver. planBuild ( )
492
+ XCTAssertTrue ( jobs. count == 1 && jobs [ 0 ] . kind == . interpret)
493
+ let interpretJob = jobs [ 0 ]
494
+ let resolver = try ArgsResolver ( )
495
+ let resolvedArgs : [ String ] = try resolver. resolveArgumentList ( for: interpretJob, forceResponseFiles: false )
496
+ XCTAssertTrue ( resolvedArgs. count == 2 )
497
+ XCTAssertEqual ( resolvedArgs [ 1 ] . first, " @ " )
498
+ let responseFilePath = try AbsolutePath ( validating: String ( resolvedArgs [ 1 ] . dropFirst ( ) ) )
499
+ let contents = try localFileSystem. readFileContents ( responseFilePath) . description
500
+ XCTAssertTrue ( contents. hasPrefix ( " -frontend \n -interpret \n foo.swift " ) )
501
+ XCTAssertTrue ( contents. contains ( " -D \n TEST_500000 " ) )
502
+ XCTAssertTrue ( contents. contains ( " -D \n TEST_1 " ) )
503
+ }
504
+ // Forced response file
505
+ do {
506
+ var driver = try Driver ( args: [ " swift " ] + [ " foo.swift " ] )
507
+ let jobs = try driver. planBuild ( )
508
+ XCTAssertTrue ( jobs. count == 1 && jobs [ 0 ] . kind == . interpret)
509
+ let interpretJob = jobs [ 0 ]
510
+ let resolver = try ArgsResolver ( )
511
+ let resolvedArgs : [ String ] = try resolver. resolveArgumentList ( for: interpretJob, forceResponseFiles: true )
512
+ XCTAssertTrue ( resolvedArgs. count == 2 )
513
+ XCTAssertEqual ( resolvedArgs [ 1 ] . first, " @ " )
514
+ let responseFilePath = try AbsolutePath ( validating: String ( resolvedArgs [ 1 ] . dropFirst ( ) ) )
515
+ let contents = try localFileSystem. readFileContents ( responseFilePath) . description
516
+ XCTAssertTrue ( contents. hasPrefix ( " -frontend \n -interpret \n foo.swift " ) )
517
+ }
518
+
519
+ // No response file
520
+ do {
521
+ var driver = try Driver ( args: [ " swift " ] + [ " foo.swift " ] )
522
+ let jobs = try driver. planBuild ( )
523
+ XCTAssertTrue ( jobs. count == 1 && jobs [ 0 ] . kind == . interpret)
524
+ let interpretJob = jobs [ 0 ]
525
+ let resolver = try ArgsResolver ( )
526
+ let resolvedArgs : [ String ] = try resolver. resolveArgumentList ( for: interpretJob, forceResponseFiles: false )
527
+ XCTAssertFalse ( resolvedArgs. map { $0. hasPrefix ( " @ " ) } . reduce ( false ) { $0 || $1 } )
528
+ }
529
+ }
485
530
486
531
func testLinking( ) throws {
487
532
var env = ProcessEnv . vars
0 commit comments