summaryrefslogtreecommitdiff
path: root/dbus/dbus-test-tap.c
diff options
context:
space:
mode:
Diffstat (limited to 'dbus/dbus-test-tap.c')
-rw-r--r--dbus/dbus-test-tap.c128
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