diff --git a/core/testing/runner_windows.odin b/core/testing/runner_windows.odin index 4ab24f39c..4b600218a 100644 --- a/core/testing/runner_windows.odin +++ b/core/testing/runner_windows.odin @@ -156,7 +156,7 @@ run_internal_test :: proc(t: ^T, it: Internal_Test) { context.assertion_failure_proc = proc(prefix, message: string, loc: runtime.Source_Code_Location) { errorf(t=global_current_t, format="%s %s", args={prefix, message}, loc=loc); - intrinsics.debug_trap(); + intrinsics.trap(); }; thread.it.p(thread.t); @@ -168,6 +168,10 @@ run_internal_test :: proc(t: ^T, it: Internal_Test) { sema_reset(&global_threaded_runner_semaphore); global_current_t = t; + t._fail_now = proc() -> ! { + intrinsics.trap(); + }; + thread.t = t; thread.it = it; thread.success = false; diff --git a/core/testing/testing.odin b/core/testing/testing.odin index 8a32ce7c8..ec47ca4d4 100644 --- a/core/testing/testing.odin +++ b/core/testing/testing.odin @@ -25,6 +25,8 @@ T :: struct { w: io.Writer, cleanups: [dynamic]Internal_Cleanup, + + _fail_now: proc() -> !, } @@ -46,6 +48,13 @@ fail :: proc(t: ^T) { t.error_count += 1; } +fail_now :: proc(t: ^T) { + fail(t); + if t._fail_now != nil { + t._fail_now(); + } +} + failed :: proc(t: ^T) -> bool { return t.error_count != 0; }