Emcee

Форк
0
/
FailureReportingTestRunnerProxy.swift 
95 строк · 3.1 Кб
1
import BuildArtifacts
2
import CommonTestModels
3
import DateProvider
4
import DeveloperDirLocator
5
import EmceeLogging
6
import EmceeLoggingModels
7
import MetricsExtensions
8
import RunnerModels
9
import SimulatorPoolModels
10
import Tmp
11
import Foundation
12
import PathLib
13

14
public final class FailureReportingTestRunnerProxy: TestRunner {
15
    private let dateProvider: DateProvider
16
    private let testRunner: TestRunner
17
    
18
    public init(
19
        dateProvider: DateProvider,
20
        testRunner: TestRunner
21
    ) {
22
        self.dateProvider = dateProvider
23
        self.testRunner = testRunner
24
    }
25
    
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 {
35
        do {
36
            return try testRunner.prepareTestRun(
37
                buildArtifacts: buildArtifacts,
38
                developerDirLocator: developerDirLocator,
39
                entriesToRun: entriesToRun,
40
                logger: logger,
41
                specificMetricRecorder: specificMetricRecorder,
42
                testContext: testContext,
43
                testRunnerStream: testRunnerStream
44
            )
45
        } catch {
46
            return generateFailureResults(
47
                entriesToRun: entriesToRun,
48
                runnerError: error,
49
                testRunnerStream: testRunnerStream
50
            )
51
        }
52
    }
53
    
54
    public func additionalEnvironment(testRunnerWorkingDirectory: AbsolutePath) -> [String: String] {
55
        return testRunner.additionalEnvironment(testRunnerWorkingDirectory: testRunnerWorkingDirectory)
56
    }
57
    
58
    private func generateFailureResults(
59
        entriesToRun: [TestEntry],
60
        runnerError: Error,
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,
69
                    result: .lost,
70
                    testDuration: 0,
71
                    testExceptions: [
72
                        RunnerConstants.failedToStartTestRunner(runnerError).testException
73
                    ],
74
                    logs: [],
75
                    testStartTimestamp: dateProvider.dateSince1970ReferenceDate()
76
                )
77
            )
78
        }
79
        testRunnerStream.closeStream()
80
        return NoOpTestRunnerInvocation()
81
    }
82
}
83

84
private class NoOpTestRunnerInvocation: TestRunnerInvocation {
85
    private class NoOpTestRunnerRunningInvocation: TestRunnerRunningInvocation {
86
        init() {}
87
        let pidInfo = PidInfo(pid: 0, name: "no-op process")
88
        func cancel() {}
89
        func wait() {}
90
    }
91
    
92
    init() {}
93
    
94
    func startExecutingTests() -> TestRunnerRunningInvocation { NoOpTestRunnerRunningInvocation() }
95
}
96

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.