@@ -34,8 +34,18 @@ extension XCTestCase {
3434 var unexpectedFailures = 0
3535 let overallDuration = measureTimeExecutingBlock {
3636 for (name, test) in tests {
37- XCTCurrentTestCase = self
3837 let method = " \( self . dynamicType) . \( name) "
38+
39+ var failures = [ XCTFailure] ( )
40+ XCTFailureHandler = { failure in
41+ if !self . continueAfterFailure {
42+ failure. emit ( method)
43+ fatalError ( " Terminating execution due to test failure " , file: failure. file, line: failure. line)
44+ } else {
45+ failures. append ( failure)
46+ }
47+ }
48+
3949 print ( " Test Case ' \( method) ' started. " )
4050
4151 setUp ( )
@@ -45,21 +55,19 @@ extension XCTestCase {
4555 tearDown ( )
4656
4757 totalDuration += duration
48- for failure in XCTCurrentFailures {
58+ for failure in failures {
4959 failure. emit ( method)
5060 totalFailures += 1
5161 if !failure. expected {
5262 unexpectedFailures += 1
5363 }
64+
65+ let result = failures. count > 0 ? " failed " : " passed "
66+
67+ print ( " Test Case ' \( method) ' \( result) ( \( printableStringForTimeInterval ( duration) ) seconds). " )
68+ XCTAllRuns . append ( XCTRun ( duration: duration, method: method, passed: failures. count == 0 , failures: failures) )
5469 }
55- var result = " passed "
56- if XCTCurrentFailures . count > 0 {
57- result = " failed "
58- }
59- print ( " Test Case ' \( method) ' \( result) ( \( printableStringForTimeInterval ( duration) ) seconds). " )
60- XCTAllRuns . append ( XCTRun ( duration: duration, method: method, passed: XCTCurrentFailures . count == 0 , failures: XCTCurrentFailures) )
61- XCTCurrentFailures . removeAll ( )
62- XCTCurrentTestCase = nil
70+ XCTFailureHandler = nil
6371 }
6472 }
6573
@@ -75,15 +83,6 @@ extension XCTestCase {
7583 print ( " Executed \( tests. count) test \( testCountSuffix) , with \( totalFailures) failure \( failureSuffix) ( \( unexpectedFailures) unexpected) in \( printableStringForTimeInterval ( totalDuration) ) ( \( printableStringForTimeInterval ( overallDuration) ) ) seconds " )
7684 }
7785
78- // This function is for the use of XCTestCase only, but we must make it public or clients will get a link failure when using XCTest (23476006)
79- public func testFailure( message: String , failureDescription: String , expected: Bool , file: StaticString , line: UInt ) {
80- if !continueAfterFailure {
81- assert ( false , message, file: file, line: line)
82- } else {
83- XCTCurrentFailures . append ( XCTFailure ( message: message, failureDescription: failureDescription, expected: expected, file: file, line: line) )
84- }
85- }
86-
8786 public func setUp( ) {
8887
8988 }
0 commit comments