diff --git a/Tests/SwiftDriverTests/JobExecutorTests.swift b/Tests/SwiftDriverTests/JobExecutorTests.swift index 74bb1a6db..e5d6a838f 100644 --- a/Tests/SwiftDriverTests/JobExecutorTests.swift +++ b/Tests/SwiftDriverTests/JobExecutorTests.swift @@ -10,8 +10,28 @@ extension Job.ArgTemplate: ExpressibleByStringLiteral { } class JobCollectingDelegate: JobExecutorDelegate { + struct StubProcess: ProcessProtocol { + static func launchProcess( + arguments: [String] + ) throws -> ProcessProtocol { + return StubProcess() + } + + var processID: TSCBasic.Process.ProcessID { .init(-1) } + + func waitUntilExit() throws -> ProcessResult { + return ProcessResult( + arguments: [], + exitStatus: .terminated(code: 0), + output: Result.success(ByteString("test").contents), + stderrOutput: Result.success([]) + ) + } + } + var started: [Job] = [] var finished: [(Job, ProcessResult)] = [] + var useStubProcess = false func jobFinished(job: Job, result: ProcessResult, pid: Int) { finished.append((job, result)) @@ -20,6 +40,13 @@ class JobCollectingDelegate: JobExecutorDelegate { func jobStarted(job: Job, arguments: [String], pid: Int) { started.append(job) } + + func launchProcess(for job: Job, arguments: [String]) throws -> ProcessProtocol { + if useStubProcess { + return StubProcess() + } + return try TSCBasic.Process.launchProcess(arguments: arguments) + } } final class JobExecutorTests: XCTestCase { @@ -117,7 +144,7 @@ final class JobExecutorTests: XCTestCase { let delegate = JobCollectingDelegate() let executor = JobExecutor(jobs: [compileFoo, compileMain, link], resolver: resolver, executorDelegate: delegate) - try executor.build(.relative(RelativePath("main"))) + try executor.execute() let output = try TSCBasic.Process.checkNonZeroExit(args: exec.pathString) XCTAssertEqual(output, "5\n") @@ -132,25 +159,6 @@ final class JobExecutorTests: XCTestCase { } func testStubProcessProtocol() throws { - struct StubProcess: ProcessProtocol { - static func launchProcess( - arguments: [String] - ) throws -> ProcessProtocol { - return StubProcess() - } - - var processID: TSCBasic.Process.ProcessID { .init(-1) } - - func waitUntilExit() throws -> ProcessResult { - return ProcessResult( - arguments: [], - exitStatus: .terminated(code: 0), - output: Result.success(ByteString("test").contents), - stderrOutput: Result.success([]) - ) - } - } - let job = Job( kind: .compile, tool: .absolute(AbsolutePath("/usr/bin/swift")), @@ -160,12 +168,12 @@ final class JobExecutorTests: XCTestCase { ) let delegate = JobCollectingDelegate() + delegate.useStubProcess = true let executor = JobExecutor( jobs: [job], resolver: try ArgsResolver(), - executorDelegate: delegate, - processProtocol: StubProcess.self + executorDelegate: delegate ) - try executor.build(.temporary(RelativePath("main"))) + try executor.execute() XCTAssertEqual(try delegate.finished[0].1.utf8Output(), "test") }