From 2aa588209e784274136b516224372fdd677d3e8f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 14 Mar 2021 18:01:31 +0000 Subject: `odin test` to work with the new `core:testing` package --- core/testing/testing.odin | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 core/testing/testing.odin (limited to 'core/testing/testing.odin') diff --git a/core/testing/testing.odin b/core/testing/testing.odin new file mode 100644 index 000000000..d9d4a53a3 --- /dev/null +++ b/core/testing/testing.odin @@ -0,0 +1,68 @@ +package testing + +import "core:fmt" +import "core:io" + +Test_Signature :: proc(^T); + +Internal_Test :: struct { + name: string, + p: Test_Signature, +} + + +Internal_Cleanup :: struct { + procedure: proc(rawptr), + user_data: rawptr, +} + +T :: struct { + error_count: int, + + w: io.Writer, + + cleanups: [dynamic]Internal_Cleanup, +} + + +error :: proc(t: ^T, args: ..any, loc := #caller_location) { + log(t=t, args=args, loc=loc); + t.error_count += 1; +} + +errorf :: proc(t: ^T, format: string, args: ..any, loc := #caller_location) { + logf(t=t, format=format, args=args, loc=loc); + t.error_count += 1; +} + +fail :: proc(t: ^T) { + error(t, "FAIL"); + t.error_count += 1; +} + +failed :: proc(t: ^T) -> bool { + return t.error_count != 0; +} + +log :: proc(t: ^T, args: ..any, loc := #caller_location) { + fmt.wprintln(t.w, ..args); +} + +logf :: proc(t: ^T, format: string, args: ..any, loc := #caller_location) { + fmt.wprintf(t.w, format, ..args); + fmt.wprintln(t.w); +} + + +// cleanup registers a procedure and user_data, which will be called when the test, and all its subtests, complete +// cleanup proceduers will be called in LIFO (last added, first called) order. +cleanup :: proc(t: ^T, procedure: proc(rawptr), user_data: rawptr) { + append(&t.cleanups, Internal_Cleanup{procedure, user_data}); +} + +expect :: proc(t: ^T, ok: bool, msg: string = "", loc := #caller_location) -> bool { + if !ok { + error(t=t, args={msg}, loc=loc); + } + return ok; +} -- cgit v1.2.3