diff options
author | Yevgen Muntyan <muntyan@tamu.edu> | 2007-06-03 05:48:17 +0000 |
---|---|---|
committer | Yevgen Muntyan <muntyan@src.gnome.org> | 2007-06-03 05:48:17 +0000 |
commit | 904c42896f3311b70cc36f9a58985a51c775e12b (patch) | |
tree | 5d453fd6016d4f9ca936e718818efc79c5c76532 /tests | |
parent | 458c58ae43faaff1279f31892db677dcde4a1b65 (diff) |
New functions: g_regex_ref(), g_regex_unref() which replaces
2007-06-03 Yevgen Muntyan <muntyan@tamu.edu>
* glib/gregex.c:
* glib/gregex.h: New functions: g_regex_ref(), g_regex_unref() which
replaces g_regex_free(); g_match_info_get_regex(), g_match_info_get_string();
g_regex_check_replacement().
Made g_match_info_expand_references() accept NULL; changed GRegexEvalCallback
to take only arguments which are likely to be actualy used.
* docs/reference/glib/glib-sections.txt:
* glib/glib.symbols: Added new functions.
* tests/regex-test.c: Test them.
* docs/reference/glib/tmpl/gregex.sgml: Updated GRegexEvalCallback docs.
svn path=/trunk/; revision=5524
Diffstat (limited to 'tests')
-rw-r--r-- | tests/regex-test.c | 133 |
1 files changed, 97 insertions, 36 deletions
diff --git a/tests/regex-test.c b/tests/regex-test.c index 9a18e767a..111ca58c2 100644 --- a/tests/regex-test.c +++ b/tests/regex-test.c @@ -112,13 +112,11 @@ test_new (const gchar *pattern, { g_print ("failed \t(pattern: \"%s\")\n", pattern); - g_regex_free (regex); + g_regex_unref (regex); return FALSE; } - g_regex_free (regex); - /* Free a null string. */ - g_regex_free (NULL); + g_regex_unref (regex); verbose ("passed\n"); return TRUE; @@ -146,7 +144,7 @@ test_new_fail (const gchar *pattern, { g_print ("failed \t(pattern: \"%s\", compile: %d)\n", pattern, compile_opts); - g_regex_free (regex); + g_regex_unref (regex); return FALSE; } @@ -220,7 +218,7 @@ test_match (const gchar *pattern, g_print ("failed \t(unexpected %s) '%s' against '%s'\n", match ? "match" : "mismatch", e1, e2); g_free (e1); g_free (e2); - g_regex_free (regex); + g_regex_unref (regex); return FALSE; } @@ -231,12 +229,12 @@ test_match (const gchar *pattern, { g_print ("failed \t(pattern: \"%s\", string: \"%s\")\n", pattern, string); - g_regex_free (regex); + g_regex_unref (regex); return FALSE; } } - g_regex_free (regex); + g_regex_unref (regex); verbose ("passed (%s)\n", match ? "match" : "nomatch"); return TRUE; @@ -319,6 +317,8 @@ test_match_next (const gchar *pattern, matches = g_slist_prepend (matches, match); g_match_info_next (match_info, NULL); } + g_assert (regex == g_match_info_get_regex (match_info)); + g_assert (string == g_match_info_get_string (match_info)); g_match_info_free (match_info); matches = g_slist_reverse (matches); @@ -366,7 +366,7 @@ exit: verbose ("passed (%d %s)\n", count, count == 1 ? "match" : "matches"); } - g_regex_free (regex); + g_regex_unref (regex); g_slist_foreach (expected, free_match, NULL); g_slist_free (expected); g_slist_foreach (matches, free_match, NULL); @@ -450,7 +450,7 @@ test_match_count (const gchar *pattern, } g_match_info_free (match_info); - g_regex_free (regex); + g_regex_unref (regex); verbose ("passed\n"); return TRUE; @@ -481,26 +481,26 @@ test_partial (const gchar *pattern, if (expected != g_match_info_is_partial_match (match_info)) { g_print ("failed \t(got %d, expected: %d)\n", !expected, expected); - g_regex_free (regex); + g_regex_unref (regex); return FALSE; } if (expected && g_match_info_fetch_pos (match_info, 0, NULL, NULL)) { g_print ("failed \t(got sub-pattern 0)\n"); - g_regex_free (regex); + g_regex_unref (regex); return FALSE; } if (expected && g_match_info_fetch_pos (match_info, 1, NULL, NULL)) { g_print ("failed \t(got sub-pattern 1)\n"); - g_regex_free (regex); + g_regex_unref (regex); return FALSE; } g_match_info_free (match_info); - g_regex_free (regex); + g_regex_unref (regex); verbose ("passed\n"); return TRUE; @@ -540,7 +540,7 @@ test_sub_pattern (const gchar *pattern, g_print ("failed \t(got \"%s\", expected \"%s\")\n", sub_expr, expected_sub); g_free (sub_expr); - g_regex_free (regex); + g_regex_unref (regex); return FALSE; } g_free (sub_expr); @@ -550,12 +550,12 @@ test_sub_pattern (const gchar *pattern, { g_print ("failed \t(got [%d, %d], expected [%d, %d])\n", start, end, expected_start, expected_end); - g_regex_free (regex); + g_regex_unref (regex); return FALSE; } g_match_info_free (match_info); - g_regex_free (regex); + g_regex_unref (regex); verbose ("passed\n"); return TRUE; @@ -598,7 +598,7 @@ test_named_sub_pattern (const gchar *pattern, g_print ("failed \t(got \"%s\", expected \"%s\")\n", sub_expr, expected_sub); g_free (sub_expr); - g_regex_free (regex); + g_regex_unref (regex); return FALSE; } g_free (sub_expr); @@ -608,12 +608,12 @@ test_named_sub_pattern (const gchar *pattern, { g_print ("failed \t(got [%d, %d], expected [%d, %d])\n", start, end, expected_start, expected_end); - g_regex_free (regex); + g_regex_unref (regex); return FALSE; } g_match_info_free (match_info); - g_regex_free (regex); + g_regex_unref (regex); verbose ("passed\n"); return TRUE; @@ -704,7 +704,7 @@ test_fetch_all (const gchar *pattern, exit: g_match_info_free (match_info); - g_regex_free (regex); + g_regex_unref (regex); g_slist_foreach (expected, (GFunc)g_free, NULL); g_slist_free (expected); g_strfreev (matches); @@ -907,7 +907,7 @@ test_split_full (const gchar *pattern, token_count == 1 ? "token" : "tokens"); exit: - g_regex_free (regex); + g_regex_unref (regex); g_slist_foreach (expected, (GFunc)g_free, NULL); g_slist_free (expected); g_strfreev (tokens); @@ -976,7 +976,7 @@ test_split (const gchar *pattern, token_count == 1 ? "token" : "tokens"); exit: - g_regex_free (regex); + g_regex_unref (regex); g_slist_foreach (expected, (GFunc)g_free, NULL); g_slist_free (expected); g_strfreev (tokens); @@ -1049,33 +1049,77 @@ exit: } static gboolean +test_check_replacement (const gchar *string_to_expand, + gboolean expected, + gboolean expected_refs) +{ + gboolean result; + gboolean has_refs; + + verbose ("checking replacement string \"%s\" \t", string_to_expand); + + result = g_regex_check_replacement (string_to_expand, &has_refs, NULL); + if (expected != result) + { + g_print ("failed \t(got \"%s\", expected \"%s\")\n", + result ? "TRUE" : "FALSE", + expected ? "TRUE" : "FALSE"); + return FALSE; + } + + if (expected && expected_refs != has_refs) + { + g_print ("failed \t(got has_references \"%s\", expected \"%s\")\n", + has_refs ? "TRUE" : "FALSE", + expected_refs ? "TRUE" : "FALSE"); + return FALSE; + } + + verbose ("passed\n"); + return TRUE; +} + +#define TEST_CHECK_REPLACEMENT(string_to_expand, expected, expected_refs) { \ + total++; \ + if (test_check_replacement (string_to_expand, expected, expected_refs)) \ + PASS; \ + else \ + FAIL; \ +} +static gboolean test_expand (const gchar *pattern, const gchar *string, const gchar *string_to_expand, gboolean raw, const gchar *expected) { - GRegex *regex; - GMatchInfo *match_info; + GRegex *regex = NULL; + GMatchInfo *match_info = NULL; gchar *res; verbose ("expanding the references in \"%s\" (pattern: \"%s\", string: \"%s\") \t", string_to_expand, pattern, string); - regex = g_regex_new (pattern, raw ? G_REGEX_RAW : 0, 0, NULL); - g_regex_match (regex, string, 0, &match_info); + if (pattern) + { + regex = g_regex_new (pattern, raw ? G_REGEX_RAW : 0, 0, NULL); + g_regex_match (regex, string, 0, &match_info); + } + res = g_match_info_expand_references (match_info, string_to_expand, NULL); if (!streq (res, expected)) { g_print ("failed \t(got \"%s\", expected \"%s\")\n", res, expected); g_free (res); - g_regex_free (regex); + g_match_info_free (match_info); + g_regex_unref (regex); return FALSE; } g_free (res); g_match_info_free (match_info); - g_regex_free (regex); + if (regex) + g_regex_unref (regex); verbose ("passed\n"); return TRUE; @@ -1108,12 +1152,12 @@ test_replace (const gchar *pattern, { g_print ("failed \t(got \"%s\", expected \"%s\")\n", res, expected); g_free (res); - g_regex_free (regex); + g_regex_unref (regex); return FALSE; } g_free (res); - g_regex_free (regex); + g_regex_unref (regex); verbose ("passed\n"); return TRUE; @@ -1147,12 +1191,12 @@ test_replace_lit (const gchar *pattern, { g_print ("failed \t(got \"%s\", expected \"%s\")\n", res, expected); g_free (res); - g_regex_free (regex); + g_regex_unref (regex); return FALSE; } g_free (res); - g_regex_free (regex); + g_regex_unref (regex); verbose ("passed\n"); return TRUE; @@ -1179,7 +1223,7 @@ test_get_string_number (const gchar *pattern, regex = g_regex_new (pattern, 0, 0, NULL); num = g_regex_get_string_number (regex, name); - g_regex_free (regex); + g_regex_unref (regex); if (num != expected_num) { @@ -1336,7 +1380,7 @@ exit: } g_match_info_free (match_info); - g_regex_free (regex); + g_regex_unref (regex); g_slist_foreach (expected, free_match, NULL); g_slist_free (expected); @@ -1442,7 +1486,7 @@ exit: } g_match_info_free (match_info); - g_regex_free (regex); + g_regex_unref (regex); g_slist_foreach (expected, free_match, NULL); g_slist_free (expected); @@ -1852,6 +1896,17 @@ main (int argc, char *argv[]) TEST_SPLIT3(" *", "ab c", 0, 3, "a", "b", "c"); TEST_SPLIT3(" *", "ab c", 0, 4, "a", "b", "c"); + /* TEST_CHECK_REPLACEMENT(string_to_expand, expected, expected_refs) */ + TEST_CHECK_REPLACEMENT("", TRUE, FALSE); + TEST_CHECK_REPLACEMENT("a", TRUE, FALSE); + TEST_CHECK_REPLACEMENT("\\t\\n\\v\\r\\f\\a\\b\\\\\\x{61}", TRUE, FALSE); + TEST_CHECK_REPLACEMENT("\\0", TRUE, TRUE); + TEST_CHECK_REPLACEMENT("\\n\\2", TRUE, TRUE); + TEST_CHECK_REPLACEMENT("\\g<foo>", TRUE, TRUE); + /* Invalid strings */ + TEST_CHECK_REPLACEMENT("\\Q", FALSE, FALSE); + TEST_CHECK_REPLACEMENT("x\\Ay", FALSE, FALSE); + /* TEST_EXPAND(pattern, string, string_to_expand, raw, expected) */ TEST_EXPAND("a", "a", "", FALSE, ""); TEST_EXPAND("a", "a", "\\0", FALSE, "a"); @@ -1918,6 +1973,12 @@ main (int argc, char *argv[]) TEST_EXPAND("", "", "\\", FALSE, NULL); TEST_EXPAND("a", "a", "\\x{61", FALSE, NULL); TEST_EXPAND("a", "a", "\\x6X", FALSE, NULL); + /* Pattern-less. */ + TEST_EXPAND(NULL, NULL, "", FALSE, ""); + TEST_EXPAND(NULL, NULL, "\\n", FALSE, "\n"); + /* Invalid strings */ + TEST_EXPAND(NULL, NULL, "\\Q", FALSE, NULL); + TEST_EXPAND(NULL, NULL, "x\\Ay", FALSE, NULL); /* TEST_REPLACE(pattern, string, start_position, replacement, expected) */ TEST_REPLACE("a", "ababa", 0, "A", "AbAbA"); |