diff --git a/samples/signal.c b/samples/signal.c index 29cb1c4..c717317 100644 --- a/samples/signal.c +++ b/samples/signal.c @@ -1,14 +1,33 @@ #include #include +void crash(void); + Test(simple, caught, .signal = SIGSEGV) { - raise(SIGSEGV); + crash(); } Test(simple, wrong_signal, .signal = SIGINT) { - raise(SIGSEGV); + crash(); } Test(simple, uncaught) { - raise(SIGSEGV); + crash(); +} + + +// Cross platform segfault simulator ™ +// a.k.a. "I can't believe I have to write this for a sample" + +#ifdef _WIN32 +# include +#endif + +void crash(void) { +#ifdef _WIN32 + // This translates to a SIGSEGV + RaiseException(EXCEPTION_ACCESS_VIOLATION, EXCEPTION_NONCONTINUABLE, 0, NULL); +#else + raise(SIGSEGV); +#endif } diff --git a/samples/signal.cc b/samples/signal.cc index e35998f..42cc76f 100644 --- a/samples/signal.cc +++ b/samples/signal.cc @@ -1,14 +1,32 @@ #include #include +void crash(void); + Test(simple, caught, .signal = SIGSEGV) { - std::raise(SIGSEGV); + crash(); } Test(simple, wrong_signal, .signal = SIGINT) { - std::raise(SIGSEGV); + crash(); } Test(simple, uncaught) { - std::raise(SIGSEGV); + crash(); +} + +// Cross platform segfault simulator ™ +// a.k.a. "I can't believe I have to write this for a sample" + +#ifdef _WIN32 +# include +#endif + +void crash(void) { +#ifdef _WIN32 + // This translates to a SIGSEGV + RaiseException(EXCEPTION_ACCESS_VIOLATION, EXCEPTION_NONCONTINUABLE, 0, NULL); +#else + std::raise(SIGSEGV); +#endif } diff --git a/test/cram/crashes.t b/test/cram/crashes.t index ff8e2fc..52ac05e 100644 --- a/test/cram/crashes.t +++ b/test/cram/crashes.t @@ -1,13 +1,13 @@ Simple crashes & signal testing $ signal.c.bin - [\x1b[0;34m----\x1b[0m] \x1b[0;1msignal.c\x1b[0m:\x1b[0;31m12\x1b[0m: Unexpected signal caught below this line! (esc) + [\x1b[0;34m----\x1b[0m] \x1b[0;1msignal.c\x1b[0m:\x1b[0;31m14\x1b[0m: Unexpected signal caught below this line! (esc) [\x1b[0;31mFAIL\x1b[0m] simple::uncaught: CRASH! (esc) [\x1b[0;31mFAIL\x1b[0m] simple::wrong_signal (esc) [\x1b[0;34m====\x1b[0m] \x1b[0;1mSynthesis: Tested: \x1b[0;34m3\x1b[0;1m | Passing: \x1b[0;32m1\x1b[0;1m | Failing: \x1b[0;31m2\x1b[0;1m | Crashing: \x1b[0;31m1\x1b[0;1m \x1b[0m (esc) $ signal.cc.bin - [\x1b[0;34m----\x1b[0m] \x1b[0;1msignal.cc\x1b[0m:\x1b[0;31m12\x1b[0m: Unexpected signal caught below this line! (esc) + [\x1b[0;34m----\x1b[0m] \x1b[0;1msignal.cc\x1b[0m:\x1b[0;31m14\x1b[0m: Unexpected signal caught below this line! (esc) [\x1b[0;31mFAIL\x1b[0m] simple::uncaught: CRASH! (esc) [\x1b[0;31mFAIL\x1b[0m] simple::wrong_signal (esc) [\x1b[0;34m====\x1b[0m] \x1b[0;1mSynthesis: Tested: \x1b[0;34m3\x1b[0;1m | Passing: \x1b[0;32m1\x1b[0;1m | Failing: \x1b[0;31m2\x1b[0;1m | Crashing: \x1b[0;31m1\x1b[0;1m \x1b[0m (esc) @@ -20,7 +20,7 @@ Simple crashes & signal testing (verbose) [\x1b[0;34mRUN \x1b[0m] simple::caught (esc) [\x1b[0;32mPASS\x1b[0m] simple::caught (esc) [\x1b[0;34mRUN \x1b[0m] simple::uncaught (esc) - [\x1b[0;34m----\x1b[0m] \x1b[0;1msignal.c\x1b[0m:\x1b[0;31m12\x1b[0m: Unexpected signal caught below this line! (esc) + [\x1b[0;34m----\x1b[0m] \x1b[0;1msignal.c\x1b[0m:\x1b[0;31m14\x1b[0m: Unexpected signal caught below this line! (esc) [\x1b[0;31mFAIL\x1b[0m] simple::uncaught: CRASH! (esc) [\x1b[0;34mRUN \x1b[0m] simple::wrong_signal (esc) [\x1b[0;31mFAIL\x1b[0m] simple::wrong_signal (esc) @@ -32,7 +32,7 @@ Simple crashes & signal testing (verbose) [\x1b[0;34mRUN \x1b[0m] simple::caught (esc) [\x1b[0;32mPASS\x1b[0m] simple::caught (esc) [\x1b[0;34mRUN \x1b[0m] simple::uncaught (esc) - [\x1b[0;34m----\x1b[0m] \x1b[0;1msignal.cc\x1b[0m:\x1b[0;31m12\x1b[0m: Unexpected signal caught below this line! (esc) + [\x1b[0;34m----\x1b[0m] \x1b[0;1msignal.cc\x1b[0m:\x1b[0;31m14\x1b[0m: Unexpected signal caught below this line! (esc) [\x1b[0;31mFAIL\x1b[0m] simple::uncaught: CRASH! (esc) [\x1b[0;34mRUN \x1b[0m] simple::wrong_signal (esc) [\x1b[0;31mFAIL\x1b[0m] simple::wrong_signal (esc) diff --git a/test/cram/tap.t b/test/cram/tap.t index 611c52b..827169d 100644 --- a/test/cram/tap.t +++ b/test/cram/tap.t @@ -17,7 +17,7 @@ Testing multiple samples with --tap # Running 3 tests from simple not ok - simple::wrong_signal - not ok - simple::uncaught unexpected signal after signal.c:12 + not ok - simple::uncaught unexpected signal after signal.c:14 ok - simple::caught $ asserts.c.bin --tap