summaryrefslogtreecommitdiff
path: root/tests/unit
diff options
context:
space:
mode:
authorSébastien Helleu <flashcode@flashtux.org>2022-10-31 08:08:46 +0100
committerSébastien Helleu <flashcode@flashtux.org>2022-11-06 09:14:14 +0100
commit7555993bbc061c86d8f57b424a872a2496021a48 (patch)
tree3696ab69969c97b1027050de322fc3b8b1f71c6b /tests/unit
parent3b674a5e160301b0af71a6568cc34fdc0ec5fd04 (diff)
downloadweechat-7555993bbc061c86d8f57b424a872a2496021a48.zip
trigger: add regex command "y" to translate chars, set default regex command to "s" (regex replace) (closes #1510)
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/plugins/trigger/test-trigger.cpp160
1 files changed, 153 insertions, 7 deletions
diff --git a/tests/unit/plugins/trigger/test-trigger.cpp b/tests/unit/plugins/trigger/test-trigger.cpp
index 12617d43c..c919792f4 100644
--- a/tests/unit/plugins/trigger/test-trigger.cpp
+++ b/tests/unit/plugins/trigger/test-trigger.cpp
@@ -93,6 +93,28 @@ TEST(Trigger, SearchHookType)
/*
* Tests functions:
+ * trigger_search_regex_command
+ */
+
+TEST(Trigger, SearchRegexCommand)
+{
+ int i;
+
+ LONGS_EQUAL(-1, trigger_search_regex_command ('a'));
+ LONGS_EQUAL(-1, trigger_search_regex_command ('z'));
+ LONGS_EQUAL(-1, trigger_search_regex_command ('/'));
+ LONGS_EQUAL(-1, trigger_search_regex_command ('*'));
+ LONGS_EQUAL(-1, trigger_search_regex_command (' '));
+
+ for (i = 0; i < TRIGGER_NUM_REGEX_COMMANDS; i++)
+ {
+ LONGS_EQUAL(i,
+ trigger_search_regex_command (trigger_regex_command[i]));
+ }
+}
+
+/*
+ * Tests functions:
* trigger_search_return_code
*/
@@ -179,20 +201,34 @@ TEST(Trigger, RegexSplit)
WEE_CHECK_REGEX_SPLIT(0, 0, NULL);
WEE_CHECK_REGEX_SPLIT(0, 0, "");
- /* regex too short */
+ /* regex too short (default command "s") */
WEE_CHECK_REGEX_SPLIT(-1, 0, "/");
WEE_CHECK_REGEX_SPLIT(-1, 0, "/a");
- /* nothing after the delimiter */
- WEE_CHECK_REGEX_SPLIT(-1, 0, "///");
+ /* regex too short with command "s" (regex replace) */
+ WEE_CHECK_REGEX_SPLIT(-1, 0, "s/");
+ WEE_CHECK_REGEX_SPLIT(-1, 0, "s///");
+ WEE_CHECK_REGEX_SPLIT(-1, 0, "s/a");
+
+ /* regex too short with command "y" (translate chars) */
+ WEE_CHECK_REGEX_SPLIT(-1, 0, "y/");
+ WEE_CHECK_REGEX_SPLIT(-1, 0, "y///");
+ WEE_CHECK_REGEX_SPLIT(-1, 0, "y/a");
/* missing second delimiter */
WEE_CHECK_REGEX_SPLIT(-1, 0, "/abc");
+ WEE_CHECK_REGEX_SPLIT(-1, 0, "s/abc");
+ WEE_CHECK_REGEX_SPLIT(-1, 0, "y/abc");
+
+ /* invalid command */
+ WEE_CHECK_REGEX_SPLIT(-1, 0, "a/a/b");
+ WEE_CHECK_REGEX_SPLIT(-1, 0, "z/a/b");
/* invalid regex */
WEE_CHECK_REGEX_SPLIT(-2, 0, "/*/a");
+ WEE_CHECK_REGEX_SPLIT(-2, 0, "s/*/a");
- /* simple regex */
+ /* simple regex (implicit command "s") */
WEE_CHECK_REGEX_SPLIT(0, 1, "/a/b");
POINTERS_EQUAL(NULL, regex[0].variable);
STRCMP_EQUAL("a", regex[0].str_regex);
@@ -200,7 +236,23 @@ TEST(Trigger, RegexSplit)
STRCMP_EQUAL("b", regex[0].replace);
STRCMP_EQUAL("b", regex[0].replace_escaped);
- /* simple regex with variable */
+ /* simple regex replace (command "s") */
+ WEE_CHECK_REGEX_SPLIT(0, 1, "s/a/b");
+ POINTERS_EQUAL(NULL, regex[0].variable);
+ STRCMP_EQUAL("a", regex[0].str_regex);
+ CHECK(regex[0].regex);
+ STRCMP_EQUAL("b", regex[0].replace);
+ STRCMP_EQUAL("b", regex[0].replace_escaped);
+
+ /* simple translate chars (command "y") */
+ WEE_CHECK_REGEX_SPLIT(0, 1, "y/${chars:a-h}/${chars:A-H}");
+ POINTERS_EQUAL(NULL, regex[0].variable);
+ STRCMP_EQUAL("${chars:a-h}", regex[0].str_regex);
+ POINTERS_EQUAL(NULL, regex[0].regex);
+ STRCMP_EQUAL("${chars:A-H}", regex[0].replace);
+ POINTERS_EQUAL(NULL, regex[0].replace_escaped);
+
+ /* simple regex replace with variable (implicit command "s") */
WEE_CHECK_REGEX_SPLIT(0, 1, "/a/b/var");
STRCMP_EQUAL("var", regex[0].variable);
STRCMP_EQUAL("a", regex[0].str_regex);
@@ -208,7 +260,23 @@ TEST(Trigger, RegexSplit)
STRCMP_EQUAL("b", regex[0].replace);
STRCMP_EQUAL("b", regex[0].replace_escaped);
- /* 2 regex separated by 3 spaces, without variables */
+ /* simple regex replace with variable (command "s") */
+ WEE_CHECK_REGEX_SPLIT(0, 1, "s/a/b/var");
+ STRCMP_EQUAL("var", regex[0].variable);
+ STRCMP_EQUAL("a", regex[0].str_regex);
+ CHECK(regex[0].regex);
+ STRCMP_EQUAL("b", regex[0].replace);
+ STRCMP_EQUAL("b", regex[0].replace_escaped);
+
+ /* simple translate chars with variable (command "y") */
+ WEE_CHECK_REGEX_SPLIT(0, 1, "y/${chars:a-h}/${chars:A-H}/var");
+ STRCMP_EQUAL("var", regex[0].variable);
+ STRCMP_EQUAL("${chars:a-h}", regex[0].str_regex);
+ POINTERS_EQUAL(NULL, regex[0].regex);
+ STRCMP_EQUAL("${chars:A-H}", regex[0].replace);
+ POINTERS_EQUAL(NULL, regex[0].replace_escaped);
+
+ /* 2 regex replace separated by 3 spaces, without variables, implicit command "s" */
WEE_CHECK_REGEX_SPLIT(0, 2, "/abc/def/ /ghi/jkl/");
POINTERS_EQUAL(NULL, regex[0].variable);
STRCMP_EQUAL("abc", regex[0].str_regex);
@@ -221,7 +289,33 @@ TEST(Trigger, RegexSplit)
STRCMP_EQUAL("jkl", regex[1].replace);
STRCMP_EQUAL("jkl", regex[1].replace_escaped);
- /* 3 regex with variables and escaped replace */
+ /* 2 regex replace separated by 3 spaces, without variables, command "s" */
+ WEE_CHECK_REGEX_SPLIT(0, 2, "s/abc/def/ s/ghi/jkl/");
+ POINTERS_EQUAL(NULL, regex[0].variable);
+ STRCMP_EQUAL("abc", regex[0].str_regex);
+ CHECK(regex[0].regex);
+ STRCMP_EQUAL("def", regex[0].replace);
+ STRCMP_EQUAL("def", regex[0].replace_escaped);
+ POINTERS_EQUAL(NULL, regex[1].variable);
+ STRCMP_EQUAL("ghi", regex[1].str_regex);
+ CHECK(regex[1].regex);
+ STRCMP_EQUAL("jkl", regex[1].replace);
+ STRCMP_EQUAL("jkl", regex[1].replace_escaped);
+
+ /* 2 translate chars separated by 3 spaces, without variables, command "y" */
+ WEE_CHECK_REGEX_SPLIT(0, 2, "y/abc/ABC/ y/ghi/GHI/");
+ POINTERS_EQUAL(NULL, regex[0].variable);
+ STRCMP_EQUAL("abc", regex[0].str_regex);
+ POINTERS_EQUAL(NULL, regex[0].regex);
+ STRCMP_EQUAL("ABC", regex[0].replace);
+ POINTERS_EQUAL(NULL, regex[0].replace_escaped);
+ POINTERS_EQUAL(NULL, regex[1].variable);
+ STRCMP_EQUAL("ghi", regex[1].str_regex);
+ POINTERS_EQUAL(NULL, regex[1].regex);
+ STRCMP_EQUAL("GHI", regex[1].replace);
+ POINTERS_EQUAL(NULL, regex[1].replace_escaped);
+
+ /* 3 regex replace with variables and escaped replace, implicit command "s" */
WEE_CHECK_REGEX_SPLIT(0, 3,
"/abc/def/var1 /ghi/jkl/var2 /mno/pqr\\x20stu/var3");
STRCMP_EQUAL("var1", regex[0].variable);
@@ -240,6 +334,58 @@ TEST(Trigger, RegexSplit)
STRCMP_EQUAL("pqr\\x20stu", regex[2].replace);
STRCMP_EQUAL("pqr stu", regex[2].replace_escaped);
+ /* 3 regex replace with variables and escaped replace, command "s" */
+ WEE_CHECK_REGEX_SPLIT(
+ 0, 3,
+ "s/abc/def/var1 s/ghi/jkl/var2 s/mno/pqr\\x20stu/var3");
+ STRCMP_EQUAL("var1", regex[0].variable);
+ STRCMP_EQUAL("abc", regex[0].str_regex);
+ CHECK(regex[0].regex);
+ STRCMP_EQUAL("def", regex[0].replace);
+ STRCMP_EQUAL("def", regex[0].replace_escaped);
+ STRCMP_EQUAL("var2", regex[1].variable);
+ STRCMP_EQUAL("ghi", regex[1].str_regex);
+ CHECK(regex[1].regex);
+ STRCMP_EQUAL("jkl", regex[1].replace);
+ STRCMP_EQUAL("jkl", regex[1].replace_escaped);
+ STRCMP_EQUAL("var3", regex[2].variable);
+ STRCMP_EQUAL("mno", regex[2].str_regex);
+ CHECK(regex[2].regex);
+ STRCMP_EQUAL("pqr\\x20stu", regex[2].replace);
+ STRCMP_EQUAL("pqr stu", regex[2].replace_escaped);
+
+ /* 3 translate chars with variables, command "y" */
+ WEE_CHECK_REGEX_SPLIT(0, 3, "y/abc/ABC/var1 y/ghi/GHI/var2 y/mno/MNO/var3");
+ STRCMP_EQUAL("var1", regex[0].variable);
+ STRCMP_EQUAL("abc", regex[0].str_regex);
+ POINTERS_EQUAL(NULL, regex[0].regex);
+ STRCMP_EQUAL("ABC", regex[0].replace);
+ POINTERS_EQUAL(NULL, regex[0].replace_escaped);
+ STRCMP_EQUAL("var2", regex[1].variable);
+ STRCMP_EQUAL("ghi", regex[1].str_regex);
+ POINTERS_EQUAL(NULL, regex[1].regex);
+ STRCMP_EQUAL("GHI", regex[1].replace);
+ POINTERS_EQUAL(NULL, regex[1].replace_escaped);
+ STRCMP_EQUAL("var3", regex[2].variable);
+ STRCMP_EQUAL("mno", regex[2].str_regex);
+ POINTERS_EQUAL(NULL, regex[2].regex);
+ STRCMP_EQUAL("MNO", regex[2].replace);
+ POINTERS_EQUAL(NULL, regex[2].replace_escaped);
+
+ /* mixed regex replace and translate chars */
+ WEE_CHECK_REGEX_SPLIT(0, 2,
+ "s/abc/defghi/var1 y/${chars:x-z}/${chars:X-Z}/var2");
+ STRCMP_EQUAL("var1", regex[0].variable);
+ STRCMP_EQUAL("abc", regex[0].str_regex);
+ CHECK(regex[0].regex);
+ STRCMP_EQUAL("defghi", regex[0].replace);
+ STRCMP_EQUAL("defghi", regex[0].replace_escaped);
+ STRCMP_EQUAL("var2", regex[1].variable);
+ STRCMP_EQUAL("${chars:x-z}", regex[1].str_regex);
+ POINTERS_EQUAL(NULL, regex[1].regex);
+ STRCMP_EQUAL("${chars:X-Z}", regex[1].replace);
+ POINTERS_EQUAL(NULL, regex[1].replace_escaped);
+
trigger_regex_free (&regex_count, &regex);
}