X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftap%2Ftap.c;h=b3782104fb2b63274f2a97f0f94fac87cb1b9db3;hp=9f6d4d066a4e7068d16bc05659cb47fd680b3f6b;hb=b97c7f0841f5173a07a2571f2c99f944d8405a90;hpb=18db8f6ff7faf1fe5e831427bc6b524de139dcfe diff --git a/ccan/tap/tap.c b/ccan/tap/tap.c index 9f6d4d06..b3782104 100644 --- a/ccan/tap/tap.c +++ b/ccan/tap/tap.c @@ -43,10 +43,16 @@ static const char *todo_msg_fixed = "libtap malloc issue"; static int todo = 0; static int test_died = 0; static int test_pid; +void (*tap_fail_callback)(void) = NULL; /* Encapsulate the pthread code in a conditional. In the absence of - libpthread the code does nothing */ -#if HAVE_LIBPTHREAD + libpthread the code does nothing. + + If you have multiple threads calling ok() etc. at the same time you would + need this, but in that case your test numbers will be random and I'm not + sure it makes sense. --RR +*/ +#ifdef WANT_PTHREAD #include static pthread_mutex_t M = PTHREAD_MUTEX_INITIALIZER; # define LOCK pthread_mutex_lock(&M) @@ -89,7 +95,7 @@ _diag(const char *fmt, ...) * test_comment -- a comment to print afterwards, may be NULL */ unsigned int -_gen_result(int ok, const char *func, const char *file, unsigned int line, +_gen_result(int ok, const char *func, const char *file, unsigned int line, const char *test_name, ...) { va_list ap; @@ -170,7 +176,7 @@ _gen_result(int ok, const char *func, const char *file, unsigned int line, printf("\n"); if(!ok) - _diag(" Failed %stest (%s:%s() at line %d)", + _diag(" Failed %stest (%s:%s() at line %d)", todo ? "(TODO) " : "", file, func, line); free(local_test_name); @@ -231,7 +237,7 @@ _cleanup(void) _diag("Looks like you planned %d tests but only ran %d.", e_tests, test_count); if(failures) { - _diag("Looks like you failed %d tests of %d run.", + _diag("Looks like you failed %d tests of %d run.", failures, test_count); } UNLOCK; @@ -239,7 +245,7 @@ _cleanup(void) } if(failures) - _diag("Looks like you failed %d tests of %d.", + _diag("Looks like you failed %d tests of %d.", failures, test_count); UNLOCK; @@ -259,7 +265,7 @@ _tap_init(void) atexit(_cleanup); /* stdout needs to be unbuffered so that the output appears - in the same place relative to stderr output as it does + in the same place relative to stderr output as it does with Test::Harness */ // setbuf(stdout, 0); run_once = 1; @@ -374,8 +380,8 @@ skip(unsigned int n, const char *fmt, ...) while(n-- > 0) { test_count++; - printf("ok %d # skip %s\n", test_count, - skip_msg != NULL ? + printf("ok %d # skip %s\n", test_count, + skip_msg != NULL ? skip_msg : "libtap():malloc() failed"); } @@ -413,8 +419,8 @@ todo_end(void) UNLOCK; } -int -exit_status(void) +static int +exit_status_(void) { int r; @@ -434,10 +440,19 @@ exit_status(void) return r; } - /* Return the number of tests that failed + the number of tests + /* Return the number of tests that failed + the number of tests that weren't run */ r = failures + e_tests - test_count; UNLOCK; return r; } + +int +exit_status(void) +{ + int r = exit_status_(); + if (r > 255) + r = 255; + return r; +}