diff options
Diffstat (limited to 'tests/testmisc.c')
-rw-r--r-- | tests/testmisc.c | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/tests/testmisc.c b/tests/testmisc.c new file mode 100644 index 00000000..5ba7c81b --- /dev/null +++ b/tests/testmisc.c @@ -0,0 +1,112 @@ +/* Pango + * testmisc.c: Test program for miscellaneous things + * + * Copyright (C) 2020 Matthias Clasen + * + * 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 "config.h" +#include <glib.h> +#include <pango/pangocairo.h> + +static void +test_shape_tab_crash (void) +{ + PangoContext *context; + PangoLayout *layout; + + context = pango_font_map_create_context (pango_cairo_font_map_get_default ()); + layout = pango_layout_new (context); + pango_layout_set_text (layout, "one\ttwo", -1); + pango_layout_is_ellipsized (layout); + + g_object_unref (layout); + g_object_unref (context); +} + +/* Test that itemizing a string with 0 characters works + */ +static void +test_itemize_empty_crash (void) +{ + PangoContext *context; + + context = pango_font_map_create_context (pango_cairo_font_map_get_default ()); + pango_itemize_with_base_dir (context, PANGO_DIRECTION_LTR, "", 0, 1, NULL, NULL); + + g_object_unref (context); +} + +static void +test_itemize_utf8 (void) +{ + PangoContext *context; + GList *result = NULL; + + context = pango_font_map_create_context (pango_cairo_font_map_get_default ()); + result = pango_itemize_with_base_dir (context, PANGO_DIRECTION_LTR, "\xc3\xa1\na", 3, 1, NULL, NULL); + g_assert (result != NULL); + + g_object_unref (context); +} + +/* Test that pango_layout_set_text (layout, "short", 200) + * does not lead to a crash. (pidgin does this) + */ +static void +test_short_string_crash (void) +{ + PangoContext *context; + PangoLayout *layout; + int width, height; + + context = pango_font_map_create_context (pango_cairo_font_map_get_default ()); + layout = pango_layout_new (context); + pango_layout_set_text (layout, "short text", 200); + pango_layout_get_pixel_size (layout, &width, &height); + + g_object_unref (layout); + g_object_unref (context); +} + +static void +test_language_emoji_crash (void) +{ + PangoLanguage *lang; + const PangoScript *scripts; + int num; + + lang = pango_language_from_string ("und-zsye"); + scripts = pango_language_get_scripts (lang, &num); + + g_assert (num >= 0); + g_assert (scripts == NULL || num > 0); +} + +int +main (int argc, char *argv[]) +{ + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/layout/shape-tab-crash", test_shape_tab_crash); + g_test_add_func ("/layout/itemize-empty-crash", test_itemize_empty_crash); + g_test_add_func ("/layout/itemize-utf8", test_itemize_utf8); + g_test_add_func ("/layout/short-string-crash", test_short_string_crash); + g_test_add_func ("/language/emoji-crash", test_language_emoji_crash); + + return g_test_run (); +} |