12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- //+private
- package testing
- import "core:io"
- import "core:os"
- import "core:slice"
- 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);
- slice.sort_by(internal_tests, proc(a, b: Internal_Test) -> bool {
- if a.pkg < b.pkg {
- return true;
- }
- return a.name < b.name;
- });
- prev_pkg := "";
- 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);
- if prev_pkg != it.pkg {
- prev_pkg = it.pkg;
- logf(t, "[Package: %s]", it.pkg);
- }
- logf(t, "[Test: %s]", it.name);
- // TODO(bill): Catch panics
- {
- it.p(t);
- }
- if t.error_count != 0 {
- logf(t, "[%s : FAILURE]", it.name);
- } else {
- logf(t, "[%s : SUCCESS]", it.name);
- total_success_count += 1;
- }
- }
- logf(t, "----------------------------------------");
- if total_test_count == 0 {
- log(t, "NO TESTS RAN");
- } else {
- logf(t, "%d/%d SUCCESSFUL", total_success_count, total_test_count);
- }
- return total_success_count == total_test_count;
- }
|