diff options
author | Matthias Clasen <mclasen@redhat.com> | 2015-03-12 21:51:35 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-03-13 00:11:33 -0400 |
commit | a2b0c3367d75b066a18914e7ab820c3e2229fc5d (patch) | |
tree | 93096e6cca070d4e6ead3798b5e5f38da469e385 /tests | |
parent | 5a00bdb4873056749a833173112d78d578f82c72 (diff) | |
download | pango-a2b0c3367d75b066a18914e7ab820c3e2229fc5d.tar.gz |
Split out some test functions
These will be reused later.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 7 | ||||
-rw-r--r-- | tests/test-common.c | 204 | ||||
-rw-r--r-- | tests/test-common.h | 22 | ||||
-rw-r--r-- | tests/test-layout.c | 176 |
4 files changed, 240 insertions, 169 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index b048ea0f..3edec0d7 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -64,6 +64,12 @@ TEST_PANGO_LIBS = ../pango/libpango-$(PANGO_API_VERSION).la TEST_PANGOFT2_LIBS = $(TEST_PANGO_LIBS) ../pango/libpangoft2-$(PANGO_API_VERSION).la TEST_PANGOCAIRO_LIBS = $(TEST_PANGO_LIBS) ../pango/libpangocairo-$(PANGO_API_VERSION).la +test_layout_SOURCES = \ + test-layout.c \ + test-common.c \ + test-common.h \ + $(NULL) + gen_all_unicode_LDADD = $(GLIB_LIBS) testboundaries_LDADD = $(TEST_PANGO_LIBS) $(GLIB_LIBS) testboundaries_ucd_LDADD = $(TEST_PANGO_LIBS) $(GLIB_LIBS) @@ -76,6 +82,7 @@ dump_boundaries_LDADD = $(TEST_PANGO_LIBS) $(GLIB_LIBS) markup_parse_LDADD = $(TEST_PANGOCAIRO_LIBS) $(GLIB_LIBS) test_layout_LDADD = $(TEST_PANGOCAIRO_LIBS) $(GLIB_LIBS) test_font_LDADD = $(TEST_PANGOCAIRO_LIBS) $(GLIB_LIBS) +testattributes_LDADD = $(TEST_PANGOCAIRO_LIBS) $(GLIB_LIBS) if HAVE_CXX check_PROGRAMS += cxx-test diff --git a/tests/test-common.c b/tests/test-common.c new file mode 100644 index 00000000..88234114 --- /dev/null +++ b/tests/test-common.c @@ -0,0 +1,204 @@ +/* Pango + * test-common.c: Common test code + * + * Copyright (C) 2014 Red Hat, Inc + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include <glib.h> +#include <string.h> +#include <unistd.h> +#include <locale.h> + +#include <pango/pangocairo.h> + +char * +diff_with_file (const char *file, + char *text, + gssize len, + GError **error) +{ + const char *command[] = { "diff", "-u", file, NULL, NULL }; + char *diff, *tmpfile; + int fd; + + diff = NULL; + + if (len < 0) + len = strlen (text); + + /* write the text buffer to a temporary file */ + fd = g_file_open_tmp (NULL, &tmpfile, error); + if (fd < 0) + return NULL; + + if (write (fd, text, len) != (int) len) + { + close (fd); + g_set_error (error, + G_FILE_ERROR, G_FILE_ERROR_FAILED, + "Could not write data to temporary file '%s'", tmpfile); + goto done; + } + close (fd); + command[3] = tmpfile; + + /* run diff command */ + g_spawn_sync (NULL, + (char **) command, + NULL, + G_SPAWN_SEARCH_PATH, + NULL, NULL, + &diff, + NULL, NULL, + error); + +done: + unlink (tmpfile); + g_free (tmpfile); + + return diff; +} + +void +print_attribute (PangoAttribute *attr, GString *string) +{ + g_string_append_printf (string, "[%d %d] ", attr->start_index, attr->end_index); + switch (attr->klass->type) + { + case PANGO_ATTR_LANGUAGE: + g_string_append_printf (string,"language %s\n", pango_language_to_string (((PangoAttrLanguage *)attr)->value)); + break; + case PANGO_ATTR_FAMILY: + g_string_append_printf (string,"family %s\n", ((PangoAttrString *)attr)->value); + break; + case PANGO_ATTR_STYLE: + g_string_append_printf (string,"style %d\n", ((PangoAttrInt *)attr)->value); + break; + case PANGO_ATTR_WEIGHT: + g_string_append_printf (string,"weight %d\n", ((PangoAttrInt *)attr)->value); + break; + case PANGO_ATTR_VARIANT: + g_string_append_printf (string,"variant %d\n", ((PangoAttrInt *)attr)->value); + break; + case PANGO_ATTR_STRETCH: + g_string_append_printf (string,"stretch %d\n", ((PangoAttrInt *)attr)->value); + break; + case PANGO_ATTR_SIZE: + g_string_append_printf (string,"size %d\n", ((PangoAttrSize *)attr)->size); + break; + case PANGO_ATTR_FONT_DESC: + g_string_append_printf (string,"font %s\n", pango_font_description_to_string (((PangoAttrFontDesc *)attr)->desc)); + break; + case PANGO_ATTR_FOREGROUND: + g_string_append_printf (string,"foreground %s\n", pango_color_to_string (&((PangoAttrColor *)attr)->color)); + break; + case PANGO_ATTR_BACKGROUND: + g_string_append_printf (string,"background %s\n", pango_color_to_string (&((PangoAttrColor *)attr)->color)); + break; + case PANGO_ATTR_UNDERLINE: + g_string_append_printf (string,"underline %d\n", ((PangoAttrInt *)attr)->value); + break; + case PANGO_ATTR_STRIKETHROUGH: + g_string_append_printf (string,"strikethrough %d\n", ((PangoAttrInt *)attr)->value); + break; + case PANGO_ATTR_RISE: + g_string_append_printf (string,"rise %d\n", ((PangoAttrInt *)attr)->value); + break; + case PANGO_ATTR_SHAPE: + g_string_append_printf (string,"shape\n"); + break; + case PANGO_ATTR_SCALE: + g_string_append_printf (string,"scale %f\n", ((PangoAttrFloat *)attr)->value); + break; + case PANGO_ATTR_FALLBACK: + g_string_append_printf (string,"fallback %d\n", ((PangoAttrInt *)attr)->value); + break; + case PANGO_ATTR_LETTER_SPACING: + g_string_append_printf (string,"letter-spacing %d\n", ((PangoAttrInt *)attr)->value); + break; + case PANGO_ATTR_UNDERLINE_COLOR: + g_string_append_printf (string,"underline-color %s\n", pango_color_to_string (&((PangoAttrColor *)attr)->color)); + break; + case PANGO_ATTR_STRIKETHROUGH_COLOR: + g_string_append_printf (string,"strikethrough-color %s\n", pango_color_to_string (&((PangoAttrColor *)attr)->color)); + break; + case PANGO_ATTR_ABSOLUTE_SIZE: + g_string_append_printf (string,"absolute-size %d\n", ((PangoAttrSize *)attr)->size); + break; + case PANGO_ATTR_GRAVITY: + g_string_append_printf (string,"gravity %d\n", ((PangoAttrInt *)attr)->value); + break; + case PANGO_ATTR_GRAVITY_HINT: + g_string_append_printf (string,"gravity-hint %d\n", ((PangoAttrInt *)attr)->value); + break; + default: + g_assert_not_reached (); + break; + } +} + +void +print_attr_list (PangoAttrList *attrs, GString *string) +{ + PangoAttrIterator *iter; + + iter = pango_attr_list_get_iterator (attrs); + do { + gint start, end; + GSList *list, *l; + + pango_attr_iterator_range (iter, &start, &end); + g_string_append_printf (string, "range %d %d\n", start, end); + list = pango_attr_iterator_get_attrs (iter); + for (l = list; l; l = l->next) + { + PangoAttribute *attr = l->data; + print_attribute (attr, string); + } + g_slist_free_full (list, (GDestroyNotify)pango_attribute_destroy); + } while (pango_attr_iterator_next (iter)); + + pango_attr_iterator_destroy (iter); +} + +void +print_attributes (GSList *attrs, GString *string) +{ + GSList *l; + + for (l = attrs; l; l = l->next) + { + PangoAttribute *attr = l->data; + + g_string_append (string, " "); + print_attribute (attr, string); + } +} + +typedef struct +{ + guint ref_count; + GSList *attributes; + GSList *attributes_tail; +} AL; + +GSList * +attr_list_to_list (PangoAttrList *attrs) +{ + return ((AL*)attrs)->attributes; +} diff --git a/tests/test-common.h b/tests/test-common.h new file mode 100644 index 00000000..ae81d3aa --- /dev/null +++ b/tests/test-common.h @@ -0,0 +1,22 @@ +#ifndef __TEST_COMMON_H__ +#define __TEST_COMMON_H__ + +char * diff_with_file (const char *file, + char *text, + gssize len, + GError **error); + +void print_attribute (PangoAttribute *attr, + GString *string); + +void print_attributes (GSList *attrs, + GString *string); + +void print_attr_list (PangoAttrList *attrs, + GString *string); + +GSList *attr_list_to_list (PangoAttrList *attrs); + + + +#endif diff --git a/tests/test-layout.c b/tests/test-layout.c index fffc9630..62333c1f 100644 --- a/tests/test-layout.c +++ b/tests/test-layout.c @@ -25,173 +25,11 @@ #include <locale.h> #include <pango/pangocairo.h> - -static char * -diff_with_file (const char *file1, - char *text, - gssize len, - GError **error) -{ - const char *command[] = { "diff", "-u", file1, NULL, NULL }; - char *diff, *tmpfile; - int fd; - - diff = NULL; - - if (len < 0) - len = strlen (text); - - /* write the text buffer to a temporary file */ - fd = g_file_open_tmp (NULL, &tmpfile, error); - if (fd < 0) - return NULL; - - if (write (fd, text, len) != (int) len) - { - close (fd); - g_set_error (error, - G_FILE_ERROR, G_FILE_ERROR_FAILED, - "Could not write data to temporary file '%s'", tmpfile); - goto done; - } - close (fd); - command[3] = tmpfile; - - /* run diff command */ - g_spawn_sync (NULL, - (char **) command, - NULL, - G_SPAWN_SEARCH_PATH, - NULL, NULL, - &diff, - NULL, NULL, - error); - -done: - unlink (tmpfile); - g_free (tmpfile); - - return diff; -} +#include "test-common.h" static PangoContext *context; -static void -print_attr (PangoAttribute *attr, GString *string) -{ - g_string_append_printf (string, "[%d %d] ", attr->start_index, attr->end_index); - switch (attr->klass->type) - { - case PANGO_ATTR_LANGUAGE: - g_string_append_printf (string,"language %s\n", pango_language_to_string (((PangoAttrLanguage *)attr)->value)); - break; - case PANGO_ATTR_FAMILY: - g_string_append_printf (string,"family %s\n", ((PangoAttrString *)attr)->value); - break; - case PANGO_ATTR_STYLE: - g_string_append_printf (string,"style %d\n", ((PangoAttrInt *)attr)->value); - break; - case PANGO_ATTR_WEIGHT: - g_string_append_printf (string,"weight %d\n", ((PangoAttrInt *)attr)->value); - break; - case PANGO_ATTR_VARIANT: - g_string_append_printf (string,"variant %d\n", ((PangoAttrInt *)attr)->value); - break; - case PANGO_ATTR_STRETCH: - g_string_append_printf (string,"stretch %d\n", ((PangoAttrInt *)attr)->value); - break; - case PANGO_ATTR_SIZE: - g_string_append_printf (string,"size %d\n", ((PangoAttrSize *)attr)->size); - break; - case PANGO_ATTR_FONT_DESC: - g_string_append_printf (string,"font %s\n", pango_font_description_to_string (((PangoAttrFontDesc *)attr)->desc)); - break; - case PANGO_ATTR_FOREGROUND: - g_string_append_printf (string,"foreground %s\n", pango_color_to_string (&((PangoAttrColor *)attr)->color)); - break; - case PANGO_ATTR_BACKGROUND: - g_string_append_printf (string,"background %s\n", pango_color_to_string (&((PangoAttrColor *)attr)->color)); - break; - case PANGO_ATTR_UNDERLINE: - g_string_append_printf (string,"underline %d\n", ((PangoAttrInt *)attr)->value); - break; - case PANGO_ATTR_STRIKETHROUGH: - g_string_append_printf (string,"strikethrough %d\n", ((PangoAttrInt *)attr)->value); - break; - case PANGO_ATTR_RISE: - g_string_append_printf (string,"rise %d\n", ((PangoAttrInt *)attr)->value); - break; - case PANGO_ATTR_SHAPE: - g_string_append_printf (string,"shape\n"); - break; - case PANGO_ATTR_SCALE: - g_string_append_printf (string,"scale %f\n", ((PangoAttrFloat *)attr)->value); - break; - case PANGO_ATTR_FALLBACK: - g_string_append_printf (string,"fallback %d\n", ((PangoAttrInt *)attr)->value); - break; - case PANGO_ATTR_LETTER_SPACING: - g_string_append_printf (string,"letter-spacing %d\n", ((PangoAttrInt *)attr)->value); - break; - case PANGO_ATTR_UNDERLINE_COLOR: - g_string_append_printf (string,"underline-color %s\n", pango_color_to_string (&((PangoAttrColor *)attr)->color)); - break; - case PANGO_ATTR_STRIKETHROUGH_COLOR: - g_string_append_printf (string,"strikethrough-color %s\n", pango_color_to_string (&((PangoAttrColor *)attr)->color)); - break; - case PANGO_ATTR_ABSOLUTE_SIZE: - g_string_append_printf (string,"absolute-size %d\n", ((PangoAttrSize *)attr)->size); - break; - case PANGO_ATTR_GRAVITY: - g_string_append_printf (string,"gravity %d\n", ((PangoAttrInt *)attr)->value); - break; - case PANGO_ATTR_GRAVITY_HINT: - g_string_append_printf (string,"gravity-hint %d\n", ((PangoAttrInt *)attr)->value); - break; - default: - g_assert_not_reached (); - break; - } -} - -static void -dump_attrs (PangoAttrList *attrs, GString *string) -{ - PangoAttrIterator *iter; - - iter = pango_attr_list_get_iterator (attrs); - do { - gint start, end; - GSList *list, *l; - - pango_attr_iterator_range (iter, &start, &end); - g_string_append_printf (string, "range %d %d\n", start, end); - list = pango_attr_iterator_get_attrs (iter); - for (l = list; l; l = l->next) - { - PangoAttribute *attr = l->data; - print_attr (attr, string); - } - g_slist_free_full (list, (GDestroyNotify)pango_attribute_destroy); - } while (pango_attr_iterator_next (iter)); - - pango_attr_iterator_destroy (iter); -} - -static void -dump_extra_attrs (GSList *attrs, GString *string) -{ - GSList *l; - - for (l = attrs; l; l = l->next) - { - PangoAttribute *attr = l->data; - - g_string_append (string, " "); - print_attr (attr, string); - } -} static const gchar * enum_value_nick (GType type, gint value) @@ -218,7 +56,7 @@ direction_name (PangoDirection dir) static const gchar * gravity_name (PangoGravity gravity) { - return enum_value_nick (PANGO_TYPE_GRAVITY, gravity); + return enum_value_nick (PANGO_TYPE_GRAVITY, gravity); } static const gchar * @@ -266,7 +104,7 @@ dump_lines (PangoLayout *layout, GString *string) if (has_more) { index2 = pango_layout_iter_get_index (iter); - char_str = g_strndup (text + index, index2 - index); + char_str = g_strndup (text + index, index2 - index); } else { @@ -274,7 +112,7 @@ dump_lines (PangoLayout *layout, GString *string) } 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), + i, index, line->is_paragraph_start, direction_name (line->resolved_dir), char_str); g_free (char_str); @@ -311,7 +149,7 @@ dump_runs (PangoLayout *layout, GString *string) if (has_more) { index2 = pango_layout_iter_get_index (iter); - char_str = g_strndup (text + index, index2 - index); + char_str = g_strndup (text + index, index2 - index); } else { @@ -330,7 +168,7 @@ dump_runs (PangoLayout *layout, GString *string) script_name (item->analysis.script), pango_language_to_string (item->analysis.language), char_str); - dump_extra_attrs (item->analysis.extra_attrs, string); + print_attributes (item->analysis.extra_attrs, string); g_free (font); } else @@ -442,7 +280,7 @@ test_file (const gchar *filename, GString *string) if (width != 0) g_string_append_printf (string, "width: %d\n", pango_layout_get_width (layout)); g_string_append (string, "\n---\n\n"); - dump_attrs (pango_layout_get_attributes (layout), string); + print_attr_list (pango_layout_get_attributes (layout), string); g_string_append (string, "\n---\n\n"); dump_lines (layout, string); g_string_append (string, "\n---\n\n"); |