Skip to content

Commit f7ee425

Browse files
authored
Merge pull request #10905 from briancroom/XCTAssert-continueAfterFailure
Stop swallowing test interruption exceptions thrown during XCTAssert evaluation
2 parents 66d2b18 + f788a30 commit f7ee425

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)