Emcee

Форк
0
/
ResultStreamTests.swift 
86 строк · 5.8 Кб
1
import CommonTestModels
2
import DateProviderTestHelpers
3
import Foundation
4
import TestHelpers
5
import ResultStream
6
import ResultStreamModels
7
import RunnerTestHelpers
8
import SynchronousWaiter
9
import XCTest
10

11
final class ResultStreamTests: XCTestCase {
12
    func test() throws {
13
        let 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

19
        let stream = resultStream(with: streamContents)
20
        wait(for: [stream.streamFinishedExpectation()], timeout: 15)
21
        
22
        XCTAssertEqual(
23
            testRunnerStream.castTo(TestName.self, index: 0),
24
            TestName(className: "ClassName", methodName: "test")
25
        )
26
        XCTAssertEqual(
27
            testRunnerStream.castTo(TestException.self, index: 1),
28
            TestException(
29
                reason: "\"проверить, что отображается \"Экран\"\" неуспешно, так как: элемент не найден в иерархии",
30
                filePathInProject: "/path/to/file.swift",
31
                lineNumber: 110,
32
                relatedTestName: TestName(className: "ClassName", methodName: "test")
33
            )
34
        )
35
        XCTAssertEqual(
36
            testRunnerStream.castTo(TestStoppedEvent.self, index: 2),
37
            TestStoppedEvent(
38
                testName: TestName(className: "ClassName", methodName: "test"),
39
                result: .success,
40
                testDuration: 7.6910330057144165,
41
                testExceptions: [],
42
                logs: [],
43
                testStartTimestamp: dateProvider.dateSince1970ReferenceDate().addingTimeInterval(-7.6910330057144165)
44
            )
45
        )
46
    }
47
    
48
    func test___parsing_cyrillic() throws {
49
        let 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

53
        let stream = resultStream(with: streamContents)
54
        wait(for: [stream.streamFinishedExpectation()], timeout: 15)
55
        
56
        XCTAssertEqual(
57
            testRunnerStream.castTo(TestName.self, index: 0),
58
            TestName(className: "ClassName", methodName: "привет")
59
        )
60
    }
61
    
62
    lazy var dateProvider = DateProviderFixture(Date(timeIntervalSince1970: 100))
63
    lazy var testRunnerStream = AccumulatingTestRunnerStream()
64
    
65
    private func resultStream(with contents: String) -> ResultStream {
66
        let stream = ResultStreamImpl(
67
            dateProvider: dateProvider,
68
            logger: .noOp,
69
            testRunnerStream: testRunnerStream
70
        )
71
        stream.write(data: contents.data(using: .utf8) ?? Data())
72
        stream.close()
73
        return stream
74
    }
75
}
76

77
private extension ResultStream {
78
    func streamFinishedExpectation() -> XCTestExpectation {
79
        let streamFinishedExpectation = XCTestExpectation(description: "")
80
        streamContents { error in
81
            XCTAssertNil(error, "Unexpected error: \(String(describing: error))")
82
            streamFinishedExpectation.fulfill()
83
        }
84
        return streamFinishedExpectation
85
    }
86
}
87

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

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

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

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