Browse Source

Add `testing.fail_now`

gingerBill 4 years ago
parent
commit
cf0bf1a7cb
2 changed files with 14 additions and 1 deletions
  1. 5 1
      core/testing/runner_windows.odin
  2. 9 0
      core/testing/testing.odin

+ 5 - 1
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;

+ 9 - 0
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;
 }