diff options
Diffstat (limited to 'dbus/dbus-test-tap.c')
-rw-r--r-- | dbus/dbus-test-tap.c | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/dbus/dbus-test-tap.c b/dbus/dbus-test-tap.c index a6f99b547..710e5eb87 100644 --- a/dbus/dbus-test-tap.c +++ b/dbus/dbus-test-tap.c @@ -40,6 +40,9 @@ #include <stdio.h> #include <stdlib.h> +static unsigned int failures = 0; +static unsigned int tap_test_counter = 0; + /* * Output TAP indicating a fatal error, and exit unsuccessfully. */ @@ -74,4 +77,129 @@ _dbus_test_diag (const char *format, printf ("\n"); } +/* + * Output TAP indicating that all tests have been skipped, and exit + * successfully. + * + * This is only valid if _dbus_test_ok(), _dbus_test_not_ok(), + * etc. have not yet been called. + */ +void +_dbus_test_skip_all (const char *format, + ...) +{ + va_list ap; + + _dbus_assert (tap_test_counter == 0); + + printf ("1..0 # SKIP - "); + va_start (ap, format); + vprintf (format, ap); + va_end (ap); + printf ("\n"); + fflush (stdout); + exit (0); +} + +/* + * Output TAP indicating that a test has passed, and increment the + * test counter. + */ +void +_dbus_test_ok (const char *format, + ...) +{ + va_list ap; + + printf ("ok %u - ", ++tap_test_counter); + va_start (ap, format); + vprintf (format, ap); + va_end (ap); + printf ("\n"); + fflush (stdout); +} + +/* + * Output TAP indicating that a test has failed (in a way that is not + * fatal to the test executable), and increment the test counter. + */ +void +_dbus_test_not_ok (const char *format, + ...) +{ + va_list ap; + + printf ("not ok %u - ", ++tap_test_counter); + va_start (ap, format); + vprintf (format, ap); + va_end (ap); + printf ("\n"); + failures++; + fflush (stdout); +} + +/* + * Output TAP indicating that a test has been skipped (in a way that is + * not fatal to the test executable), and increment the test counter. + */ +void +_dbus_test_skip (const char *format, + ...) +{ + va_list ap; + + printf ("ok %u # SKIP ", ++tap_test_counter); + va_start (ap, format); + vprintf (format, ap); + va_end (ap); + printf ("\n"); + fflush (stdout); +} + +/* + * Shut down libdbus, check that exactly previously_allocated memory + * blocks are allocated, and output TAP indicating a test pass or failure. + * + * Return TRUE if no leaks were detected. + */ +void +_dbus_test_check_memleaks (const char *test_name) +{ + dbus_shutdown (); + + if (_dbus_get_malloc_blocks_outstanding () == 0) + { + printf ("ok %u - %s did not leak memory\n", ++tap_test_counter, + test_name); + } + else + { + printf ("not ok %u - %s leaked %d blocks\n", + ++tap_test_counter, test_name, + _dbus_get_malloc_blocks_outstanding ()); + failures++; + } +} + +/* + * Output TAP indicating that testing has finished and no more tests + * are going to be run. Return the Unix-style exit code. + */ +int +_dbus_test_done_testing (void) +{ + if (failures == 0) + _dbus_test_diag ("%u tests passed", tap_test_counter); + else + _dbus_test_diag ("%u/%u tests failed", failures, tap_test_counter); + + printf ("1..%u\n", tap_test_counter); + fflush (stdout); + + if (failures == 0) + return 0; + + return 1; +} + #endif |