Skip to content

Commit 61bac98

Browse files
committed
Add a unit test for invoking subcommands with response files
1 parent 861beee commit 61bac98

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,51 @@ final class SwiftDriverTests: XCTestCase {
482482
XCTAssertEqual(escapingArgs, ["swift", "--driver-mode=swiftc", "-v","the end"])
483483
}
484484
}
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\nfoo.swift"))
501+
XCTAssertTrue(contents.contains("-D\nTEST_500000"))
502+
XCTAssertTrue(contents.contains("-D\nTEST_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\nfoo.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+
}
485530

486531
func testLinking() throws {
487532
var env = ProcessEnv.vars

0 commit comments

Comments
 (0)