6.2 Test Execution
/* Run a test case */
static void run_test(d3tui_test_case_t *test) {
if (!test->enabled) {
test->result = D3TUI_TEST_SKIPPED;
return;
}
uint32_t start = timer_ms_gettime64();
// Call setup if defined
if (test->suite->setup) {
test->suite->setup();
}
// Run test
bool passed = true;
const char *failure_msg = NULL;
// Set up failure handler
const char *old_failure_msg = current_test_failure_msg;
current_test_failure_msg = NULL;
current_test = test;
test->func();
if (current_test_failure_msg) {
passed = false;
failure_msg = current_test_failure_msg;
}
// Call teardown if defined
if (test->suite->teardown) {
test->suite->teardown();
}
uint32_t end = timer_ms_gettime64();
test->duration_ms = end - start;
if (passed) {
test->result = D3TUI_TEST_PASSED;
test->failure_msg = NULL;
} else {
test->result = D3TUI_TEST_FAILED;
test->failure_msg = failure_msg ? strdup(failure_msg) : "Unknown failure";
}
// Restore state
current_test_failure_msg = old_failure_msg;
current_test = NULL;
}