From 7ab31406175445e2cdbaa052f892f98e1590c30b Mon Sep 17 00:00:00 2001 From: Daniel Holden Date: Sun, 22 Feb 2015 17:22:34 +0000 Subject: [PATCH] Updated to newer version of ptest --- tests/ptest.c | 186 ++++++++++++++++++++++++++++++-------------------- tests/ptest.h | 3 +- 2 files changed, 114 insertions(+), 75 deletions(-) diff --git a/tests/ptest.c b/tests/ptest.c index aa8be74..de2d534 100644 --- a/tests/ptest.c +++ b/tests/ptest.c @@ -26,32 +26,47 @@ static int suite_passing = 0; /* Colors */ enum { - BLACK = 0x0, - BLUE = 0x1, - GREEN = 0x2, - AQUA = 0x3, - RED = 0x4, - PURPLE = 0x5, - YELLOW = 0x6, - WHITE = 0x7, - GRAY = 0x8, - LIGHT_BLUE = 0x9, - LIGHT_GREEN = 0xA, - LIGHT_AQUA = 0xB, - LIGHT_RED = 0xC, - LIGHT_PURPLE = 0xD, - LIGHT_YELLOW = 0xE, - LIGHT_WHITE = 0xF + BLACK = 0, + BLUE = 1, + GREEN = 2, + AQUA = 3, + RED = 4, + PURPLE = 5, + YELLOW = 6, + WHITE = 7, + GRAY = 8, + + LIGHT_BLUE = 9, + LIGHT_GREEN = 10, + LIGHT_AQUA = 11, + LIGHT_RED = 12, + LIGHT_PURPLE = 13, + LIGHT_YELLOW = 14, + LIGHT_WHITE = 15, + + DEFAULT = 16, }; #ifdef _WIN32 - #include +#include - static void pt_color(int color) { - HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); - SetConsoleTextAttribute(hCon, color); +static WORD defaults; +static int defaults_loaded = 0; + +static void pt_color(int color) { + + HANDLE cnsl = GetStdHandle(STD_OUTPUT_HANDLE); + + if (!defaults_loaded) { + CONSOLE_SCREEN_BUFFER_INFO info; + GetConsoleScreenBufferInfo(cnsl, &info); + defaults = info.wAttributes; + defaults_loaded = 1; } + + SetConsoleTextAttribute(cnsl, color == DEFAULT ? defaults : color); +} #else @@ -71,14 +86,13 @@ static const char* colors[] = { "\x1B[31m", "\x1B[35m", "\x1B[33m", - "\x1B[37m" + "\x1B[37m", + "\x1B[39m", }; - static void pt_color(int color) { - - printf("%s", colors[color]); - - } +static void pt_color(int color) { + printf("%s", colors[color]); +} #endif @@ -92,16 +106,18 @@ static char assert_err[MAX_ERROR]; static char assert_err_buff[MAX_ERROR]; static int assert_err_num = 0; -void pt_assert_run(int result, const char* expr, const char* func, const char* file, int line) { +void pt_assert_run( + int result, const char* expr, const char* func, const char* file, int line) { - (void) func; num_asserts++; test_passing = test_passing && result; if (result) { num_assert_passes++; } else { - sprintf(assert_err_buff, " %i. Assert [ %s ] (%s:%i)\n", assert_err_num+1, expr, file, line ); + sprintf(assert_err_buff, + " %i. Assert [ %s ] (%s:%i)\n", + assert_err_num+1, expr, file, line ); strcat(assert_err, assert_err_buff); assert_err_num++; num_assert_fails++; @@ -110,22 +126,29 @@ void pt_assert_run(int result, const char* expr, const char* func, const char* f } static void ptest_signal(int sig) { - + test_passing = 0; switch( sig ) { - case SIGFPE: sprintf(assert_err_buff, " %i. Division by Zero\n", assert_err_num+1); break; - case SIGILL: sprintf(assert_err_buff, " %i. Illegal Instruction\n", assert_err_num+1); break; - case SIGSEGV: sprintf(assert_err_buff, " %i. Segmentation Fault\n", assert_err_num+1); break; - default: break; + case SIGFPE: sprintf(assert_err_buff, + " %i. Division by Zero\n", assert_err_num+1); + break; + case SIGILL: sprintf(assert_err_buff, + " %i. Illegal Instruction\n", assert_err_num+1); + break; + case SIGSEGV: sprintf(assert_err_buff, + " %i. Segmentation Fault\n", assert_err_num+1); + break; } assert_err_num++; strcat(assert_err, assert_err_buff); - pt_color(WHITE); pt_color(RED); printf("Failed! \n\n%s\n", assert_err); pt_color(WHITE); + pt_color(RED); + printf("Failed! \n\n%s\n", assert_err); + pt_color(DEFAULT); - printf(" | Stopping Execution.\n"); + puts(" | Stopping Execution."); fflush(stdout); exit(0); @@ -134,14 +157,14 @@ static void ptest_signal(int sig) { /* Tests */ static void pt_title_case(char* output, const char* input) { - + int space = 1; - size_t i; + unsigned int i; strcpy(output, input); for(i = 0; i < strlen(output); i++) { - + if (output[i] == '_' || output[i] == ' ') { space = 1; output[i] = ' '; @@ -173,19 +196,22 @@ static int num_tests_passes = 0; static int num_tests_fails = 0; void pt_add_test(void (*func)(void), const char* name, const char* suite) { - + test_t test; if (num_tests == MAX_TESTS) { - printf("ERROR: Exceeded maximum test count of %i!\n", MAX_TESTS); abort(); + printf("ERROR: Exceeded maximum test count of %i!\n", + MAX_TESTS); abort(); } if (strlen(name) >= MAX_NAME) { - printf("ERROR: Test name '%s' too long (Maximum is %i characters)\n", name, MAX_NAME); abort(); + printf("ERROR: Test name '%s' too long (Maximum is %i characters)\n", + name, MAX_NAME); abort(); } if (strlen(suite) >= MAX_NAME) { - printf("ERROR: Test suite '%s' too long (Maximum is %i characters)\n", suite, MAX_NAME); abort(); + printf("ERROR: Test suite '%s' too long (Maximum is %i characters)\n", + suite, MAX_NAME); abort(); } test.func = func; @@ -194,7 +220,6 @@ void pt_add_test(void (*func)(void), const char* name, const char* suite) { tests[num_tests] = test; num_tests++; - } /* Suites */ @@ -215,17 +240,18 @@ static char current_suite[MAX_NAME]; int pt_run(void) { - int i; + unsigned int i; double total; + test_t test; - printf(" \n"); - printf(" +-------------------------------------------+\n"); - printf(" | ptest MicroTesting Magic for C |\n"); - printf(" | |\n"); - printf(" | http://github.com/orangeduck/ptest |\n"); - printf(" | |\n"); - printf(" | Daniel Holden (contact@theorangeduck.com) |\n"); - printf(" +-------------------------------------------+\n"); + puts(""); + puts(" +-------------------------------------------+"); + puts(" | ptest MicroTesting Magic for C |"); + puts(" | |"); + puts(" | http://github.com/orangeduck/ptest |"); + puts(" | |"); + puts(" | Daniel Holden (contact@theorangeduck.com) |"); + puts(" +-------------------------------------------+"); signal(SIGFPE, ptest_signal); signal(SIGILL, ptest_signal); @@ -235,12 +261,12 @@ int pt_run(void) { strcpy(current_suite, ""); for(i = 0; i < num_tests; i++) { - - test_t test = tests[i]; + + test = tests[i]; /* Check for transition to a new suite */ if (strcmp(test.suite, current_suite)) { - + /* Don't increment any counter for first entrance */ if (strcmp(current_suite, "")) { if (suite_passing) { @@ -262,6 +288,7 @@ int pt_run(void) { strcpy(assert_err_buff, ""); assert_err_num = 0; printf(" | %s ... ", test.name); + fflush(stdout); test.func(); @@ -269,10 +296,14 @@ int pt_run(void) { if (test_passing) { num_tests_passes++; - pt_color(GREEN); printf("Passed! \n"); pt_color(WHITE); + pt_color(GREEN); + puts("Passed!"); + pt_color(DEFAULT); } else { num_tests_fails++; - pt_color(RED); printf("Failed! \n\n%s\n", assert_err); pt_color(WHITE); + pt_color(RED); + printf("Failed! \n\n%s\n", assert_err); + pt_color(DEFAULT); } } @@ -285,28 +316,37 @@ int pt_run(void) { end = clock(); - printf(" \n"); - printf(" +---------------------------------------------------+\n"); - printf(" | Summary |\n"); - printf(" +---------++------------+-------------+-------------+\n"); + puts(""); + puts(" +---------------------------------------------------+"); + puts(" | Summary |"); + puts(" +---------++------------+-------------+-------------+"); printf(" | Suites ||"); - pt_color(YELLOW); printf(" Total %4d ", num_suites); pt_color(WHITE); printf("|"); - pt_color(GREEN); printf(" Passed %4d ", num_suites_passes); pt_color(WHITE); printf("|"); - pt_color(RED); printf(" Failed %4d ", num_suites_fails); pt_color(WHITE); printf("|\n"); + pt_color(YELLOW); printf(" Total %4d ", num_suites); + pt_color(DEFAULT); putchar('|'); + pt_color(GREEN); printf(" Passed %4d ", num_suites_passes); + pt_color(DEFAULT); putchar('|'); + pt_color(RED); printf(" Failed %4d ", num_suites_fails); + pt_color(DEFAULT); puts("|"); printf(" | Tests ||"); - pt_color(YELLOW); printf(" Total %4d ", num_tests); pt_color(WHITE); printf("|"); - pt_color(GREEN); printf(" Passed %4d ", num_tests_passes); pt_color(WHITE); printf("|"); - pt_color(RED); printf(" Failed %4d ", num_tests_fails); pt_color(WHITE); printf("|\n"); + pt_color(YELLOW); printf(" Total %4d ", num_tests); + pt_color(DEFAULT); putchar('|'); + pt_color(GREEN); printf(" Passed %4d ", num_tests_passes); + pt_color(DEFAULT); putchar('|'); + pt_color(RED); printf(" Failed %4d ", num_tests_fails); + pt_color(DEFAULT); puts("|"); printf(" | Asserts ||"); - pt_color(YELLOW); printf(" Total %4d ", num_asserts); pt_color(WHITE); printf("|"); - pt_color(GREEN); printf(" Passed %4d ", num_assert_passes); pt_color(WHITE); printf("|"); - pt_color(RED); printf(" Failed %4d ", num_assert_fails); pt_color(WHITE); printf("|\n"); + pt_color(YELLOW); printf(" Total %4d ", num_asserts); + pt_color(DEFAULT); putchar('|'); + pt_color(GREEN); printf(" Passed %4d ", num_assert_passes); + pt_color(DEFAULT); putchar('|'); + pt_color(RED); printf(" Failed %4d ", num_assert_fails); + pt_color(DEFAULT); puts("|"); - printf(" +---------++------------+-------------+-------------+\n"); - printf(" \n"); + puts(" +---------++------------+-------------+-------------+"); + puts(""); total = (double)(end - start) / CLOCKS_PER_SEC; diff --git a/tests/ptest.h b/tests/ptest.h index 4de173f..8c436cd 100644 --- a/tests/ptest.h +++ b/tests/ptest.h @@ -18,5 +18,4 @@ void pt_add_test(void (*func)(void), const char* name, const char* suite); void pt_add_suite(void (*func)(void)); int pt_run(void); -#endif - +#endif \ No newline at end of file