Emcee
86 строк · 5.8 Кб
1import CommonTestModels
2import DateProviderTestHelpers
3import Foundation
4import TestHelpers
5import ResultStream
6import ResultStreamModels
7import RunnerTestHelpers
8import SynchronousWaiter
9import XCTest
10
11final class ResultStreamTests: XCTestCase {
12func test() throws {
13let streamContents = """
14{"_type":{"_name":"StreamedEvent"},"name":{"_type":{"_name":"String"},"_value":"testStarted"},"structuredPayload":{"_type":{"_name":"TestEventPayload","_supertype":{"_name":"AnyStreamedEventPayload"}},"resultInfo":{"_type":{"_name":"StreamedActionResultInfo"},"resultIndex":{"_type":{"_name":"Int"},"_value":"1"}},"testIdentifier":{"_type":{"_name":"ActionTestSummaryIdentifiableObject","_supertype":{"_name":"ActionAbstractTestSummary"}},"identifier":{"_type":{"_name":"String"},"_value":"ClassName\\/test()"},"name":{"_type":{"_name":"String"},"_value":"test()"}}}}
15{"_type":{"_name":"StreamedEvent"},"name":{"_type":{"_name":"String"},"_value":"issueEmitted"},"structuredPayload":{"_type":{"_name":"IssueEmittedEventPayload","_supertype":{"_name":"AnyStreamedEventPayload"}},"issue":{"_type":{"_name":"TestFailureIssueSummary","_supertype":{"_name":"IssueSummary"}},"documentLocationInCreatingWorkspace":{"_type":{"_name":"DocumentLocation"},"concreteTypeName":{"_type":{"_name":"String"},"_value":"DVTTextDocumentLocation"},"url":{"_type":{"_name":"String"},"_value":"file:\\/\\/\\/path/to/file.swift#CharacterRangeLen=0&EndingLineNumber=110&StartingLineNumber=110"}},"issueType":{"_type":{"_name":"String"},"_value":"Uncategorized"},"message":{"_type":{"_name":"String"},"_value":"\\"проверить, что отображается \\"Экран\\"\\" неуспешно, так как: элемент не найден в иерархии"},"testCaseName":{"_type":{"_name":"String"},"_value":"ClassName.test()"}},"resultInfo":{"_type":{"_name":"StreamedActionResultInfo"},"resultIndex":{"_type":{"_name":"Int"},"_value":"1"}},"severity":{"_type":{"_name":"String"},"_value":"testFailure"}}}
16{"_type":{"_name":"StreamedEvent"},"name":{"_type":{"_name":"String"},"_value":"testFinished"},"structuredPayload":{"_type":{"_name":"TestFinishedEventPayload","_supertype":{"_name":"AnyStreamedEventPayload"}},"resultInfo":{"_type":{"_name":"StreamedActionResultInfo"},"resultIndex":{"_type":{"_name":"Int"},"_value":"1"}},"test":{"_type":{"_name":"ActionTestMetadata","_supertype":{"_name":"ActionTestSummaryIdentifiableObject","_supertype":{"_name":"ActionAbstractTestSummary"}}},"duration":{"_type":{"_name":"Double"},"_value":"7.6910330057144165"},"identifier":{"_type":{"_name":"String"},"_value":"ClassName\\/test()"},"name":{"_type":{"_name":"String"},"_value":"test()"},"testStatus":{"_type":{"_name":"String"},"_value":"Success"}}}}
17"""
18
19let stream = resultStream(with: streamContents)
20wait(for: [stream.streamFinishedExpectation()], timeout: 15)
21
22XCTAssertEqual(
23testRunnerStream.castTo(TestName.self, index: 0),
24TestName(className: "ClassName", methodName: "test")
25)
26XCTAssertEqual(
27testRunnerStream.castTo(TestException.self, index: 1),
28TestException(
29reason: "\"проверить, что отображается \"Экран\"\" неуспешно, так как: элемент не найден в иерархии",
30filePathInProject: "/path/to/file.swift",
31lineNumber: 110,
32relatedTestName: TestName(className: "ClassName", methodName: "test")
33)
34)
35XCTAssertEqual(
36testRunnerStream.castTo(TestStoppedEvent.self, index: 2),
37TestStoppedEvent(
38testName: TestName(className: "ClassName", methodName: "test"),
39result: .success,
40testDuration: 7.6910330057144165,
41testExceptions: [],
42logs: [],
43testStartTimestamp: dateProvider.dateSince1970ReferenceDate().addingTimeInterval(-7.6910330057144165)
44)
45)
46}
47
48func test___parsing_cyrillic() throws {
49let streamContents = """
50{"_type":{"_name":"StreamedEvent"},"name":{"_type":{"_name":"String"},"_value":"testStarted"},"structuredPayload":{"_type":{"_name":"TestEventPayload","_supertype":{"_name":"AnyStreamedEventPayload"}},"resultInfo":{"_type":{"_name":"StreamedActionResultInfo"},"resultIndex":{"_type":{"_name":"Int"},"_value":"1"}},"testIdentifier":{"_type":{"_name":"ActionTestSummaryIdentifiableObject","_supertype":{"_name":"ActionAbstractTestSummary"}},"identifier":{"_type":{"_name":"String"},"_value":"ClassName\\/привет()"},"name":{"_type":{"_name":"String"},"_value":"привет()"}}}}
51"""
52
53let stream = resultStream(with: streamContents)
54wait(for: [stream.streamFinishedExpectation()], timeout: 15)
55
56XCTAssertEqual(
57testRunnerStream.castTo(TestName.self, index: 0),
58TestName(className: "ClassName", methodName: "привет")
59)
60}
61
62lazy var dateProvider = DateProviderFixture(Date(timeIntervalSince1970: 100))
63lazy var testRunnerStream = AccumulatingTestRunnerStream()
64
65private func resultStream(with contents: String) -> ResultStream {
66let stream = ResultStreamImpl(
67dateProvider: dateProvider,
68logger: .noOp,
69testRunnerStream: testRunnerStream
70)
71stream.write(data: contents.data(using: .utf8) ?? Data())
72stream.close()
73return stream
74}
75}
76
77private extension ResultStream {
78func streamFinishedExpectation() -> XCTestExpectation {
79let streamFinishedExpectation = XCTestExpectation(description: "")
80streamContents { error in
81XCTAssertNil(error, "Unexpected error: \(String(describing: error))")
82streamFinishedExpectation.fulfill()
83}
84return streamFinishedExpectation
85}
86}
87