1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
// RUN: %{swiftc} %s -o %T/MultipleObservers
// RUN: %T/MultipleObservers > %t || true
// RUN: %{xctest_checker} %t %s
#if os(macOS)
import SwiftXCTest
#else
import XCTest
#endif
class Observer: XCTestObservation {
var startedBundlePaths = [String]()
var startedTestSuites = [XCTestSuite]()
var startedTestCaseNames = [String]()
var failureDescriptions = [String]()
var finishedTestCaseNames = [String]()
var finishedTestSuites = [XCTestSuite]()
var finishedBundlePaths = [String]()
func testBundleWillStart(_ testBundle: Bundle) {
startedBundlePaths.append(testBundle.bundlePath)
}
func testSuiteWillStart(_ testSuite: XCTestSuite) {
startedTestSuites.append(testSuite)
}
func testCaseWillStart(_ testCase: XCTestCase) {
startedTestCaseNames.append(testCase.name)
}
func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {
failureDescriptions.append(description)
}
func testCaseDidFinish(_ testCase: XCTestCase) {
finishedTestCaseNames.append(testCase.name)
}
func testSuiteDidFinish(_ testSuite: XCTestSuite) {
print("In \(#function): \(testSuite.name)")
}
func testBundleDidFinish(_ testBundle: Bundle) {
print("In \(#function)")
}
}
let observer1 = Observer()
let observer2 = Observer()
class Observation: XCTestCase {
static var allTests = {
return [
("test_one", test_one),
("test_two", test_two),
("test_three", test_three),
]
}()
func test_one() {
XCTAssertEqual(observer1.startedBundlePaths.count, 1)
XCTAssertEqual(observer2.startedBundlePaths.count, 1)
XCTAssertEqual(
observer1.startedTestSuites.count, 3,
"Three test suites should have started: 'All tests', 'tmp.xctest', and 'Observation'.")
XCTAssertEqual(
observer2.startedTestSuites.count, 3,
"Three test suites should have started: 'All tests', 'tmp.xctest', and 'Observation'.")
XCTAssertEqual(observer1.startedTestCaseNames, ["Observation.test_one"])
XCTAssertEqual(observer2.startedTestCaseNames, ["Observation.test_one"])
XCTAssertEqual(observer1.failureDescriptions, [])
XCTAssertEqual(observer2.failureDescriptions, [])
XCTAssertEqual(observer1.finishedTestCaseNames, [])
XCTAssertEqual(observer2.finishedTestCaseNames, [])
XCTAssertEqual(observer1.finishedBundlePaths.count, 0)
XCTAssertEqual(observer2.finishedBundlePaths.count, 0)
XCTFail("fail!")
XCTAssertEqual(observer1.failureDescriptions, ["failed - fail!"])
XCTAssertEqual(observer2.failureDescriptions, ["failed - fail!"])
}
func test_two() {
XCTAssertEqual(observer1.startedBundlePaths.count, 1)
XCTAssertEqual(observer2.startedBundlePaths.count, 1)
XCTAssertEqual(
observer1.startedTestSuites.count, 3,
"Three test suites should have started: 'All tests', 'tmp.xctest', and 'Observation'.")
XCTAssertEqual(
observer2.startedTestSuites.count, 3,
"Three test suites should have started: 'All tests', 'tmp.xctest', and 'Observation'.")
XCTAssertEqual(observer1.startedTestCaseNames, ["Observation.test_one", "Observation.test_two"])
XCTAssertEqual(observer2.startedTestCaseNames, ["Observation.test_one", "Observation.test_two"])
XCTAssertEqual(observer1.finishedTestCaseNames,["Observation.test_one"])
XCTAssertEqual(observer2.finishedTestCaseNames,["Observation.test_one"])
XCTAssertEqual(observer1.finishedBundlePaths.count, 0)
XCTAssertEqual(observer2.finishedBundlePaths.count, 0)
XCTestObservationCenter.shared.removeTestObserver(observer1)
XCTestObservationCenter.shared.removeTestObserver(observer2)
}
func test_three() {
XCTAssertEqual(observer1.startedBundlePaths.count, 1)
XCTAssertEqual(observer2.startedBundlePaths.count, 1)
XCTAssertEqual(observer1.startedTestCaseNames, ["Observation.test_one", "Observation.test_two"])
XCTAssertEqual(observer2.startedTestCaseNames, ["Observation.test_one", "Observation.test_two"])
XCTAssertEqual(observer1.finishedTestCaseNames,["Observation.test_one"])
XCTAssertEqual(observer2.finishedTestCaseNames,["Observation.test_one"])
XCTAssertEqual(observer1.finishedBundlePaths.count, 0)
XCTAssertEqual(observer2.finishedBundlePaths.count, 0)
XCTestObservationCenter.shared.addTestObserver(observer1)
XCTestObservationCenter.shared.addTestObserver(observer2)
}
}
// There's no guarantee as to the order in which these two observers will be
// called, so we match any order here.
// CHECK: In testSuiteDidFinish\(_:\): Observation
// CHECK: In testSuiteDidFinish\(_:\): Observation
XCTMain(
[testCase(Observation.allTests)],
arguments: CommandLine.arguments,
observers: [observer1, observer2]
)
// CHECK: In testSuiteDidFinish\(_:\): .*\.xctest
// CHECK: In testSuiteDidFinish\(_:\): .*\.xctest
// CHECK: In testSuiteDidFinish\(_:\): All tests
// CHECK: In testSuiteDidFinish\(_:\): All tests
// CHECK: In testBundleDidFinish\(_:\)
// CHECK: In testBundleDidFinish\(_:\)
|