Commit 3fc1a9bf authored by Emmanuele Bassi's avatar Emmanuele Bassi

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.
parent 2a773323
......@@ -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;
}
......
......@@ -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;
}
......
......@@ -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);
......
......@@ -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);
}
......
......@@ -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;
}
......
......@@ -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);
}
......
......@@ -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 ();
}
......@@ -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);
}
......
......@@ -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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment