From 5b08ef84e4132db8f3e873f52c4bc929949dff4d Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 20 Jun 2010 21:04:47 -0400 Subject: [PATCH] Move utf8 pointer tests to test framework --- glib/tests/Makefile.am | 6 + glib/tests/collate.c | 215 +++++++++++++++++++++++++++ {tests => glib/tests}/utf8-pointer.c | 0 tests/Makefile.am | 1 - 4 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 glib/tests/collate.c rename {tests => glib/tests}/utf8-pointer.c (100%) diff --git a/glib/tests/Makefile.am b/glib/tests/Makefile.am index 58caa3c7e..0e72e70aa 100644 --- a/glib/tests/Makefile.am +++ b/glib/tests/Makefile.am @@ -68,6 +68,12 @@ sequence_LDADD = $(progs_ldadd) TEST_PROGS += scannerapi scannerapi_LDADD = $(progs_ldadd) +TEST_PROGS += collate +collate_LDADD = $(progs_ldadd) + +TEST_PROGS += utf8-pointer +utf8_pointer_LDADD = $(progs_ldadd) + if OS_UNIX # some testing of gtester funcitonality diff --git a/glib/tests/collate.c b/glib/tests/collate.c new file mode 100644 index 000000000..b831e5d76 --- /dev/null +++ b/glib/tests/collate.c @@ -0,0 +1,215 @@ +#include +#include + +typedef struct { + const gchar **input; + const gchar **sorted; + const gchar **file_sorted; +} CollateTest; + +typedef struct { + const gchar *key; + const gchar *str; +} Line; + +int +compare_collate (const void *a, const void *b) +{ + const Line *line_a = a; + const Line *line_b = b; + + return g_utf8_collate (line_a->str, line_b->str); +} + +int +compare_key (const void *a, const void *b) +{ + const Line *line_a = a; + const Line *line_b = b; + + return strcmp (line_a->key, line_b->key); +} + +static void +do_collate (gboolean for_file, gboolean use_key, const CollateTest *test) +{ + GArray *line_array = g_array_new (FALSE, FALSE, sizeof(Line)); + Line line; + gint i; + + for (i = 0; test->input[i]; i++) + { + line.str = test->input[i]; + if (for_file) + line.key = g_utf8_collate_key_for_filename (line.str, -1); + else + line.key = g_utf8_collate_key (line.str, -1); + + g_array_append_val (line_array, line); + } + + qsort (line_array->data, line_array->len, sizeof (Line), use_key ? compare_key : compare_collate); + + for (i = 0; test->input[i]; i++) + { + const gchar *str; + str = g_array_index (line_array, Line, i).str; + if (for_file) + g_assert_cmpstr (str, ==, test->file_sorted[i]); + else + g_assert_cmpstr (str, ==, test->sorted[i]); + } +} + +static void +test_collate (gconstpointer d) +{ + const CollateTest *test = d; + do_collate (FALSE, FALSE, test); +} + +static void +test_collate_key (gconstpointer d) +{ + const CollateTest *test = d; + do_collate (FALSE, TRUE, test); +} + +static void +test_collate_file (gconstpointer d) +{ + const CollateTest *test = d; + do_collate (TRUE, TRUE, test); +} + +const gchar *input0[] = { + "z", + "c", + "eer34", + "223", + "er1", + "foo", + "bar", + "baz", + "GTK+", + NULL +}; + +const gchar *sorted0[] = { + "223", + "bar", + "baz", + "c", + "eer34", + "er1", + "foo", + "GTK+", + "z", + NULL +}; + +const gchar *file_sorted0[] = { + "223", + "bar", + "baz", + "c", + "eer34", + "er1", + "foo", + "GTK+", + "z", + NULL +}; + +const gchar *input1[] = { + "file.txt", + "file2.bla", + "file.c", + "file3.xx", + "bla001", + "bla02", + "bla03", + "bla4", + "bla10", + "bla100", + "event.c", + "eventgenerator.c", + "event.h", + NULL +}; + +const gchar *sorted1[] = { + "bla001", + "bla02", + "bla03", + "bla10", + "bla100", + "bla4", + "event.c", + "eventgenerator.c", + "event.h", + "file2.bla", + "file3.xx", + "file.c", + "file.txt", + NULL +}; + +const gchar *file_sorted1[] = { + "bla001", + "bla02", + "bla03", + "bla4", + "bla10", + "bla100", + "event.c", + "event.h", + "eventgenerator.c", + "file.c", + "file.txt", + "file2.bla", + "file3.xx", + NULL +}; + +int +main (int argc, char *argv[]) +{ + gchar *path; + gint i; + const gchar *locale; + CollateTest test[2]; + + g_test_init (&argc, &argv, NULL); + + g_setenv ("LC_ALL", "en_US", TRUE); + locale = setlocale (LC_ALL, ""); + if (locale == NULL || strcmp (locale, "en_US") != 0) + { + g_test_message ("No suitable locale, skipping test"); + return 0; + } + + test[0].input = input0; + test[0].sorted = sorted0; + test[0].file_sorted = file_sorted0; + test[1].input = input1; + test[1].sorted = sorted1; + test[1].file_sorted = file_sorted1; + + for (i = 0; i < G_N_ELEMENTS (test); i++) + { + path = g_strdup_printf ("/unicode/collate/%d", i); + g_test_add_data_func (path, &test[i], test_collate); + g_free (path); + path = g_strdup_printf ("/unicode/collate-key/%d", i); + g_test_add_data_func (path, test, test_collate_key); + g_free (path); + path = g_strdup_printf ("/unicode/collate-filename/%d", i); + g_test_add_data_func (path, test, test_collate_file); + g_free (path); + } + + return g_test_run (); +} + diff --git a/tests/utf8-pointer.c b/glib/tests/utf8-pointer.c similarity index 100% rename from tests/utf8-pointer.c rename to glib/tests/utf8-pointer.c diff --git a/tests/Makefile.am b/tests/Makefile.am index 6d91cdf2d..44afe9541 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -126,7 +126,6 @@ test_programs = \ unicode-caseconv \ unicode-encoding \ utf8-validate \ - utf8-pointer \ uri-test test_scripts = run-markup-tests.sh run-collate-tests.sh run-bookmark-test.sh run-assert-msg-test.sh