From 515c53474a06851acaebaa818c7788e767975918 Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Tue, 20 Nov 2007 15:00:56 +0000 Subject: [PATCH] Added g_test_bug() and related API. * gtester.c: handle G_TEST_LOG_MESSAGE and test test message API. * gtestframework.h, gtestframework.c: added test message API and convenience API to send test messages about bug URLs. svn path=/trunk/; revision=5906 --- glib/glib.symbols | 3 +++ glib/gtester.c | 8 +++++++ glib/gtestframework.c | 63 +++++++++++++++++++++++++++++++++++++++++++-------- glib/gtestframework.h | 6 +++++ 4 files changed, 71 insertions(+), 9 deletions(-) diff --git a/glib/glib.symbols b/glib/glib.symbols index 8579c89..f0f2af2 100644 --- a/glib/glib.symbols +++ b/glib/glib.symbols @@ -1249,6 +1249,8 @@ g_assertion_message_expr g_strcmp0 g_test_add_func g_test_add_vtable +g_test_bug +g_test_bug_base g_test_config_vars g_test_create_case g_test_create_suite @@ -1261,6 +1263,7 @@ g_test_log_buffer_push g_test_log_msg_free g_test_log_type_name g_test_maximized_result +g_test_message g_test_minimized_result g_test_queue_free g_test_rand_double diff --git a/glib/gtester.c b/glib/gtester.c index 947c5c1..77028da 100644 --- a/glib/gtester.c +++ b/glib/gtester.c @@ -166,6 +166,9 @@ test_log_msg (GTestLogMsg *msg) test_log_printfe ("%s%s\n", sindent (log_indent + 2), msg->strings[0]); test_log_printfe ("%s\n", sindent (log_indent)); break; + case G_TEST_LOG_MESSAGE: + test_log_printfe ("%s\n%s\n%s\n", sindent (log_indent), msg->strings[0], sindent (log_indent)); + break; } } @@ -616,6 +619,11 @@ static void fixture_test (guint *fix) { g_assert_cmphex (*fix, ==, 0xdeadbeef); + g_test_message ("This is a test message API test message."); + g_test_bug_base ("http://www.example.com/bugtracker/"); + g_test_bug ("123"); + g_test_bug_base ("http://www.example.com/bugtracker?bugnum=%s;cmd=showbug"); + g_test_bug ("456"); } static void fixture_teardown (guint *fix) diff --git a/glib/gtestframework.c b/glib/gtestframework.c index 38630f3..4c279cc 100644 --- a/glib/gtestframework.c +++ b/glib/gtestframework.c @@ -73,6 +73,7 @@ static int test_trap_last_status = 0; static int test_trap_last_pid = 0; static char *test_trap_last_stdout = NULL; static char *test_trap_last_stderr = NULL; +static char *test_uri_base = NULL; static gboolean test_debug_log = FALSE; const GTestConfig *g_test_config_vars = NULL; static GTestConfig mutable_test_config_vars = { @@ -88,14 +89,18 @@ g_test_log_type_name (GTestLogType log_type) { switch (log_type) { + case G_TEST_LOG_NONE: return "none"; + case G_TEST_LOG_ERROR: return "error"; case G_TEST_LOG_START_BINARY: return "binary"; case G_TEST_LOG_LIST_CASE: return "list"; + case G_TEST_LOG_SKIP_CASE: return "skip"; case G_TEST_LOG_START_CASE: return "start"; case G_TEST_LOG_STOP_CASE: return "stop"; case G_TEST_LOG_MIN_RESULT: return "minperf"; case G_TEST_LOG_MAX_RESULT: return "maxperf"; - default: return "???"; + case G_TEST_LOG_MESSAGE: return "message"; } + return "???"; } static void @@ -164,6 +169,10 @@ g_test_log (GTestLogType lbit, if (g_test_verbose()) g_print ("(MAXPERF:%s)\n", string1); break; + case G_TEST_LOG_MESSAGE: + if (g_test_verbose()) + g_print ("(MSG: %s)\n", string1); + break; default: ; } @@ -479,6 +488,45 @@ g_test_maximized_result (double maximized_quantity, g_free (buffer); } +void +g_test_message (const char *format, + ...) +{ + gchar *buffer; + va_list args; + va_start (args, format); + buffer = g_strdup_vprintf (format, args); + va_end (args); + g_test_log (G_TEST_LOG_MESSAGE, buffer, NULL, 0, NULL); + g_free (buffer); +} + +void +g_test_bug_base (const char *uri_pattern) +{ + g_free (test_uri_base); + test_uri_base = g_strdup (uri_pattern); +} + +void +g_test_bug (const char *bug_uri_snippet) +{ + char *c; + g_return_if_fail (test_uri_base != NULL); + g_return_if_fail (bug_uri_snippet != NULL); + c = strstr (test_uri_base, "%s"); + if (c) + { + char *b = g_strndup (test_uri_base, c - test_uri_base); + char *s = g_strconcat (b, bug_uri_snippet, c + 2, NULL); + g_free (b); + g_test_message ("Bug Reference: %s", s); + g_free (s); + } + else + g_test_message ("Bug Reference: %s%s", test_uri_base, bug_uri_snippet); +} + GTestSuite* g_test_get_root (void) { @@ -606,15 +654,11 @@ g_test_queue_free (gpointer gfree_pointer) static int test_case_run (GTestCase *tc) { - gchar *old_name; - old_name = test_run_name; + gchar *old_name = test_run_name, *old_base = g_strdup (test_uri_base); test_run_name = g_strconcat (old_name, "/", tc->name, NULL); if (++test_run_count <= test_skip_count) - { - g_test_log (G_TEST_LOG_SKIP_CASE, test_run_name, NULL, 0, NULL); - return 0; - } - if (test_run_list) + g_test_log (G_TEST_LOG_SKIP_CASE, test_run_name, NULL, 0, NULL); + else if (test_run_list) { g_print ("%s\n", test_run_name); g_test_log (G_TEST_LOG_LIST_CASE, test_run_name, NULL, 0, NULL); @@ -650,7 +694,8 @@ test_case_run (GTestCase *tc) } g_free (test_run_name); test_run_name = old_name; - /* FIXME: need reporting here */ + g_free (test_uri_base); + test_uri_base = old_base; return 0; } diff --git a/glib/gtestframework.h b/glib/gtestframework.h index a4d4176..0ff3e46 100644 --- a/glib/gtestframework.h +++ b/glib/gtestframework.h @@ -83,6 +83,11 @@ void g_test_add_func (const char *testpath, void (*) (Fixture*))) \ (void*) g_test_add_vtable) \ (testpath, sizeof (Fixture), fsetup, ftest, fteardown) +/* add test messages to the test report */ +void g_test_message (const char *format, + ...) G_GNUC_PRINTF (1, 2); +void g_test_bug_base (const char *uri_pattern); +void g_test_bug (const char *bug_uri_snippet); /* measure test timings */ void g_test_timer_start (void); double g_test_timer_elapsed (void); // elapsed seconds @@ -190,6 +195,7 @@ typedef enum { G_TEST_LOG_STOP_CASE, // d:status d:nforks d:elapsed G_TEST_LOG_MIN_RESULT, // s:blurb d:result G_TEST_LOG_MAX_RESULT, // s:blurb d:result + G_TEST_LOG_MESSAGE, // s:blurb } GTestLogType; typedef struct { -- 2.7.4