Emcee

Форк
0
/
ResultStream.swift 
60 строк · 1.5 Кб
1
import DateProvider
2
import Foundation
3
import JSONStream
4
import EmceeLogging
5
import PathLib
6
import Runner
7

8
public protocol ResultStream {
9
    func streamContents(
10
        completion: @escaping (Error?) -> ()
11
    )
12
}
13

14
public final class ResultStreamImpl: ResultStream {
15
    private let dateProvider: DateProvider
16
    private let logger: ContextualLogger
17
    private let queue = DispatchQueue(label: "queue")
18
    private let testRunnerStream: TestRunnerStream
19
    private let jsonStream = BlockingArrayBasedJSONStream()
20
    
21
    public init(
22
        dateProvider: DateProvider,
23
        logger: ContextualLogger,
24
        testRunnerStream: TestRunnerStream
25
    ) {
26
        self.dateProvider = dateProvider
27
        self.logger = logger
28
        self.testRunnerStream = testRunnerStream
29
    }
30
    
31
    public func write(data: Data) {
32
        jsonStream.append(data: data)
33
    }
34
    
35
    public func close() {
36
        jsonStream.close()
37
    }
38
    
39
    public func streamContents(
40
        completion: @escaping (Error?) -> ()
41
    ) {
42
        let eventStream = JsonToResultStreamEventStream(
43
            dateProvider: dateProvider,
44
            logger: logger,
45
            testRunnerStream: testRunnerStream
46
        )
47
        let jsonReader = JSONReader(
48
            inputStream: jsonStream,
49
            eventStream: eventStream
50
        )
51
        queue.async {
52
            do {
53
                try jsonReader.start()
54
                completion(nil)
55
            } catch {
56
                completion(error)
57
            }
58
        }
59
    }
60
}
61

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

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

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

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