// RUN: %target-run-simple-swift 2>&1 | %FileCheck %s // REQUIRES: executable_test // REQUIRES: objc_interop // FIXME: this test is failing for watchos // UNSUPPORTED: OS=watchos import StdlibUnittest import ObjectiveC import Foundation // Don't actually exit with a non-zero status, just say we're going to do it. _setTestSuiteFailedCallback() { print("abort()") } func raiseNSException() { NSException(name: NSExceptionName(rawValue: "Trogdor"), reason: "Burnination", userInfo: nil).raise() } var TestSuiteCrashes = TestSuite("NSExceptionCrashes") TestSuiteCrashes.test("uncaught") { print("uncaught") raiseNSException() } // CHECK-LABEL: stdout>>> uncaught // CHECK: stderr>>> *** [StdlibUnittest] Terminating due to uncaught exception Trogdor: Burnination // CHECK: stderr>>> CRASHED: SIG // CHECK: the test crashed unexpectedly // CHECK: [ FAIL ] NSExceptionCrashes.uncaught TestSuiteCrashes.test("crashesAsExpected") { print("crashesAsExpected") expectCrashLater() raiseNSException() } // CHECK-LABEL: stdout>>> crashesAsExpected // CHECK: stderr>>> *** [StdlibUnittest] Terminating due to uncaught exception Trogdor: Burnination // CHECK: stderr>>> OK: saw expected "crashed: sig // CHECK: [ OK ] NSExceptionCrashes.crashesAsExpected TestSuiteCrashes.test("crashesWithMessage") .crashOutputMatches("libUnittest]") .crashOutputMatches("Trogdor") .crashOutputMatches("Burnination").code { print("crashesWithMessage") expectCrashLater() raiseNSException() } // CHECK-LABEL: stdout>>> crashesWithMessage // CHECK: stderr>>> *** [StdlibUnittest] Terminating due to uncaught exception Trogdor: Burnination // CHECK: stderr>>> OK: saw expected "crashed: sig // CHECK: [ OK ] NSExceptionCrashes.crashesWithMessage TestSuiteCrashes.test("nonNSException") .crashOutputMatches("countryside").code { print("nonNSException") expectCrashLater() objc_exception_throw("countryside") } // CHECK-LABEL: stdout>>> nonNSException // CHECK: stderr>>> *** [StdlibUnittest] Terminating due to uncaught exception: countryside // CHECK: stderr>>> OK: saw expected "crashed: sig // CHECK: [ OK ] NSExceptionCrashes.nonNSException // CHECK: NSExceptionCrashes: Some tests failed, aborting // CHECK: abort() runAllTests()