Add testcase for search utilities functions
authorXavier Claessens <xavier.claessens@collabora.co.uk>
Wed, 9 Oct 2013 18:32:58 +0000 (14:32 -0400)
committerRyan Lortie <desrt@desrt.ca>
Mon, 14 Oct 2013 20:48:47 +0000 (16:48 -0400)
https://bugzilla.gnome.org/show_bug.cgi?id=709753

glib/tests/.gitignore
glib/tests/Makefile.am
glib/tests/search-utils.c [new file with mode: 0644]

index 1bc83c5..22bce40 100644 (file)
@@ -53,6 +53,7 @@ rec-mutex
 regex
 rwlock
 scannerapi
+search-utils
 sequence
 shell
 slice
index ac077dd..eaa99ae 100644 (file)
@@ -76,6 +76,7 @@ test_programs = \
        regex                           \
        rwlock                          \
        scannerapi                      \
+       search-utils                    \
        sequence                        \
        shell                           \
        slice                           \
diff --git a/glib/tests/search-utils.c b/glib/tests/search-utils.c
new file mode 100644 (file)
index 0000000..95c9b2b
--- /dev/null
@@ -0,0 +1,76 @@
+#include "config.h"
+
+#include <locale.h>
+#include <glib.h>
+
+typedef struct
+{
+  const gchar *string;
+  const gchar *prefix;
+  gboolean should_match;
+} SearchTest;
+
+static void
+test_search (void)
+{
+  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 },
+
+      /* 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 }
+    };
+  guint i;
+
+  setlocale(LC_ALL, "");
+
+  g_debug ("Started");
+  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);
+
+      g_debug ("'%s' - '%s' %s: %s", tests[i].prefix, tests[i].string,
+          tests[i].should_match ? "should match" : "should NOT match",
+          ok ? "OK" : "FAILED");
+
+      g_assert (ok);
+    }
+}
+
+int
+main (int argc,
+      char **argv)
+{
+  g_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/search", test_search);
+
+  return g_test_run ();
+}