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;
}