| // 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 |
| // |
| // |
| // XCAbstractTest.swift |
| // An abstract base class that XCTestCase and XCTestSuite inherit from. |
| // The purpose of this class is to mirror the design of Apple XCTest. |
| // |
| |
| /// An abstract base class for testing. `XCTestCase` and `XCTestSuite` extend |
| /// `XCTest` to provide for creating, managing, and executing tests. Most |
| /// developers will not need to subclass `XCTest` directly. |
| open class XCTest { |
| /// Test's name. Must be overridden by subclasses. |
| open var name: String { |
| fatalError("Must be overridden by subclasses.") |
| } |
| |
| /// Number of test cases. Must be overridden by subclasses. |
| open var testCaseCount: Int { |
| fatalError("Must be overridden by subclasses.") |
| } |
| |
| /// The `XCTestRun` subclass that will be instantiated when the test is run |
| /// to hold the test's results. Must be overridden by subclasses. |
| open var testRunClass: AnyClass? { |
| fatalError("Must be overridden by subclasses.") |
| } |
| |
| /// The test run object that executed the test, an instance of |
| /// testRunClass. If the test has not yet been run, this will be nil. |
| open private(set) var testRun: XCTestRun? = nil |
| |
| /// The method through which tests are executed. Must be overridden by |
| /// subclasses. |
| open func perform(_ run: XCTestRun) { |
| fatalError("Must be overridden by subclasses.") |
| } |
| |
| /// Creates an instance of the `testRunClass` and passes it as a parameter |
| /// to `perform()`. |
| open func run() { |
| guard let testRunType = testRunClass as? XCTestRun.Type else { |
| fatalError("XCTest.testRunClass must be a kind of XCTestRun.") |
| } |
| testRun = testRunType.init(test: self) |
| perform(testRun!) |
| } |
| |
| /// Setup method called before the invocation of each test method in the |
| /// class. |
| open func setUp() {} |
| |
| /// Teardown method called after the invocation of each test method in the |
| /// class. |
| open func tearDown() {} |
| |
| // FIXME: This initializer is required due to a Swift compiler bug on Linux. |
| // It should be removed once the bug is fixed. |
| public init() {} |
| } |