Skip to content

Commit f788a30

Browse files
committed
Stop swallowing test interruption exceptions thrown during XCTAssert evaluation.
Rethrow any test interruption exceptions that get caught, mirroring the behavior of the Objective-C XCTAssert macros. <rdar://problem/33255447>
1 parent c1dc8b3 commit f788a30

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

stdlib/public/SDK/XCTest/XCTestCaseAdditions.mm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ - (NSString *)className
143143
@try {
144144
block();
145145
}
146+
@catch (_XCTestCaseInterruptionException *interruption) { [interruption raise]; }
146147
@catch (NSException *exception) {
147148
result = @{
148149
@"type": @"objc",

validation-test/stdlib/XCTest.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,21 @@ XCTestTestSuite.test("exceptions") {
4343
dynamic func test_raises() {
4444
NSException(name: NSExceptionName(rawValue: "XCTestTestSuiteException"), reason: nil, userInfo: nil).raise()
4545
}
46+
47+
func test_raisesDuringAssertion() {
48+
let exception = NSException(name: NSExceptionName(rawValue: "XCTestTestSuiteException"), reason: nil, userInfo: nil)
49+
XCTAssertNoThrow(exception.raise())
50+
}
51+
52+
func test_continueAfterFailureWithAssertions() {
53+
self.continueAfterFailure = false
54+
func triggerFailure() { XCTFail("I'm outta here!") }
55+
56+
XCTAssertNoThrow(triggerFailure())
57+
58+
// Should not be reached:
59+
NSException(name: NSExceptionName(rawValue: "XCTestTestSuiteException"), reason: nil, userInfo: nil).raise()
60+
}
4661
}
4762

4863
let testCase = ExceptionTestCase(selector: #selector(ExceptionTestCase.test_raises))
@@ -55,6 +70,20 @@ XCTestTestSuite.test("exceptions") {
5570
expectEqual(1, testRun.unexpectedExceptionCount)
5671
expectEqual(1, testRun.totalFailureCount)
5772
expectFalse(testRun.hasSucceeded)
73+
74+
let assertionTestCase = ExceptionTestCase(selector: #selector(ExceptionTestCase.test_raisesDuringAssertion))
75+
execute(assertionTestCase.run)
76+
let assertionTestRun = assertionTestCase.testRun!
77+
expectEqual(1, assertionTestRun.executionCount)
78+
expectEqual(0, assertionTestRun.failureCount)
79+
expectEqual(1, assertionTestRun.unexpectedExceptionCount)
80+
81+
let continueAfterFailureTestCase = ExceptionTestCase(selector: #selector(ExceptionTestCase.test_continueAfterFailureWithAssertions))
82+
execute(continueAfterFailureTestCase.run)
83+
let continueAfterFailureTestRun = continueAfterFailureTestCase.testRun!
84+
expectEqual(1, continueAfterFailureTestRun.executionCount)
85+
expectEqual(1, continueAfterFailureTestRun.failureCount)
86+
expectEqual(0, continueAfterFailureTestRun.unexpectedExceptionCount)
5887
}
5988

6089
XCTestTestSuite.test("XCTAssertEqual/T") {

0 commit comments

Comments
 (0)