summaryrefslogtreecommitdiff
path: root/test/test_syntax.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_syntax.c')
-rw-r--r--test/test_syntax.c77
1 files changed, 72 insertions, 5 deletions
diff --git a/test/test_syntax.c b/test/test_syntax.c
index 06fef45..b501ccd 100644
--- a/test/test_syntax.c
+++ b/test/test_syntax.c
@@ -1,8 +1,7 @@
/*
* test_syntax.c
- * Copyright (c) 2019-2020 K.Kosako
+ * Copyright (c) 2019-2021 K.Kosako
*/
-#include "config.h"
#ifdef ONIG_ESCAPE_UCHAR_COLLISION
#undef ONIG_ESCAPE_UCHAR_COLLISION
#endif
@@ -139,7 +138,7 @@ static void e(char* pattern, char* str, int error_no)
xx(pattern, str, 0, 0, 0, 0, error_no);
}
-static int test_fixed_interval()
+static int test_reluctant_interval()
{
x2("a{1,3}?", "aaa", 0, 1);
x2("a{3}", "aaa", 0, 3);
@@ -148,6 +147,11 @@ static int test_fixed_interval()
x2("a{3,3}?", "aaa", 0, 3);
n("a{3,3}?", "aa");
+ return 0;
+}
+
+static int test_possessive_interval()
+{
x2("a{1,3}+", "aaaaaa", 0, 3);
x2("a{3}+", "aaaaaa", 0, 3);
x2("a{3,3}+", "aaaaaa", 0, 3);
@@ -209,6 +213,52 @@ static int test_look_behind()
return 0;
}
+static int test_python_option_ascii()
+{
+ x2("(?a)\\w", "a", 0, 1);
+ x2("\\w", "あ", 0, 3);
+ n("(?a)\\w", "あ");
+ x2("\\s", " ", 0, 3);
+ n("(?a)\\s", " ");
+ x2("\\d", "5", 0, 3);
+ n("(?a)\\d", "5");
+ x2("あ\\b ", "あ ", 0, 4);
+ n("(?a)あ\\b ", "あ ");
+ n("あ\\B ", "あ ");
+ x2("(?a)あ\\B ", "あ ", 0, 4);
+ x2("(?a)\\W", "あ", 0, 3);
+ n("\\W", "あ");
+ x2("(?a)\\S", " ", 0, 3);
+ n("\\S", " ");
+ x2("(?a)\\D", "5", 0, 3);
+ n("\\D", "5");
+
+ return 0;
+}
+
+static int test_python_z()
+{
+ x2("a\\Z", "a", 0, 1);
+ n("a\\Z", "a\n");
+ e("\\z", "a", ONIGERR_UNDEFINED_OPERATOR);
+
+ return 0;
+}
+
+static int test_python_single_multi()
+{
+ n(".", "\n");
+ x2("(?s).", "\n", 0, 1);
+
+ n("^abc", "\nabc");
+ x2("(?m)^abc", "\nabc", 1, 4);
+ n("abc$", "abc\ndef");
+ x2("abc$", "abc\n", 0, 3);
+ x2("(?m)abc$", "abc\ndef", 0, 3);
+
+ return 0;
+}
+
extern int main(int argc, char* argv[])
{
OnigEncoding use_encs[1];
@@ -222,7 +272,8 @@ extern int main(int argc, char* argv[])
Syntax = ONIG_SYNTAX_PERL;
- test_fixed_interval();
+ test_reluctant_interval();
+ test_possessive_interval();
test_isolated_option();
test_prec_read();
test_look_behind();
@@ -235,7 +286,8 @@ extern int main(int argc, char* argv[])
Syntax = ONIG_SYNTAX_JAVA;
- test_fixed_interval();
+ test_reluctant_interval();
+ test_possessive_interval();
test_isolated_option();
test_prec_read();
test_look_behind();
@@ -243,6 +295,21 @@ extern int main(int argc, char* argv[])
n("(?<!ab|b)c", "bbc");
n("(?<!b|ab)c", "bbc");
+ Syntax = ONIG_SYNTAX_PYTHON;
+
+ test_reluctant_interval();
+ test_python_option_ascii();
+ test_python_z();
+ test_python_single_multi();
+ x2("(?P<name>abc)", "abc", 0, 3);
+ x2("(?P<name>abc)(?P=name)", "abcabc", 0, 6);
+ x2("(?P<name>abc){0}(?P>name)", "abc", 0, 3);
+ x2("(?P<expr>[^()]+|\\((?P>expr)\\)){0}(?P>expr)", "((((xyz))))", 0, 11);
+ x2("\\u0041", "A", 0, 1);
+ x2("\\U00000041", "A", 0, 1);
+ e("\\U0041", "A", ONIGERR_INVALID_CODE_POINT_VALUE);
+
+
fprintf(stdout,
"\nRESULT SUCC: %4d, FAIL: %d, ERROR: %d (by Oniguruma %s)\n",
nsucc, nfail, nerror, onig_version());