blob: 177dd1cb72acfd97ea85159b64095fa3f4ee2847 [file] [log] [blame]
// 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
}
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()
}
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)
}
}