[gtk/matthiasc/for-master: 2/2] Move fnmatch testcases to the testsuite




commit 31407d0a4cc86b2507bc50684439b14e97b35e5e
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Jun 3 23:33:33 2021 -0400

    Move fnmatch testcases to the testsuite
    
    We have a well-working way to test internal
    apis now, lets use it for these tests.

 gtk/fnmatch.c             | 106 -----------------------------------
 testsuite/gtk/fnmatch.c   | 140 ++++++++++++++++++++++++++++++++++++++++++++++
 testsuite/gtk/meson.build |   1 +
 3 files changed, 141 insertions(+), 106 deletions(-)
---
diff --git a/gtk/fnmatch.c b/gtk/fnmatch.c
index ba661afbbe..0ad1cd8992 100644
--- a/gtk/fnmatch.c
+++ b/gtk/fnmatch.c
@@ -253,109 +253,3 @@ _gtk_fnmatch (const char *pattern,
 {
   return gtk_fnmatch_intern (pattern, string, TRUE, no_leading_period, casefold);
 }
-
-#undef FNMATCH_TEST_CASES
-#ifdef FNMATCH_TEST_CASES
-
-#define TEST(pat, str, no_leading_period, result) \
-  g_assert (_gtk_fnmatch ((pat), (str), (no_leading_period)) == result)
-
-int main (int argc, char **argv)
-{
-  TEST ("[a-]", "-", TRUE, TRUE);
-  
-  TEST ("a", "a", TRUE, TRUE);
-  TEST ("a", "b", TRUE, FALSE);
-
-  /* Test what ? matches */
-  TEST ("?", "a", TRUE, TRUE);
-  TEST ("?", ".", TRUE, FALSE);
-  TEST ("a?", "a.", TRUE, TRUE);
-  TEST ("a/?", "a/b", TRUE, TRUE);
-  TEST ("a/?", "a/.", TRUE, FALSE);
-  TEST ("?", "/", TRUE, FALSE);
-
-  /* Test what * matches */
-  TEST ("*", "a", TRUE, TRUE);
-  TEST ("*", ".", TRUE, FALSE);
-  TEST ("a*", "a.", TRUE, TRUE);
-  TEST ("a/*", "a/b", TRUE, TRUE);
-  TEST ("a/*", "a/.", TRUE, FALSE);
-  TEST ("*", "/", TRUE, FALSE);
-
-  /* Range tests */
-  TEST ("[ab]", "a", TRUE, TRUE);
-  TEST ("[ab]", "c", TRUE, FALSE);
-  TEST ("[^ab]", "a", TRUE, FALSE);
-  TEST ("[!ab]", "a", TRUE, FALSE);
-  TEST ("[^ab]", "c", TRUE, TRUE);
-  TEST ("[!ab]", "c", TRUE, TRUE);
-  TEST ("[a-c]", "b", TRUE, TRUE);
-  TEST ("[a-c]", "d", TRUE, FALSE);
-  TEST ("[a-]", "-", TRUE, TRUE);
-  TEST ("[]]", "]", TRUE, TRUE);
-  TEST ("[^]]", "a", TRUE, TRUE);
-  TEST ("[!]]", "a", TRUE, TRUE);
-
-  /* Various unclosed ranges */
-  TEST ("[ab", "a", TRUE, FALSE);
-  TEST ("[a-", "a", TRUE, FALSE);
-  TEST ("[ab", "c", TRUE, FALSE);
-  TEST ("[a-", "c", TRUE, FALSE);
-  TEST ("[^]", "a", TRUE, FALSE);
-
-  /* Ranges and special no-wildcard matches */
-  TEST ("[.]", ".", TRUE, FALSE);
-  TEST ("a[.]", "a.", TRUE, TRUE);
-  TEST ("a/[.]", "a/.", TRUE, FALSE);
-  TEST ("[/]", "/", TRUE, FALSE);
-  TEST ("[^/]", "a", TRUE, TRUE);
-  
-  /* Basic tests of * (and combinations of * and ?) */
-  TEST ("a*b", "ab", TRUE, TRUE);
-  TEST ("a*b", "axb", TRUE, TRUE);
-  TEST ("a*b", "axxb", TRUE, TRUE);
-  TEST ("a**b", "ab", TRUE, TRUE);
-  TEST ("a**b", "axb", TRUE, TRUE);
-  TEST ("a**b", "axxb", TRUE, TRUE);
-  TEST ("a*?*b", "ab", TRUE, FALSE);
-  TEST ("a*?*b", "axb", TRUE, TRUE);
-  TEST ("a*?*b", "axxb", TRUE, TRUE);
-
-  /* Test of  *[range] */
-  TEST ("a*[cd]", "ac", TRUE, TRUE);
-  TEST ("a*[cd]", "axc", TRUE, TRUE);
-  TEST ("a*[cd]", "axx", TRUE, FALSE);
-
-  TEST ("a/[.]", "a/.", TRUE, FALSE);
-  TEST ("a*[.]", "a/.", TRUE, FALSE);
-
-  /* Test of UTF-8 */
-
-  TEST ("ä", "ä", TRUE, TRUE);      /* TEST ("ä", "ä", TRUE); */
-  TEST ("?", "ä", TRUE, TRUE);       /* TEST ("?", "ä", TRUE); */
-  TEST ("*ö", "äö", TRUE, TRUE);   /* TEST ("*ö", "äö", TRUE); */
-  TEST ("*ö", "ääö", TRUE, TRUE); /* TEST ("*ö", "ääö", TRUE); */
-  TEST ("[ä]", "ä", TRUE, TRUE);    /* TEST ("[ä]", "ä", TRUE); */
-  TEST ("[ä-ö]", "é", TRUE, TRUE); /* TEST ("[ä-ö]", "é", TRUE); */
-  TEST ("[ä-ö]", "a", TRUE, FALSE); /* TEST ("[ä-ö]", "a", FALSE); */
-
-#ifdef DO_ESCAPE
-  /* Tests of escaping */
-  TEST ("\\\\", "\\", TRUE, TRUE);
-  TEST ("\\?", "?", TRUE, TRUE);
-  TEST ("\\?", "a", TRUE, FALSE);
-  TEST ("\\*", "*", TRUE, TRUE);
-  TEST ("\\*", "a", TRUE, FALSE);
-  TEST ("\\[a-b]", "[a-b]", TRUE, TRUE);
-  TEST ("[\\\\]", "\\", TRUE, TRUE);
-  TEST ("[\\^a]", "a", TRUE, TRUE);
-  TEST ("[a\\-c]", "b", TRUE, FALSE);
-  TEST ("[a\\-c]", "-", TRUE, TRUE);
-  TEST ("[a\\]", "a", TRUE, FALSE);
-#endif /* DO_ESCAPE */
-  
-  return 0;
-}
-
-#endif /* FNMATCH_TEST_CASES */
diff --git a/testsuite/gtk/fnmatch.c b/testsuite/gtk/fnmatch.c
new file mode 100644
index 0000000000..a614c1f99b
--- /dev/null
+++ b/testsuite/gtk/fnmatch.c
@@ -0,0 +1,140 @@
+#include <gtk/gtk.h>
+#include "gtk/gtkprivate.h"
+
+#if defined(G_OS_WIN32) || defined(G_WITH_CYGWIN)
+#define DO_ESCAPE 0
+#else  
+#define DO_ESCAPE 1
+#endif
+
+typedef struct {
+  const char *pat;
+  const char *str;
+  gboolean no_leading_period;
+  gboolean ci;
+  gboolean result;
+} TestCase;
+
+static TestCase tests[] = {
+  { "[a-]", "-", TRUE, FALSE, TRUE },
+
+  { "a", "a", TRUE, FALSE, TRUE },
+  { "a", "b", TRUE, FALSE, FALSE },
+
+  /* Test what ? matches */
+  { "?", "a", TRUE, FALSE, TRUE },
+  { "?", ".", TRUE, FALSE, FALSE },
+  { "a?", "a.", TRUE, FALSE, TRUE },
+  { "a/?", "a/b", TRUE, FALSE, TRUE },
+  { "a/?", "a/.", TRUE, FALSE, FALSE },
+  { "?", "/", TRUE, FALSE, FALSE },
+
+  /* Test what * matches */
+  { "*", "a", TRUE, FALSE, TRUE },
+  { "*", ".", TRUE, FALSE, FALSE },
+  { "a*", "a.", TRUE, FALSE, TRUE },
+  { "a/*", "a/b", TRUE, FALSE, TRUE },
+  { "a/*", "a/.", TRUE, FALSE, FALSE },
+  { "*", "/", TRUE, FALSE, FALSE },
+
+  /* Range tests */
+  { "[ab]", "a", TRUE, FALSE, TRUE },
+  { "[ab]", "c", TRUE, FALSE, FALSE },
+  { "[^ab]", "a", TRUE, FALSE, FALSE },
+  { "[!ab]", "a", TRUE, FALSE, FALSE },
+  { "[^ab]", "c", TRUE, FALSE, TRUE },
+  { "[!ab]", "c", TRUE, FALSE, TRUE },
+  { "[a-c]", "b", TRUE, FALSE, TRUE },
+  { "[a-c]", "d", TRUE, FALSE, FALSE },
+  { "[a-]", "-", TRUE, FALSE, TRUE },
+  { "[]]", "]", TRUE, FALSE, TRUE },
+  { "[^]]", "a", TRUE, FALSE, TRUE },
+  { "[!]]", "a", TRUE, FALSE, TRUE },
+
+  /* Various unclosed ranges */
+  { "[ab", "a", TRUE, FALSE, FALSE },
+  { "[a-", "a", TRUE, FALSE, FALSE },
+  { "[ab", "c", TRUE, FALSE, FALSE },
+  { "[a-", "c", TRUE, FALSE, FALSE },
+  { "[^]", "a", TRUE, FALSE, FALSE },
+
+  /* Ranges and special no-wildcard matches */
+  { "[.]", ".", TRUE, FALSE, FALSE },
+  { "a[.]", "a.", TRUE, FALSE, TRUE },
+  { "a/[.]", "a/.", TRUE, FALSE, FALSE },
+  { "[/]", "/", TRUE, FALSE, FALSE },
+  { "[^/]", "a", TRUE, FALSE, TRUE },
+  
+  /* Basic tests of * (and combinations of * and ?) */
+  { "a*b", "ab", TRUE, FALSE, TRUE },
+  { "a*b", "axb", TRUE, FALSE, TRUE },
+  { "a*b", "axxb", TRUE, FALSE, TRUE },
+  { "a**b", "ab", TRUE, FALSE, TRUE },
+  { "a**b", "axb", TRUE, FALSE, TRUE },
+  { "a**b", "axxb", TRUE, FALSE, TRUE },
+  { "a*?*b", "ab", TRUE, FALSE, FALSE },
+  { "a*?*b", "axb", TRUE, FALSE, TRUE },
+  { "a*?*b", "axxb", TRUE, FALSE, TRUE },
+
+  /* Test of  *[range] */
+  { "a*[cd]", "ac", TRUE, FALSE, TRUE },
+  { "a*[cd]", "axc", TRUE, FALSE, TRUE },
+  { "a*[cd]", "axx", TRUE, FALSE, FALSE },
+
+  { "a/[.]", "a/.", TRUE, FALSE, FALSE },
+  { "a*[.]", "a/.", TRUE, FALSE, FALSE },
+
+
+  /* Test of UTF-8 */
+
+  { "ä", "ä", TRUE, FALSE, TRUE },
+  { "?", "ä", TRUE, FALSE, TRUE },
+  { "*ö", "äö", TRUE, FALSE, TRUE },
+  { "*ö", "ääö", TRUE, FALSE, TRUE },
+  { "[ä]", "ä", TRUE, FALSE, TRUE },
+  { "[ä-ö]", "é", TRUE, FALSE, TRUE },
+  { "[ä-ö]", "a", TRUE, FALSE, FALSE },
+
+  /* ci patterns */
+  { "*.txt", "a.TXT", TRUE, TRUE, TRUE },
+  { "*.txt", "a.TxT", TRUE, TRUE, TRUE },
+  { "*.txt", "a.txT", TRUE, TRUE, TRUE },
+  { "*ö", "äÖ", TRUE, TRUE, TRUE },
+
+#ifdef DO_ESCAPE
+  /* Tests of escaping */
+  { "\\\\", "\\", TRUE, FALSE, TRUE },
+  { "\\?", "?", TRUE, FALSE, TRUE },
+  { "\\?", "a", TRUE, FALSE, FALSE },
+  { "\\*", "*", TRUE, FALSE, TRUE },
+  { "\\*", "a", TRUE, FALSE, FALSE },
+  { "\\[a-b]", "[a-b]", TRUE, FALSE, TRUE },
+  { "[\\\\]", "\\", TRUE, FALSE, TRUE },
+  { "[\\^a]", "a", TRUE, FALSE, TRUE },
+  { "[a\\-c]", "b", TRUE, FALSE, FALSE },
+  { "[a\\-c]", "-", TRUE, FALSE, TRUE },
+  { "[a\\]", "a", TRUE, FALSE, FALSE },
+#endif /* DO_ESCAPE */
+};
+
+static void
+test_fnmatch (gconstpointer data)
+{
+  const TestCase *test = data;
+
+  g_assert_true (_gtk_fnmatch (test->pat, test->str, test->no_leading_period, test->ci) == test->result);
+}
+
+int
+main (int argc, char *argv[])
+{
+  (g_test_init) (&argc, &argv, NULL);
+
+  for (int i = 0; i < G_N_ELEMENTS (tests); i++)
+    {
+      char *path = g_strdup_printf ("/fnmatch/test%d", i);
+      g_test_add_data_func (path, &tests[i], test_fnmatch);
+    }
+
+  return g_test_run ();
+}
diff --git a/testsuite/gtk/meson.build b/testsuite/gtk/meson.build
index 9fe45d339b..a0b53250ed 100644
--- a/testsuite/gtk/meson.build
+++ b/testsuite/gtk/meson.build
@@ -118,6 +118,7 @@ internal_tests = [
   { 'name': 'rbtree' },
   { 'name': 'timsort' },
   { 'name': 'texthistory' },
+  { 'name': 'fnmatch' },
 ]
 
 # Tests that are expected to fail


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]