[glib: 2/3] gtestutils: Add g_test_summary() to add summary metadata to unit tests
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib: 2/3] gtestutils: Add g_test_summary() to add summary metadata to unit tests
- Date: Thu, 23 May 2019 13:47:22 +0000 (UTC)
commit 4da8b7b35acbbc887f74655ee3cd61b0e3d1fb97
Author: Philip Withnall <withnall endlessm com>
Date: Wed May 15 13:33:52 2019 +0100
gtestutils: Add g_test_summary() to add summary metadata to unit tests
This is a new function along the same lines as g_test_bug(): to allow
developers to annotate unit tests with information about the test (what
it tests, how it tests it) for future developers to read and learn from.
It will also output this summary as a comment in the test’s TAP output,
which might clarify test results.
Includes a unit test.
Signed-off-by: Philip Withnall <withnall endlessm com>
Fixes: #1450
docs/reference/glib/glib-sections.txt | 1 +
glib/gtestutils.c | 26 ++++++++++++++++++++++++
glib/gtestutils.h | 2 ++
glib/tests/testing-helper.c | 12 +++++++++++
glib/tests/testing.c | 38 +++++++++++++++++++++++++++++++++++
5 files changed, 79 insertions(+)
---
diff --git a/docs/reference/glib/glib-sections.txt b/docs/reference/glib/glib-sections.txt
index 736b1d856..0f5d88142 100644
--- a/docs/reference/glib/glib-sections.txt
+++ b/docs/reference/glib/glib-sections.txt
@@ -3162,6 +3162,7 @@ g_test_failed
g_test_message
g_test_bug_base
g_test_bug
+g_test_summary
GTestLogFatalFunc
g_test_log_set_fatal_handler
diff --git a/glib/gtestutils.c b/glib/gtestutils.c
index 2ec1398ec..abdaaa607 100644
--- a/glib/gtestutils.c
+++ b/glib/gtestutils.c
@@ -1906,6 +1906,7 @@ g_test_bug_base (const char *uri_pattern)
* and @bug_uri_snippet.
*
* Since: 2.16
+ * See also: g_test_summary()
*/
void
g_test_bug (const char *bug_uri_snippet)
@@ -1928,6 +1929,31 @@ g_test_bug (const char *bug_uri_snippet)
g_test_message ("Bug Reference: %s%s", test_uri_base, bug_uri_snippet);
}
+/**
+ * g_test_summary:
+ * @summary: One or two sentences summarising what the test checks, and how it
+ * checks it.
+ *
+ * Set the summary for a test, which describes what the test checks, and how it
+ * goes about checking it. This may be included in test report output, and is
+ * useful documentation for anyone reading the source code or modifying a test
+ * in future. It must be a single line.
+ *
+ * This should be called at the top of a test function.
+ *
+ * Since: 2.62
+ * See also: g_test_bug()
+ */
+void
+g_test_summary (const char *summary)
+{
+ g_return_if_fail (summary != NULL);
+ g_return_if_fail (strchr (summary, '\n') == NULL);
+ g_return_if_fail (strchr (summary, '\r') == NULL);
+
+ g_test_message ("%s summary: %s", test_run_name, summary);
+}
+
/**
* g_test_get_root:
*
diff --git a/glib/gtestutils.h b/glib/gtestutils.h
index 237b0dd10..7a0715c82 100644
--- a/glib/gtestutils.h
+++ b/glib/gtestutils.h
@@ -321,6 +321,8 @@ GLIB_AVAILABLE_IN_ALL
void g_test_bug_base (const char *uri_pattern);
GLIB_AVAILABLE_IN_ALL
void g_test_bug (const char *bug_uri_snippet);
+GLIB_AVAILABLE_IN_2_62
+void g_test_summary (const char *summary);
/* measure test timings */
GLIB_AVAILABLE_IN_ALL
void g_test_timer_start (void);
diff --git a/glib/tests/testing-helper.c b/glib/tests/testing-helper.c
index bc5c873fa..07820f6e7 100644
--- a/glib/tests/testing-helper.c
+++ b/glib/tests/testing-helper.c
@@ -47,6 +47,14 @@ test_incomplete (void)
g_test_incomplete ("mind reading not implemented yet");
}
+static void
+test_summary (void)
+{
+ g_test_summary ("Tests that g_test_summary() works with TAP, by outputting a "
+ "known summary message in testing-helper, and checking for "
+ "it in the TAP output later.");
+}
+
int
main (int argc,
char *argv[])
@@ -114,6 +122,10 @@ main (int argc,
g_test_add_func ("/c/a", test_pass);
g_test_add_func ("/d/a", test_pass);
}
+ else if (g_strcmp0 (argv1, "summary") == 0)
+ {
+ g_test_add_func ("/summary", test_summary);
+ }
else
{
g_assert_not_reached ();
diff --git a/glib/tests/testing.c b/glib/tests/testing.c
index f2f86cdb8..98fe66fba 100644
--- a/glib/tests/testing.c
+++ b/glib/tests/testing.c
@@ -1209,6 +1209,43 @@ test_tap (void)
g_ptr_array_unref (argv);
}
+static void
+test_tap_summary (void)
+{
+ const char *testing_helper;
+ GPtrArray *argv;
+ GError *error = NULL;
+ int status;
+ gchar *output;
+
+ g_test_summary ("Test the output of g_test_summary() from the TAP output of a test.");
+
+ testing_helper = g_test_get_filename (G_TEST_BUILT, "testing-helper" EXEEXT, NULL);
+
+ argv = g_ptr_array_new ();
+ g_ptr_array_add (argv, (char *) testing_helper);
+ g_ptr_array_add (argv, "summary");
+ g_ptr_array_add (argv, "--tap");
+ g_ptr_array_add (argv, NULL);
+
+ g_spawn_sync (NULL, (char **) argv->pdata, NULL,
+ G_SPAWN_STDERR_TO_DEV_NULL,
+ NULL, NULL, &output, NULL, &status,
+ &error);
+ g_assert_no_error (error);
+
+ g_spawn_check_exit_status (status, &error);
+ g_assert_no_error (error);
+ /* Note: The test path in the output is not `/tap/summary` because it’s the
+ * test path from testing-helper, not from this function. */
+ g_assert_nonnull (strstr (output, "\n# /summary summary: Tests that g_test_summary() "
+ "works with TAP, by outputting a known "
+ "summary message in testing-helper, and "
+ "checking for it in the TAP output later.\n"));
+ g_free (output);
+ g_ptr_array_unref (argv);
+}
+
int
main (int argc,
char *argv[])
@@ -1288,6 +1325,7 @@ main (int argc,
g_test_add_func ("/misc/timeout", test_subprocess_timed_out);
g_test_add_func ("/tap", test_tap);
+ g_test_add_func ("/tap/summary", test_tap_summary);
return g_test_run();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]