summaryrefslogtreecommitdiff
path: root/glib2-static/MR1414.patch
diff options
context:
space:
mode:
Diffstat (limited to 'glib2-static/MR1414.patch')
-rw-r--r--glib2-static/MR1414.patch169
1 files changed, 169 insertions, 0 deletions
diff --git a/glib2-static/MR1414.patch b/glib2-static/MR1414.patch
new file mode 100644
index 000000000..67da4f01c
--- /dev/null
+++ b/glib2-static/MR1414.patch
@@ -0,0 +1,169 @@
+diff --git a/glib/tests/search-utils.c b/glib/tests/search-utils.c
+index 54926d5a59aaff1719059cfd38c8c3b2c3fac4de..7478a290a9e393170042ea8a91c9531fd0c197b6 100644
+--- a/glib/tests/search-utils.c
++++ b/glib/tests/search-utils.c
+@@ -7,74 +7,120 @@ typedef struct
+ {
+ const gchar *string;
+ const gchar *prefix;
++ const gchar *locale;
+ gboolean should_match;
+ } SearchTest;
+
++/* Test word separators and case */
++SearchTest basic[] = {
++ { "Hello World", "he", "C", TRUE },
++ { "Hello World", "wo", "C", TRUE },
++ { "Hello World", "lo", "C", FALSE },
++ { "Hello World", "ld", "C", FALSE },
++ { "Hello-World", "wo", "C", TRUE },
++ { "HelloWorld", "wo", "C", FALSE },
++ { NULL, NULL, NULL, FALSE }
++};
++
++/* Test composed chars (accentued letters) */
++SearchTest composed[] = {
++ { "Jörgen", "jor", "sv_SE.UTF-8", TRUE },
++ { "Gaëtan", "gaetan", "fr_FR.UTF-8", TRUE },
++ { "élève", "ele", "fr_FR.UTF-8", TRUE },
++ { "Azais", "AzaÏs", "fr_FR.UTF-8", FALSE },
++ { "AzaÏs", "Azais", "fr_FR.UTF-8", TRUE },
++ { NULL, NULL, NULL, FALSE }
++};
++
++/* Test decomposed chars, they looks the same, but are actually
++ * composed of multiple unicodes */
++SearchTest decomposed[] = {
++ { "Jorgen", "Jör", "sv_SE.UTF-8", FALSE },
++ { "Jörgen", "jor", "sv_SE.UTF-8", TRUE },
++ { NULL, NULL, NULL, FALSE }
++};
++
++/* Turkish special case */
++SearchTest turkish[] = {
++ { "İstanbul", "ist", "tr_TR.UTF-8", TRUE },
++ { "Diyarbakır", "diyarbakir", "tr_TR.UTF-8", TRUE },
++ { NULL, NULL, NULL, FALSE }
++};
++
++/* Test unicode chars when no locale is available */
++SearchTest c_locale_unicode[] = {
++ { "Jörgen", "jor", "C", TRUE },
++ { "Jorgen", "Jör", "C", FALSE },
++ { "Jörgen", "jor", "C", TRUE },
++ { NULL, NULL, NULL, FALSE }
++};
++
++/* Multi words */
++SearchTest multi_words[] = {
++ { "Xavier Claessens", "Xav Cla", "C", TRUE },
++ { "Xavier Claessens", "Cla Xav", "C", TRUE },
++ { "Foo Bar Baz", " b ", "C", TRUE },
++ { "Foo Bar Baz", "bar bazz", "C", FALSE },
++ { NULL, NULL, NULL, FALSE }
++};
++
+ static void
+-test_search (void)
++test_search (gconstpointer d)
+ {
+- SearchTest tests[] =
+- {
+- /* Test word separators and case */
+- { "Hello World", "he", TRUE },
+- { "Hello World", "wo", TRUE },
+- { "Hello World", "lo", FALSE },
+- { "Hello World", "ld", FALSE },
+- { "Hello-World", "wo", TRUE },
+- { "HelloWorld", "wo", FALSE },
+-
+- /* Test composed chars (accentued letters) */
+- { "Jörgen", "jor", TRUE },
+- { "Gaëtan", "gaetan", TRUE },
+- { "élève", "ele", TRUE },
+- { "Azais", "AzaÏs", FALSE },
+- { "AzaÏs", "Azais", TRUE },
+-
+- /* Test decomposed chars, they looks the same, but are actually
+- * composed of multiple unicodes */
+- { "Jorgen", "Jör", FALSE },
+- { "Jörgen", "jor", TRUE },
+-
+- /* Turkish special case */
+- { "İstanbul", "ist", TRUE },
+- { "Diyarbakır", "diyarbakir", TRUE },
+-
+- /* Multi words */
+- { "Xavier Claessens", "Xav Cla", TRUE },
+- { "Xavier Claessens", "Cla Xav", TRUE },
+- { "Foo Bar Baz", " b ", TRUE },
+- { "Foo Bar Baz", "bar bazz", FALSE },
+-
+- { NULL, NULL, FALSE }
+- };
++ const SearchTest *tests = d;
+ guint i;
+-
+- setlocale(LC_ALL, "");
++ gboolean all_skipped = TRUE;
+
+ g_debug ("Started");
+- for (i = 0; tests[i].string != NULL; i ++)
++
++ for (i = 0; tests[i].string != NULL; i++)
+ {
+ gboolean match;
+ gboolean ok;
+-
+- match = g_str_match_string (tests[i].prefix, tests[i].string, TRUE);
+- ok = (match == tests[i].should_match);
++ gboolean skipped;
++
++ if (setlocale (LC_ALL, tests[i].locale))
++ {
++ skipped = FALSE;
++ all_skipped = FALSE;
++ match = g_str_match_string (tests[i].prefix, tests[i].string, TRUE);
++ ok = (match == tests[i].should_match);
++ }
++ else
++ {
++ skipped = TRUE;
++ g_test_message ("Locale '%s' is unavailable", tests[i].locale);
++ }
+
+ g_debug ("'%s' - '%s' %s: %s", tests[i].prefix, tests[i].string,
+ tests[i].should_match ? "should match" : "should NOT match",
+- ok ? "OK" : "FAILED");
++ skipped ? "SKIPPED" : ok ? "OK" : "FAILED");
+
+- g_assert (ok);
++ g_assert (skipped || ok);
+ }
++
++ if (all_skipped)
++ g_test_skip ("No locales for the test set are available");
+ }
+
+ int
+ main (int argc,
+ char **argv)
+ {
++ gchar *user_locale;
++
+ g_test_init (&argc, &argv, NULL);
+
+- g_test_add_func ("/search", test_search);
++ setlocale (LC_ALL, "");
++ user_locale = setlocale (LC_ALL, NULL);
++ g_debug ("Current user locale: %s", user_locale);
++
++ g_test_add_data_func ("/search/basic", basic, test_search);
++ g_test_add_data_func ("/search/composed", composed, test_search);
++ g_test_add_data_func ("/search/decomposed", decomposed, test_search);
++ g_test_add_data_func ("/search/turkish", turkish, test_search);
++ g_test_add_data_func ("/search/c_locale_unicode", c_locale_unicode, test_search);
++ g_test_add_data_func ("/search/multi_words", multi_words, test_search);
+
+ return g_test_run ();
+ }