@@ -34,8 +34,18 @@ extension XCTestCase {
34
34
var unexpectedFailures = 0
35
35
let overallDuration = measureTimeExecutingBlock {
36
36
for (name, test) in tests {
37
- XCTCurrentTestCase = self
38
37
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
+
39
49
print ( " Test Case ' \( method) ' started. " )
40
50
41
51
setUp ( )
@@ -45,21 +55,19 @@ extension XCTestCase {
45
55
tearDown ( )
46
56
47
57
totalDuration += duration
48
- for failure in XCTCurrentFailures {
58
+ for failure in failures {
49
59
failure. emit ( method)
50
60
totalFailures += 1
51
61
if !failure. expected {
52
62
unexpectedFailures += 1
53
63
}
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) )
54
69
}
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
63
71
}
64
72
}
65
73
@@ -75,15 +83,6 @@ extension XCTestCase {
75
83
print ( " Executed \( tests. count) test \( testCountSuffix) , with \( totalFailures) failure \( failureSuffix) ( \( unexpectedFailures) unexpected) in \( printableStringForTimeInterval ( totalDuration) ) ( \( printableStringForTimeInterval ( overallDuration) ) ) seconds " )
76
84
}
77
85
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
-
87
86
public func setUp( ) {
88
87
89
88
}
0 commit comments