diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-11-22 23:01:25 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-11-24 19:57:58 -0500 |
commit | 9a63774e6f6bdc262da09088aa9075330798f18a (patch) | |
tree | 757ac7d55526ce8ebaff02145feae8a5d8c52e57 /tests/test-layout.c | |
parent | 3f6f2887f02ee6cf98d115085b0dcff681696e0e (diff) | |
download | pango-9a63774e6f6bdc262da09088aa9075330798f18a.tar.gz |
Update test-layout
Use the new output serialization in test-layout
to store both the input and output in the same
file.
Diffstat (limited to 'tests/test-layout.c')
-rw-r--r-- | tests/test-layout.c | 286 |
1 files changed, 32 insertions, 254 deletions
diff --git a/tests/test-layout.c b/tests/test-layout.c index f4b36c77..b664af5d 100644 --- a/tests/test-layout.c +++ b/tests/test-layout.c @@ -36,194 +36,9 @@ static PangoContext *context; static gboolean opt_show_font; -static const gchar * -enum_value_nick (GType type, gint value) +static GBytes * +test_bytes (GBytes *orig) { - GEnumClass *eclass; - GEnumValue *ev; - - eclass = g_type_class_ref (type); - ev = g_enum_get_value (eclass, value); - g_type_class_unref (eclass); - - if (ev) - return ev->value_nick; - else - return "?"; -} - -static const gchar * -direction_name (PangoDirection dir) -{ - return enum_value_nick (PANGO_TYPE_DIRECTION, dir); -} - -static const gchar * -gravity_name (PangoGravity gravity) -{ - return enum_value_nick (PANGO_TYPE_GRAVITY, gravity); -} - -static const gchar * -script_name (PangoScript script) -{ - return enum_value_nick (PANGO_TYPE_SCRIPT, script); -} - -static gchar * -font_name (PangoFont *font) -{ - PangoFontDescription *desc; - gchar *name; - - desc = pango_font_describe (font); - name = pango_font_description_to_string (desc); - pango_font_description_free (desc); - - return name; -} - -static void -dump_lines (PangoLayout *layout, GString *string) -{ - PangoLayoutIter *iter; - const gchar *text; - gint index, index2; - gboolean has_more; - gchar *char_str; - gint i; - PangoLayoutLine *line; - - text = pango_layout_get_text (layout); - iter = pango_layout_get_iter (layout); - - has_more = TRUE; - index = pango_layout_iter_get_index (iter); - index2 = 0; - i = 0; - while (has_more) - { - line = pango_layout_iter_get_line (iter); - has_more = pango_layout_iter_next_line (iter); - i++; - - if (has_more) - { - index2 = pango_layout_iter_get_index (iter); - char_str = g_strndup (text + index, index2 - index); - } - else - { - char_str = g_strdup (text + index); - } - - g_string_append_printf (string, "i=%d, index=%d, paragraph-start=%d, dir=%s '%s'\n", - i, index, line->is_paragraph_start, direction_name (line->resolved_dir), - char_str); - g_free (char_str); - - index = index2; - } - pango_layout_iter_free (iter); -} - -#define ANALYSIS_FLAGS (PANGO_ANALYSIS_FLAG_CENTERED_BASELINE | \ - PANGO_ANALYSIS_FLAG_IS_ELLIPSIS | \ - PANGO_ANALYSIS_FLAG_NEED_HYPHEN) - -static void -dump_runs (PangoLayout *layout, GString *string) -{ - PangoLayoutIter *iter; - PangoLayoutRun *run; - PangoItem *item; - const gchar *text; - gint index; - gboolean has_more; - gchar *char_str; - gint i; - gchar *font = 0; - - text = pango_layout_get_text (layout); - iter = pango_layout_get_iter (layout); - - has_more = TRUE; - i = 0; - while (has_more) - { - run = pango_layout_iter_get_run (iter); - index = pango_layout_iter_get_index (iter); - has_more = pango_layout_iter_next_run (iter); - i++; - - if (run) - { - item = ((PangoGlyphItem*)run)->item; - char_str = g_strndup (text + item->offset, item->length); - font = font_name (item->analysis.font); - g_string_append_printf (string, "i=%d, index=%d, chars=%d, level=%d, gravity=%s, flags=%d, font=%s, script=%s, language=%s, '%s'\n", - i, index, item->num_chars, item->analysis.level, - gravity_name (item->analysis.gravity), - item->analysis.flags & ANALYSIS_FLAGS, - opt_show_font ? font : "OMITTED", /* for some reason, this fails on build.gnome.org, so leave it out */ - script_name (item->analysis.script), - pango_language_to_string (item->analysis.language), - char_str); - print_attributes (item->analysis.extra_attrs, string); - g_free (font); - g_free (char_str); - } - else - { - g_string_append_printf (string, "i=%d, index=%d, no run, line end\n", - i, index); - } - } - pango_layout_iter_free (iter); -} - -static void -dump_directions (PangoLayout *layout, GString *string) -{ - const char *text, *p; - - text = pango_layout_get_text (layout); - for (p = text; *p; p = g_utf8_next_char (p)) - { - g_string_append_printf (string, "%d ", pango_layout_get_direction (layout, p - text)); - } - g_string_append (string, "\n"); -} - -static void -dump_cursor_positions (PangoLayout *layout, GString *string) -{ - const char *text; - int index, trailing; - - text = pango_layout_get_text (layout); - - index = 0; - trailing = 0; - - while (index < G_MAXINT) - { - g_string_append_printf (string, "%d(%d) ", index, trailing); - - while (trailing--) - index = g_utf8_next_char (text + index) - text; - - pango_layout_move_cursor_visually (layout, TRUE, index, 0, 1, &index, &trailing); - } - - g_string_append (string, "\n"); -} - -static void -test_file (const char *filename, GString *string) -{ - char *contents; - gsize length; GBytes *bytes; GError *error = NULL; PangoLayout *layout; @@ -231,76 +46,29 @@ test_file (const char *filename, GString *string) if (context == NULL) context = pango_font_map_create_context (pango_cairo_font_map_get_default ()); - g_file_get_contents (filename, &contents, &length, &error); - g_assert_no_error (error); - - bytes = g_bytes_new_take (contents, length); - - layout = pango_layout_deserialize (context, bytes, PANGO_LAYOUT_DESERIALIZE_DEFAULT, &error); + layout = pango_layout_deserialize (context, orig, PANGO_LAYOUT_DESERIALIZE_CONTEXT, &error); g_assert_no_error (error); - g_bytes_unref (bytes); - - /* generate the dumps */ - g_string_append (string, pango_layout_get_text (layout)); - - g_string_append (string, "\n--- parameters\n\n"); - - g_string_append_printf (string, "wrapped: %d\n", pango_layout_is_wrapped (layout)); - g_string_append_printf (string, "ellipsized: %d\n", pango_layout_is_ellipsized (layout)); - g_string_append_printf (string, "lines: %d\n", pango_layout_get_line_count (layout)); - if (pango_layout_get_width (layout) > 0) - g_string_append_printf (string, "width: %d\n", pango_layout_get_width (layout)); - if (pango_layout_get_height (layout) > 0) - g_string_append_printf (string, "height: %d\n", pango_layout_get_height (layout)); - if (pango_layout_get_indent (layout) != 0) - g_string_append_printf (string, "indent: %d\n", pango_layout_get_indent (layout)); - - g_string_append (string, "\n--- attributes\n\n"); - print_attr_list (pango_layout_get_attributes (layout), string); - - g_string_append (string, "\n--- directions\n\n"); - dump_directions (layout, string); - - g_string_append (string, "\n--- cursor positions\n\n"); - dump_cursor_positions (layout, string); - - g_string_append (string, "\n--- lines\n\n"); - dump_lines (layout, string); - - g_string_append (string, "\n--- runs\n\n"); - dump_runs (layout, string); + bytes = pango_layout_serialize (layout, PANGO_LAYOUT_SERIALIZE_CONTEXT | PANGO_LAYOUT_SERIALIZE_OUTPUT); g_object_unref (layout); -} - -static gchar * -get_expected_filename (const char *filename) -{ - char *f, *p, *expected; - f = g_strdup (filename); - p = strstr (f, ".layout"); - if (p) - *p = 0; - expected = g_strconcat (f, ".expected", NULL); - - g_free (f); - - return expected; + return bytes; } static void test_layout (gconstpointer d) { const char *filename = d; - char *expected_file; GError *error = NULL; - GString *dump; char *diff; PangoFontFamily **families; int n_families; gboolean found_cantarell; + GBytes *bytes; + char *contents; + gsize length; + GBytes *orig; char *old_locale = g_strdup (setlocale (LC_ALL, NULL)); setlocale (LC_ALL, "en_US.UTF-8"); @@ -330,22 +98,25 @@ test_layout (gconstpointer d) if (!found_cantarell) { - char *msg = g_strdup_printf ("Cantarell font not available, skipping itemization %s", filename); + char *msg = g_strdup_printf ("Cantarell font not available, skipping layout %s", filename); g_test_skip (msg); g_free (msg); g_free (old_locale); return; } - expected_file = get_expected_filename (filename); - - dump = g_string_sized_new (0); + g_file_get_contents (filename, &contents, &length, &error); + g_assert_no_error (error); + orig = g_bytes_new_take (contents, length); - test_file (filename, dump); + bytes = test_bytes (orig); - diff = diff_with_file (expected_file, dump->str, dump->len, &error); + diff = diff_bytes (bytes, orig, &error); g_assert_no_error (error); + g_bytes_unref (bytes); + g_bytes_unref (orig); + setlocale (LC_ALL, old_locale); g_free (old_locale); @@ -365,8 +136,6 @@ test_layout (gconstpointer d) } g_free (diff); - g_string_free (dump, TRUE); - g_free (expected_file); } int @@ -400,12 +169,21 @@ main (int argc, char *argv[]) /* allow to easily generate expected output for new test cases */ if (argc > 1 && argv[1][0] != '-') { - GString *string; + char *contents; + gsize length; + GError *error = NULL; + GBytes *orig; + GBytes *bytes; + + g_file_get_contents (argv[1], &contents, &length, &error); + g_assert_no_error (error); + orig = g_bytes_new_take (contents, length); + bytes = test_bytes (orig); + + g_print ("%s", (const char *)g_bytes_get_data (bytes, NULL)); - string = g_string_sized_new (0); - test_file (argv[1], string); - g_print ("%s", string->str); - g_string_free (string, TRUE); + g_bytes_unref (bytes); + g_bytes_unref (orig); return 0; } |