4
import DeveloperDirLocator
6
import EmceeLoggingModels
7
import MetricsExtensions
9
import SimulatorPoolModels
14
public final class FailureReportingTestRunnerProxy: TestRunner {
15
private let dateProvider: DateProvider
16
private let testRunner: TestRunner
19
dateProvider: DateProvider,
20
testRunner: TestRunner
22
self.dateProvider = dateProvider
23
self.testRunner = testRunner
26
public func prepareTestRun(
27
buildArtifacts: AppleBuildArtifacts,
28
developerDirLocator: DeveloperDirLocator,
29
entriesToRun: [TestEntry],
30
logger: ContextualLogger,
31
specificMetricRecorder: SpecificMetricRecorder,
32
testContext: AppleTestContext,
33
testRunnerStream: TestRunnerStream
34
) throws -> TestRunnerInvocation {
36
return try testRunner.prepareTestRun(
37
buildArtifacts: buildArtifacts,
38
developerDirLocator: developerDirLocator,
39
entriesToRun: entriesToRun,
41
specificMetricRecorder: specificMetricRecorder,
42
testContext: testContext,
43
testRunnerStream: testRunnerStream
46
return generateFailureResults(
47
entriesToRun: entriesToRun,
49
testRunnerStream: testRunnerStream
54
public func additionalEnvironment(testRunnerWorkingDirectory: AbsolutePath) -> [String: String] {
55
return testRunner.additionalEnvironment(testRunnerWorkingDirectory: testRunnerWorkingDirectory)
58
private func generateFailureResults(
59
entriesToRun: [TestEntry],
61
testRunnerStream: TestRunnerStream
62
) -> TestRunnerInvocation {
63
testRunnerStream.openStream()
64
for testEntry in entriesToRun {
65
testRunnerStream.testStarted(testName: testEntry.testName)
66
testRunnerStream.testStopped(
67
testStoppedEvent: TestStoppedEvent(
68
testName: testEntry.testName,
72
RunnerConstants.failedToStartTestRunner(runnerError).testException
75
testStartTimestamp: dateProvider.dateSince1970ReferenceDate()
79
testRunnerStream.closeStream()
80
return NoOpTestRunnerInvocation()
84
private class NoOpTestRunnerInvocation: TestRunnerInvocation {
85
private class NoOpTestRunnerRunningInvocation: TestRunnerRunningInvocation {
87
let pidInfo = PidInfo(pid: 0, name: "no-op process")
94
func startExecutingTests() -> TestRunnerRunningInvocation { NoOpTestRunnerRunningInvocation() }