#include "./pke-test-types.h" #include "./pke-test-audio.h" #include "./pke-test-asset-manager.h" #include "./pke-test-dummy.h" #include "./pke-test-serialization.h" #include "./pke-test-static-ui.h" #include "pk.h" #include "unistd.h" #include #define CLR_WHITE "\033[0m" #define CLR_GREEN "\033[92m" #define CLR_RED "\033[31m" // https://stackoverflow.com/questions/64190847/how-to-catch-a-call-to-exit-for-unit-testing struct pke_test_long_jump lj; void exit(int code) { if (lj.expected_exit) { lj.caught = 1; longjmp(lj.jump_env, 1); } _exit(code); } int main(int argc, char *argv[]) { (void)argc; (void)argv; int i = 0; int result; uint32_t k, pass_count; double elapsed_ms; double group_ms; pk_tmr func_tmr; pke_test_get_group *group_fns[] = { pke_test_dummy_get_group, pke_test_static_ui_get_group, pke_test_serialization_get_group, pke_test_asset_manager_get_group, // pke_test_audio_get_group, NULL, }; fprintf(stdout, "\r\n"); pke_test_get_group *fn = group_fns[i]; while (fn != NULL) { pass_count = 0; group_ms = 0; struct pke_test_group *group = (fn)(); fprintf(stdout, "[pke-test]:[%s] Begin.\n", group->title); if (group->group_setup != NULL) (group->group_setup)(); for (k = 0; k < group->n_tests; ++k) { struct pk_membucket *bkt = pk_mem_bucket_create("pke-test-bucket", PK_MEM_DEFAULT_BUCKET_SIZE, PK_MEMBUCKET_FLAG_NONE); pk_mem_bucket_set_client_mem_bucket(bkt); fprintf(stdout, "[pke-test]:[%s]:[%s] Begin.\n", group->title, group->tests[k].title); if (group->test_setup != NULL) (group->test_setup)(); lj.expected_exit = 0; lj.caught = 0; pk_tmr_start(func_tmr); result = (group->tests[k].func)(); pk_tmr_stop(func_tmr); elapsed_ms = pk_tmr_duration_dbl_mili(func_tmr); group_ms += elapsed_ms; if (result == group->tests[k].expected_result){ pass_count += 1; fprintf(stdout, "[pke-test]:[%s]:[%s] %sPassed.%s\n", group->title, group->tests[k].title, CLR_GREEN, CLR_WHITE); fprintf(stdout, "[pke-test]:[%s]:[%s] Elapsed ms: '%f'.\n", group->title, group->tests[k].title, elapsed_ms); } else { fprintf(stdout, "[pke-test]:[%s]:[%s] %sFailed.%s Expected: '%i' Got: '%i'.\n", group->title, group->tests[k].title, CLR_RED, CLR_WHITE, group->tests[k].expected_result, result); } if (group->test_teardown != NULL) (group->test_teardown)(); pk_mem_bucket_destroy(bkt); } if (group->group_teardown != NULL) (group->group_teardown)(); fprintf(stdout, "[pke-test]:[%s] End. ( %s%03d%s / %03d ) Tests Completed.\n", group->title, pass_count == group->n_tests ? CLR_GREEN : CLR_RED, pass_count, CLR_WHITE, group->n_tests); fprintf(stdout, "[pke-test]:[%s] End. Elapsed ms: '%f'.\n\n", group->title, group_ms); i += 1; fn = group_fns[i]; } return 0; }