Emcee
60 строк · 1.5 Кб
1import DateProvider
2import Foundation
3import JSONStream
4import EmceeLogging
5import PathLib
6import Runner
7
8public protocol ResultStream {
9func streamContents(
10completion: @escaping (Error?) -> ()
11)
12}
13
14public final class ResultStreamImpl: ResultStream {
15private let dateProvider: DateProvider
16private let logger: ContextualLogger
17private let queue = DispatchQueue(label: "queue")
18private let testRunnerStream: TestRunnerStream
19private let jsonStream = BlockingArrayBasedJSONStream()
20
21public init(
22dateProvider: DateProvider,
23logger: ContextualLogger,
24testRunnerStream: TestRunnerStream
25) {
26self.dateProvider = dateProvider
27self.logger = logger
28self.testRunnerStream = testRunnerStream
29}
30
31public func write(data: Data) {
32jsonStream.append(data: data)
33}
34
35public func close() {
36jsonStream.close()
37}
38
39public func streamContents(
40completion: @escaping (Error?) -> ()
41) {
42let eventStream = JsonToResultStreamEventStream(
43dateProvider: dateProvider,
44logger: logger,
45testRunnerStream: testRunnerStream
46)
47let jsonReader = JSONReader(
48inputStream: jsonStream,
49eventStream: eventStream
50)
51queue.async {
52do {
53try jsonReader.start()
54completion(nil)
55} catch {
56completion(error)
57}
58}
59}
60}
61