Files
Odin/core/testing/runner.odin
T
2021-03-14 18:01:31 +00:00

61 lines
1.1 KiB
Odin

//+private
package testing
import "core:io"
import "core:os"
import "core:strings"
reset_t :: proc(t: ^T) {
clear(&t.cleanups);
t.error_count = 0;
}
end_t :: proc(t: ^T) {
for i := len(t.cleanups)-1; i >= 0; i -= 1 {
c := t.cleanups[i];
c.procedure(c.user_data);
}
}
runner :: proc(internal_tests: []Internal_Test) -> bool {
stream := os.stream_from_handle(os.stdout);
w, _ := io.to_writer(stream);
t := &T{};
t.w = w;
reserve(&t.cleanups, 1024);
defer delete(t.cleanups);
total_success_count := 0;
total_test_count := len(internal_tests);
for it in internal_tests {
if it.p == nil {
total_test_count -= 1;
continue;
}
free_all(context.temp_allocator);
reset_t(t);
defer end_t(t);
name := strings.trim_prefix(it.name, "test_");
logf(t, "[Test: %q]", name);
// TODO(bill): Catch panics
{
it.p(t);
}
if t.error_count != 0 {
logf(t, "[%q : FAILURE]", name);
} else {
logf(t, "[%q : SUCCESS]", name);
total_success_count += 1;
}
}
logf(t, "----------------------------------------");
logf(t, "%d/%d SUCCESSFUL", total_success_count, total_test_count);
return total_success_count == total_test_count;
}