diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2020-04-14 13:11:49 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2020-04-14 13:13:51 +0100 |
commit | 3fc1a9bff1892f92d96bcf1fb86c157885673396 (patch) | |
tree | 209a6db48983052ef79396e09041f13c9f6f7a85 | |
parent | 2a773323f1f7b5510ee0de7a1ea0ac8bec0e05d4 (diff) | |
download | pango-3fc1a9bff1892f92d96bcf1fb86c157885673396.tar.gz |
tests: Use the appropriate GTest API
Do not use homegrown assertion and failure macros, when GTest has
perfectly functional API to deal with all the cases Pango covers.
Using GTest also allows us to rely on appropriate formatting for
results and logging.
-rw-r--r-- | tests/markup-parse.c | 10 | ||||
-rw-r--r-- | tests/test-break.c | 21 | ||||
-rw-r--r-- | tests/test-font.c | 34 | ||||
-rw-r--r-- | tests/test-itemize.c | 20 | ||||
-rw-r--r-- | tests/test-layout.c | 13 | ||||
-rw-r--r-- | tests/test-shape.c | 3 | ||||
-rw-r--r-- | tests/testboundaries.c | 111 | ||||
-rw-r--r-- | tests/testboundaries_ucd.c | 80 | ||||
-rw-r--r-- | tests/testscript.c | 40 |
9 files changed, 123 insertions, 209 deletions
diff --git a/tests/markup-parse.c b/tests/markup-parse.c index dff0ccc4..5f1454a1 100644 --- a/tests/markup-parse.c +++ b/tests/markup-parse.c @@ -48,12 +48,8 @@ test_file (const gchar *filename, GString *string) char *str; int start, end; - if (!g_file_get_contents (filename, &contents, &length, &error)) - { - fprintf (stderr, "%s\n", error->message); - g_error_free (error); - return; - } + g_file_get_contents (filename, &contents, &length, &error); + g_assert_no_error (error); ret = pango_parse_markup (contents, length, 0, &attrs, &text, NULL, &error); g_free (contents); @@ -152,7 +148,7 @@ main (int argc, char *argv[]) string = g_string_sized_new (0); test_file (argv[1], string); - g_print ("%s", string->str); + g_test_message ("%s", string->str); return 0; } diff --git a/tests/test-break.c b/tests/test-break.c index 8549b678..f4faaab3 100644 --- a/tests/test-break.c +++ b/tests/test-break.c @@ -51,12 +51,8 @@ test_file (const gchar *filename, GString *string) PangoAttrList *attributes; PangoLayout *layout; - if (!g_file_get_contents (filename, &contents, &length, &error)) - { - fprintf (stderr, "%s\n", error->message); - g_error_free (error); - return; - } + g_file_get_contents (filename, &contents, &length, &error); + g_assert_no_error (error); test = contents; @@ -68,12 +64,8 @@ test_file (const gchar *filename, GString *string) len = g_utf8_strlen (test, -1) + 1; attrs = g_new (PangoLogAttr, len); - if (!pango_parse_markup (test, -1, 0, &attributes, &text, NULL, &error)) - { - fprintf (stderr, "%s\n", error->message); - g_error_free (error); - return; - } + pango_parse_markup (test, -1, 0, &attributes, &text, NULL, &error); + g_assert_no_error (error); layout = pango_layout_new (context); pango_layout_set_text (layout, text, length); @@ -260,7 +252,8 @@ test_break (gconstpointer d) if (diff && diff[0]) { - g_printerr ("Contents don't match expected contents:\n%s", diff); + g_test_message ("Contents don't match expected contents"); + g_test_message ("%s", diff); g_test_fail (); g_free (diff); } @@ -291,7 +284,7 @@ main (int argc, char *argv[]) string = g_string_sized_new (0); test_file (argv[1], string); - printf ("%s", string->str); + g_test_message ("%s", string->str); return 0; } diff --git a/tests/test-font.c b/tests/test-font.c index 5ef6cc39..486504f9 100644 --- a/tests/test-font.c +++ b/tests/test-font.c @@ -133,25 +133,21 @@ test_metrics (void) metrics = pango_context_get_metrics (context, desc, pango_language_get_default ()); - g_test_message ("%s metrics\n" - "\tascent %d\n" - "\tdescent %d\n" - "\theight %d\n" - "\tchar width %d\n" - "\tdigit width %d\n" - "\tunderline position %d\n" - "\tunderline thickness %d\n" - "\tstrikethrough position %d\n" - "\tstrikethrough thickness %d\n", - str, - pango_font_metrics_get_ascent (metrics), - pango_font_metrics_get_descent (metrics), - pango_font_metrics_get_height (metrics), - pango_font_metrics_get_approximate_char_width (metrics), - pango_font_metrics_get_approximate_digit_width (metrics), - pango_font_metrics_get_underline_position (metrics), - pango_font_metrics_get_underline_thickness (metrics), - pango_font_metrics_get_strikethrough_position (metrics), + g_test_message ("%s metrics", str); + g_test_message ("\tascent: %d", pango_font_metrics_get_ascent (metrics)); + g_test_message ("\tdescent: %d", pango_font_metrics_get_descent (metrics)); + g_test_message ("\theight: %d", pango_font_metrics_get_height (metrics)); + g_test_message ("\tchar width: %d", + pango_font_metrics_get_approximate_char_width (metrics)); + g_test_message ("\tdigit width: %d", + pango_font_metrics_get_approximate_digit_width (metrics)); + g_test_message ("\tunderline position: %d", + pango_font_metrics_get_underline_position (metrics)); + g_test_message ("\tunderline thickness: %d", + pango_font_metrics_get_underline_thickness (metrics)); + g_test_message ("\tstrikethrough position: %d", + pango_font_metrics_get_strikethrough_position (metrics)); + g_test_message ("\tstrikethrough thickness: %d", pango_font_metrics_get_strikethrough_thickness (metrics)); pango_font_metrics_unref (metrics); diff --git a/tests/test-itemize.c b/tests/test-itemize.c index d66c40d1..167e4e80 100644 --- a/tests/test-itemize.c +++ b/tests/test-itemize.c @@ -118,12 +118,8 @@ test_file (const gchar *filename, GString *string) GList *items, *l; const char *sep = ""; - if (!g_file_get_contents (filename, &contents, &length, &error)) - { - fprintf (stderr, "%s\n", error->message); - g_error_free (error); - return; - } + g_file_get_contents (filename, &contents, &length, &error); + g_assert_no_error (error); test = contents; @@ -131,13 +127,8 @@ test_file (const gchar *filename, GString *string) while (test[0] == '#') test = strchr (test, '\n') + 1; - - if (!pango_parse_markup (test, -1, 0, &attrs, &text, NULL, &error)) - { - fprintf (stderr, "%s\n", error->message); - g_error_free (error); - return; - } + pango_parse_markup (test, -1, 0, &attrs, &text, NULL, &error); + g_assert_no_error (error); s1 = g_string_new ("Items: "); s2 = g_string_new ("Font: "); @@ -257,7 +248,8 @@ test_itemize (gconstpointer d) if (diff && diff[0]) { - g_printerr ("Contents don't match expected contents:\n%s", diff); + g_test_message ("Contents don't match expected contents"); + g_test_message ("%s", diff); g_test_fail (); g_free (diff); } diff --git a/tests/test-layout.c b/tests/test-layout.c index cbbffd2c..2fc78240 100644 --- a/tests/test-layout.c +++ b/tests/test-layout.c @@ -238,12 +238,8 @@ test_file (const gchar *filename, GString *string) PangoWrapMode wrap = PANGO_WRAP_WORD; PangoFontDescription *desc; - if (!g_file_get_contents (filename, &contents, &length, &error)) - { - fprintf (stderr, "%s\n", error->message); - g_error_free (error); - return; - } + g_file_get_contents (filename, &contents, &length, &error); + g_assert_no_error (error); p = strchr (contents, '\n'); g_assert (p); @@ -319,7 +315,8 @@ test_layout (gconstpointer d) if (diff && diff[0]) { - g_printerr ("Contents don't match expected contents:\n%s", diff); + g_test_message ("Contents don't match expected contents"); + g_test_message ("%s", diff); g_test_fail (); g_free (diff); } @@ -350,7 +347,7 @@ main (int argc, char *argv[]) string = g_string_sized_new (0); test_file (argv[1], string); - g_print ("%s", string->str); + g_test_message ("%s", string->str); return 0; } diff --git a/tests/test-shape.c b/tests/test-shape.c index 6c1ae296..c2488dbf 100644 --- a/tests/test-shape.c +++ b/tests/test-shape.c @@ -319,7 +319,8 @@ test_shape (gconstpointer d) if (diff && diff[0]) { - g_printerr ("Contents don't match expected contents:\n%s", diff); + g_test_message ("Contents don't match expected contents"); + g_test_message ("%s", diff); g_test_fail (); g_free (diff); } diff --git a/tests/testboundaries.c b/tests/testboundaries.c index 75da772e..2390bb28 100644 --- a/tests/testboundaries.c +++ b/tests/testboundaries.c @@ -46,27 +46,6 @@ static gunichar current_wc = 0; static const char *line_start = NULL; static const char *line_end = NULL; -static void fail (const char *format, ...) G_GNUC_PRINTF (1, 2) G_GNUC_NORETURN; -static void fail (const char *format, ...) -{ - char *str; - char *line_text; - - va_list args; - - va_start (args, format); - str = g_strdup_vprintf (format, args); - va_end (args); - - line_text = g_strndup (line_start, line_end - line_start); - - fprintf (stderr, "line %d offset %d char is " CHFORMAT ": %s\n (line is '%s')\n", line, offset, current_wc, str, line_text); - g_free (str); - g_free (line_text); - - exit (1); -} - typedef void (* CharForeachFunc) (gunichar wc, gunichar prev_wc, gunichar next_wc, @@ -175,28 +154,36 @@ check_line_char (gunichar wc, { if (prev_wc == '\r') { - if (attr->is_line_break) - fail ("line break between \\r and \\n"); + g_test_message ("Do not line break between \\r and \\n"); + g_assert_false (attr->is_line_break); } - if (next_attr && !next_attr->is_line_break) - fail ("no line break after \\n"); + if (next_attr != NULL) + { + g_test_message ("Line break after \\n"); + g_assert_true (next_attr->is_line_break); + } } - if (attr->is_line_break && prev_wc == 0) - fail ("first char in string should not be marked as a line break"); + if (attr->is_line_break) + { + g_test_message ("first char in string should not be marked as a line break"); + g_assert_false (prev_wc == 0); + } if (break_type == G_UNICODE_BREAK_SPACE) { - if (attr->is_line_break && prev_attr != NULL && - !attr->is_mandatory_break && - !(next_wc && g_unichar_break_type (next_wc) == G_UNICODE_BREAK_COMBINING_MARK)) - fail ("can't break lines before a space unless a mandatory break char precedes it or a combining mark follows; prev char was " CHFORMAT, prev_wc); + g_test_message ("can't break lines before a space unless a mandatory break char precedes it or a combining mark follows; prev char was: " CHFORMAT, prev_wc); + g_assert_false (attr->is_line_break && prev_attr != NULL && + !attr->is_mandatory_break && + !(next_wc && g_unichar_break_type (next_wc) == G_UNICODE_BREAK_COMBINING_MARK)); } - if (attr->is_mandatory_break && !attr->is_line_break) - fail ("mandatory breaks must also be marked as regular breaks"); - + if (attr->is_mandatory_break) + { + g_test_message ("mandatory breaks must also be marked as regular breaks"); + g_assert_true (attr->is_line_break); + } /* FIXME use the break tables from break.c to automatically @@ -204,23 +191,23 @@ check_line_char (gunichar wc, * be that hard to do. */ - if (break_type == G_UNICODE_BREAK_OPEN_PUNCTUATION && - prev_break_type == G_UNICODE_BREAK_OPEN_PUNCTUATION && - attr->is_line_break && - !attr->is_mandatory_break) - fail ("can't break between two open punctuation chars"); - - if (break_type == G_UNICODE_BREAK_CLOSE_PUNCTUATION && - prev_break_type == G_UNICODE_BREAK_CLOSE_PUNCTUATION && - attr->is_line_break && - !attr->is_mandatory_break) - fail ("can't break between two close punctuation chars"); - - if (break_type == G_UNICODE_BREAK_QUOTATION && - prev_break_type == G_UNICODE_BREAK_ALPHABETIC && - attr->is_line_break && - !attr->is_mandatory_break) - fail ("can't break letter-quotemark sequence"); + g_test_message ("can't break between two open punctuation chars"); + g_assert_false (break_type == G_UNICODE_BREAK_OPEN_PUNCTUATION && + prev_break_type == G_UNICODE_BREAK_OPEN_PUNCTUATION && + attr->is_line_break && + !attr->is_mandatory_break); + + g_test_message ("can't break between two close punctuation chars"); + g_assert_false (break_type == G_UNICODE_BREAK_CLOSE_PUNCTUATION && + prev_break_type == G_UNICODE_BREAK_CLOSE_PUNCTUATION && + attr->is_line_break && + !attr->is_mandatory_break); + + g_test_message ("can't break letter-quotemark sequence"); + g_assert_false (break_type == G_UNICODE_BREAK_QUOTATION && + prev_break_type == G_UNICODE_BREAK_ALPHABETIC && + attr->is_line_break && + !attr->is_mandatory_break); } static void @@ -290,8 +277,7 @@ check_invariants (const char *text) int len; PangoLogAttr *attrs; - if (!g_utf8_validate (text, -1, NULL)) - fail ("Invalid UTF-8 in test text"); + g_assert_true (g_utf8_validate (text, -1, NULL)); len = g_utf8_strlen (text, -1); attrs = g_new0 (PangoLogAttr, len + 1); @@ -318,24 +304,20 @@ check_invariants (const char *text) static void test_boundaries (void) { - gchar *text; - const gchar *filename; -#if GLIB_CHECK_VERSION(2, 37, 2) + const char *filename; + GError *error = NULL; + char *text; + filename = g_test_get_filename (G_TEST_DIST, "boundaries.utf8", NULL); -#else - filename = SRCDIR "/boundaries.utf8"; -#endif - g_print ("sample file: %s\n", filename); + g_test_message ("sample file: %s\n", filename); - if (!g_file_get_contents (filename, &text, NULL, NULL)) - fail ("Couldn't open sample text file"); + g_file_get_contents (filename, &text, NULL, &error); + g_assert_no_error (error); check_invariants (text); g_free (text); - - printf ("testboundaries passed\n"); } int @@ -347,4 +329,3 @@ main (int argc, char *argv[]) return g_test_run (); } - diff --git a/tests/testboundaries_ucd.c b/tests/testboundaries_ucd.c index 53f7b4cb..ee5617bc 100644 --- a/tests/testboundaries_ucd.c +++ b/tests/testboundaries_ucd.c @@ -230,32 +230,28 @@ do_test (const gchar *filename, error = NULL; channel = g_io_channel_new_file (filename, "r", &error); - if (!channel) + if (g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) { - if (error->domain == G_FILE_ERROR && error->code == G_FILE_ERROR_NOENT) - { - g_print ("%s not found. Skipping test.\n", filename); - goto done; - } - else - { - g_printerr ("%s: %s\n", filename, error->message); - exit (1); - } + g_test_skip ("Test file not found"); + return; } - g_print ("Testing %s.\n", filename); + + g_assert_no_error (error); + + g_test_message ("Filename: %s", filename); i = 1; for (;;) { error = NULL; status = g_io_channel_read_line (channel, &line, &length, &terminator_pos, &error); + g_assert_no_error (error); switch (status) { case G_IO_STATUS_ERROR: - g_printerr ("%s: %s\n", filename, error->message); - exit (1); + failed = TRUE; + goto done; case G_IO_STATUS_EOF: goto done; @@ -268,11 +264,8 @@ do_test (const gchar *filename, break; } - if (! parse_line (line, bits, &string, &expected_attrs, &num_attrs)) - { - g_printerr ("%s: error parsing line %d: %s\n", filename, i, line); - exit (1); - } + g_test_message ("Parsing line: %s", line); + g_assert_true (parse_line (line, bits, &string, &expected_attrs, &num_attrs)); if (num_attrs > 0) { @@ -293,11 +286,10 @@ do_test (const gchar *filename, comments = ""; } - g_printerr ("%s: line %d failed\n" - " expected: %s\n" - " returned: %s\n" - " comments: %s\n\n", - filename, i, line, str, comments); + g_test_message ("%s: line %d failed", filename, i); + g_test_message (" expected: %s", line); + g_test_message (" returned: %s", str); + g_test_message (" comments: %s", comments); g_free (str); failed = TRUE; @@ -316,20 +308,16 @@ done: if (error) g_error_free (error); - g_assert (!failed); + g_assert_true (!failed); } static void test_grapheme_break (void) { - const gchar *filename; + const char *filename; AttrBits bits; -#if GLIB_CHECK_VERSION(2, 37, 2) filename = g_test_get_filename (G_TEST_DIST, "GraphemeBreakTest.txt", NULL); -#else - filename = SRCDIR "/GraphemeBreakTest.txt"; -#endif bits.bits = 0; bits.attr.is_cursor_position = 1; do_test (filename, bits); @@ -338,14 +326,10 @@ test_grapheme_break (void) static void test_emoji_break (void) { - const gchar *filename; + const char *filename; AttrBits bits; -#if GLIB_CHECK_VERSION(2, 37, 2) filename = g_test_get_filename (G_TEST_DIST, "EmojiBreakTest.txt", NULL); -#else - filename = SRCDIR "/EmojiBreakTest.txt"; -#endif bits.bits = 0; bits.attr.is_cursor_position = 1; do_test (filename, bits); @@ -354,14 +338,10 @@ test_emoji_break (void) static void test_char_break (void) { - const gchar *filename; + const char *filename; AttrBits bits; -#if GLIB_CHECK_VERSION(2, 37, 2) filename = g_test_get_filename (G_TEST_DIST, "CharBreakTest.txt", NULL); -#else - filename = SRCDIR "/CharBreakTest.txt"; -#endif bits.bits = 0; bits.attr.is_char_break = 1; do_test (filename, bits); @@ -370,14 +350,10 @@ test_char_break (void) static void test_word_break (void) { - const gchar *filename; + const char *filename; AttrBits bits; -#if GLIB_CHECK_VERSION(2, 37, 2) filename = g_test_get_filename (G_TEST_DIST, "WordBreakTest.txt", NULL); -#else - filename = SRCDIR "/WordBreakTest.txt"; -#endif bits.bits = 0; bits.attr.is_word_boundary = 1; do_test (filename, bits); @@ -386,14 +362,10 @@ test_word_break (void) static void test_sentence_break (void) { - const gchar *filename; + const char *filename; AttrBits bits; -#if GLIB_CHECK_VERSION(2, 37, 2) filename = g_test_get_filename (G_TEST_DIST, "SentenceBreakTest.txt", NULL); -#else - filename = SRCDIR "/SentenceBreakTest.txt"; -#endif bits.bits = 0; bits.attr.is_sentence_boundary = 1; do_test (filename, bits); @@ -402,17 +374,15 @@ test_sentence_break (void) static void test_line_break (void) { - const gchar *filename; + const char *filename; AttrBits bits; -#if GLIB_CHECK_VERSION(2, 37, 2) + filename = g_test_get_filename (G_TEST_DIST, "LineBreakTest.txt", NULL); -#else - filename = SRCDIR "/LineBreakTest.txt"; -#endif bits.bits = 0; bits.attr.is_line_break = 1; bits.attr.is_mandatory_break = 1; + do_test (filename, bits); } diff --git a/tests/testscript.c b/tests/testscript.c index aa610b44..33e8ad2e 100644 --- a/tests/testscript.c +++ b/tests/testscript.c @@ -60,18 +60,6 @@ #include "pango/pango-script.h" -#undef VERBOSE - -#define ASSERT(stmt) G_STMT_START { \ - if (stmt) { } \ - else \ - { \ - g_warning ("%s:%d (%s): assertion '%s' failed", \ - __FILE__, __LINE__, G_STRFUNC, #stmt); \ - exit (1); \ - } \ -} G_STMT_END - typedef struct { const char *run_text_escaped; @@ -170,9 +158,7 @@ test_script_iter (void) iter = pango_script_iter_new (all->str, -1); -#ifdef VERBOSE - g_print ("Total length: %d\n", all->len); -#endif + g_test_message ("Total length: %" G_GSIZE_FORMAT "\n", all->len); pos = all->str; for (i = 0; i < G_N_ELEMENTS(test_data); i++) @@ -181,16 +167,18 @@ test_script_iter (void) gboolean result; pango_script_iter_get_range (iter, &start, &end, &script); -#ifdef VERBOSE - g_print ("Range: %d-%d: %d\n", start - all->str, end - all->str, script); -#endif - ASSERT (start == pos); - ASSERT (end == next_pos); - ASSERT (script == test_data[i].run_code); + g_test_message ("Range: %d-%d: %d\n", + (int) (start - all->str), + (int) (end - all->str), + script); + + g_assert_true (start == pos); + g_assert_true (end == next_pos); + g_assert_true (script == test_data[i].run_code); result = pango_script_iter_next (iter); - ASSERT (result == (i != G_N_ELEMENTS (test_data) - 1)); + g_assert_true (result == (i != G_N_ELEMENTS (test_data) - 1)); pos = next_pos; } @@ -204,10 +192,10 @@ test_script_iter (void) pango_script_iter_get_range (iter, &start, &end, &script); - ASSERT (start == all->str); - ASSERT (end == all->str); - ASSERT (script == PANGO_SCRIPT_COMMON); - ASSERT (!pango_script_iter_next (iter)); + g_assert_true (start == all->str); + g_assert_true (end == all->str); + g_assert_true (script == PANGO_SCRIPT_COMMON); + g_assert_true (!pango_script_iter_next (iter)); pango_script_iter_free (iter); |