Browse Source

Ticket #2309: "Shell patterns" broken beyond repair.

Fix tests execution. Add new test which covers current functionality of glob2regexp.

Signed-off-by: Slava Zanko <slavazanko@gmail.com>
Slava Zanko 10 years ago
parent
commit
0eca32a852

+ 2 - 0
m4.include/mc-tests.m4

@@ -20,6 +20,8 @@ AC_DEFUN([MC_UNIT_TESTS],[
             [check >= 0.9.8],
             [have_check=yes],
             [AC_MSG_WARN(['Check' utility not found. Check your environment])])
+        AC_SUBST(CHECK_CFLAGS)
+        AC_SUBST(CHECK_LIBS)
     fi
     AM_CONDITIONAL(HAVE_TESTS, test x"$have_check" = "xyes")
 

+ 4 - 0
tests/lib/search/Makefile.am

@@ -9,6 +9,7 @@ LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la
 
 TESTS = \
 	glob_prepare_replace_str \
+	glob_translate_to_regex \
 	regex_replace_esc_seq \
 	regex_process_escape_sequence \
 	translate_replace_glob_to_regex
@@ -26,3 +27,6 @@ regex_process_escape_sequence_SOURCES = \
 
 translate_replace_glob_to_regex_SOURCES = \
 	translate_replace_glob_to_regex.c
+
+glob_translate_to_regex_SOURCES = \
+	glob_translate_to_regex.c

+ 128 - 0
tests/lib/search/glob_translate_to_regex.c

@@ -0,0 +1,128 @@
+/*
+   libmc - checks for processing esc sequences in replace string
+
+   Copyright (C) 2011-2014
+   Free Software Foundation, Inc.
+
+   Written by:
+   Andrew Borodin <aborodin@vmail.ru>, 2011
+   Slava Zanko <slavazanko@gmail.com>, 2013
+
+   This file is part of the Midnight Commander.
+
+   The Midnight Commander is free software: you can redistribute it
+   and/or modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation, either version 3 of the License,
+   or (at your option) any later version.
+
+   The Midnight Commander 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "lib/search/glob"
+
+#include "tests/mctest.h"
+
+#include "glob.c"               /* for testing static functions */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_glob_translate_to_regex_ds") */
+/* *INDENT-OFF* */
+static const struct test_glob_translate_to_regex_ds
+{
+    const char *input_value;
+    const char *expected_result;
+} test_glob_translate_to_regex_ds[] =
+{
+    {
+        "test*",
+        "test(.*)"
+    },
+    {
+        "t?es*t",
+        "t(.)es(.*)t"
+    },
+    {
+        "te{st}",
+        "te(st)"
+    },
+    {
+        "te{st|ts}",
+        "te(st|ts)"
+    },
+    {
+        "te{st,ts}",
+        "te(st|ts)"
+    },
+    {
+        "te[st]",
+        "te[st]"
+    },
+    {
+        "t,e.st",
+        "t|e\\.st"
+    },
+    {
+        "^t,e.+st+$",
+        "\\^t|e\\.\\+st\\+\\$"
+    },
+    {
+        "te!@#$%^&*()_+|\";:'{}:><?\\?\\*.,/[]|\\/st",
+        "te!@#\\$%\\^&(.*)\\(\\)_\\+|\";:'():><(.)\\\\\\.|/[]|\\/st"
+    },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_glob_translate_to_regex_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_glob_translate_to_regex, test_glob_translate_to_regex_ds)
+/* *INDENT-ON* */
+{
+    /* given */
+    GString *tmp = g_string_new (data->input_value);
+    GString *dest_str;
+
+    /* when */
+    dest_str = mc_search__glob_translate_to_regex (tmp);
+
+    /* then */
+    g_string_free (tmp, TRUE);
+
+    mctest_assert_str_eq (dest_str->str, data->expected_result);
+    g_string_free (dest_str, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+    int number_failed;
+
+    Suite *s = suite_create (TEST_SUITE_NAME);
+    TCase *tc_core = tcase_create ("Core");
+    SRunner *sr;
+
+    /* Add new tests here: *************** */
+    mctest_add_parameterized_test (tc_core, test_glob_translate_to_regex,
+                                   test_glob_translate_to_regex_ds);
+    /* *********************************** */
+
+    suite_add_tcase (s, tc_core);
+    sr = srunner_create (s);
+    srunner_run_all (sr, CK_NORMAL);
+    number_failed = srunner_ntests_failed (sr);
+    srunner_free (sr);
+    return (number_failed == 0) ? 0 : 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */

+ 2 - 1
tests/lib/search/translate_replace_glob_to_regex.c

@@ -71,7 +71,8 @@ START_PARAMETRIZED_TEST (test_translate_replace_glob_to_regex, test_translate_re
     dest_str = mc_search__translate_replace_glob_to_regex (data->input_value);
 
     /* then */
-    mctest_assert_str_eq (dest_str->str, data->expected_result) g_string_free (dest_str, TRUE);
+    mctest_assert_str_eq (dest_str->str, data->expected_result);
+    g_string_free (dest_str, TRUE);
 }
 /* *INDENT-OFF* */
 END_PARAMETRIZED_TEST