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
|
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2016 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//
// XCTestSuite.swift
// A collection of test cases.
//
/// A subclass of XCTest, XCTestSuite is a collection of test cases. Based on
/// what's passed into XCTMain(), a hierarchy of suites is built up, but
/// XCTestSuite can also be instantiated and manipulated directly:
///
/// let suite = XCTestSuite(name: "My Tests")
/// suite.addTest(myTest)
/// suite.testCaseCount // 1
/// suite.run()
open class XCTestSuite: XCTest {
open private(set) var tests = [XCTest]()
/// The name of this test suite.
open override var name: String {
return _name
}
/// A private setter for the name of this test suite.
private let _name: String
/// The number of test cases in this suite.
open override var testCaseCount: Int {
return tests.reduce(0) { $0 + $1.testCaseCount }
}
open override var testRunClass: AnyClass? {
return XCTestSuiteRun.self
}
#if DISABLE_XCTWAITER
override func _performAsync(_ run: XCTestRun) async {
guard let testRun = run as? XCTestSuiteRun else {
fatalError("Wrong XCTestRun class.")
}
run.start()
func syncSetUp() { setUp() }
syncSetUp()
for test in tests {
await test._runAsync()
if let childPerformTask = test.performTask {
_ = await childPerformTask.value
}
testRun.addTestRun(test.testRun!)
}
func syncTearDown() { tearDown() }
syncTearDown()
run.stop()
}
#else
open override func perform(_ run: XCTestRun) {
guard let testRun = run as? XCTestSuiteRun else {
fatalError("Wrong XCTestRun class.")
}
run.start()
setUp()
for test in tests {
test.run()
testRun.addTestRun(test.testRun!)
}
tearDown()
run.stop()
}
#endif
public init(name: String) {
_name = name
}
/// Adds a test (either an `XCTestSuite` or an `XCTestCase` to this
/// collection.
open func addTest(_ test: XCTest) {
tests.append(test)
}
}
|