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/test-common.c | |
parent | 5a00bdb4873056749a833173112d78d578f82c72 (diff) | |
download | pango-a2b0c3367d75b066a18914e7ab820c3e2229fc5d.tar.gz |
Split out some test functions
These will be reused later.
Diffstat (limited to 'tests/test-common.c')
-rw-r--r-- | tests/test-common.c | 204 |
1 files changed, 204 insertions, 0 deletions
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; +} |