forked from swiftlang/swift-corelibs-xctest
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathXCTestSuite.swift
70 lines (62 loc) · 2.17 KB
/
XCTestSuite.swift
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
// 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()
public class XCTestSuite: XCTest {
public private(set) var tests = [XCTest]()
/// The name of this test suite.
override public var name: String {
return _name
}
/// A private setter for the name of this test suite.
/// - Note: FIXME: This property should be readonly, but currently has to
/// be publicly settable due to a Swift compiler bug on Linux. To ensure
/// compatibility of tests between swift-corelibs-xctest and Apple XCTest,
/// this property should not be modified. See
/// https://bugs.swift.org/browse/SR-1129 for details.
public let _name: String
/// The number of test cases in this suite.
public override var testCaseCount: UInt {
return tests.reduce(0) { $0 + $1.testCaseCount }
}
public override var testRunClass: AnyClass? {
return XCTestSuiteRun.self
}
public 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()
}
public init(name: String) {
_name = name
}
/// Adds a test (either an `XCTestSuite` or an `XCTestCase` to this
/// collection.
public func addTest(_ test: XCTest) {
tests.append(test)
}
}