Skip to content

Commit 8f42551

Browse files
committed
add test cases (ported from regexpp)
1 parent 2fe0f94 commit 8f42551

File tree

1 file changed

+177
-0
lines changed

1 file changed

+177
-0
lines changed

tests/invalid.rs

+177
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
// Ported from: https://github.com/mysticatea/regexpp
2+
//
3+
// Copyright (C) 2020 Quentin M. Kniep <[email protected]>
4+
// Distributed under terms of the MIT license.
5+
6+
extern crate regexpp_rs;
7+
8+
use regexpp_rs::{EcmaRegexValidator, EcmaVersion};
9+
10+
#[test]
11+
fn basic_invalid() {
12+
// source: https://github.com/mysticatea/regexpp/blob/master/test/fixtures/parser/literal/basic-invalid-2015-u.json
13+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2015);
14+
assert_ne!(validator.validate_pattern("(", true), Ok(()));
15+
assert_ne!(validator.validate_pattern("(?", true), Ok(()));
16+
assert_ne!(validator.validate_pattern("(?=", true), Ok(()));
17+
assert_ne!(validator.validate_pattern("(?=foo", true), Ok(()));
18+
assert_ne!(validator.validate_pattern("(?!", true), Ok(()));
19+
assert_ne!(validator.validate_pattern("(?!foo", true), Ok(()));
20+
assert_ne!(validator.validate_pattern("(?=a)*", true), Ok(()));
21+
assert_ne!(validator.validate_pattern("(?=a)+", true), Ok(()));
22+
assert_ne!(validator.validate_pattern("(?=a)?", true), Ok(()));
23+
assert_ne!(validator.validate_pattern("(?=a){", true), Ok(()));
24+
assert_ne!(validator.validate_pattern("(?=a){}", true), Ok(()));
25+
assert_ne!(validator.validate_pattern("(?=a){a}", true), Ok(()));
26+
assert_ne!(validator.validate_pattern("(?=a){1}", true), Ok(()));
27+
assert_ne!(validator.validate_pattern("(?=a){1,}", true), Ok(()));
28+
assert_ne!(validator.validate_pattern("(?=a){1,2}", true), Ok(()));
29+
assert_ne!(validator.validate_pattern("a{", true), Ok(()));
30+
assert_ne!(validator.validate_pattern("a{}", true), Ok(()));
31+
assert_ne!(validator.validate_pattern("a{a}", true), Ok(()));
32+
assert_ne!(validator.validate_pattern("a{1", true), Ok(()));
33+
assert_ne!(validator.validate_pattern("a{1,", true), Ok(()));
34+
assert_ne!(validator.validate_pattern("a{1,2", true), Ok(()));
35+
assert_ne!(validator.validate_pattern("a{2,1}", true), Ok(()));
36+
assert_ne!(validator.validate_pattern("a{2,1", true), Ok(()));
37+
assert_ne!(validator.validate_pattern("(a{2,1}", true), Ok(()));
38+
assert_ne!(validator.validate_pattern("a{?", true), Ok(()));
39+
assert_ne!(validator.validate_pattern("a{}?", true), Ok(()));
40+
assert_ne!(validator.validate_pattern("a{a}?", true), Ok(()));
41+
assert_ne!(validator.validate_pattern("a{1?", true), Ok(()));
42+
assert_ne!(validator.validate_pattern("a{1,?", true), Ok(()));
43+
assert_ne!(validator.validate_pattern("a{1,2?", true), Ok(()));
44+
assert_ne!(validator.validate_pattern("a{2,1}?", true), Ok(()));
45+
assert_ne!(validator.validate_pattern("a{2,1?", true), Ok(()));
46+
assert_ne!(validator.validate_pattern("(*)", true), Ok(()));
47+
assert_ne!(validator.validate_pattern("+", true), Ok(()));
48+
assert_ne!(validator.validate_pattern("?", true), Ok(()));
49+
assert_ne!(validator.validate_pattern(")", true), Ok(()));
50+
assert_ne!(validator.validate_pattern("[", true), Ok(()));
51+
assert_ne!(validator.validate_pattern("]", true), Ok(()));
52+
assert_ne!(validator.validate_pattern("{", true), Ok(()));
53+
assert_ne!(validator.validate_pattern("}", true), Ok(()));
54+
assert_ne!(validator.validate_pattern("^*", true), Ok(()));
55+
assert_ne!(validator.validate_pattern("$*", true), Ok(()));
56+
assert_ne!(validator.validate_pattern("${1,2", true), Ok(()));
57+
assert_ne!(validator.validate_pattern("${1,2}", true), Ok(()));
58+
assert_ne!(validator.validate_pattern("${2,1}", true), Ok(()));
59+
assert_ne!(validator.validate_pattern("\\1", true), Ok(()));
60+
assert_ne!(validator.validate_pattern("\\2(a)(", true), Ok(()));
61+
assert_ne!(validator.validate_pattern("(?:a)\\1", true), Ok(()));
62+
assert_ne!(validator.validate_pattern("(a)\\2", true), Ok(()));
63+
assert_ne!(validator.validate_pattern("(?:a)\\2", true), Ok(()));
64+
//assert_ne!(validator.validate_pattern("(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)\\11", true), Ok(()));
65+
assert_ne!(validator.validate_pattern("(?a", true), Ok(()));
66+
assert_ne!(validator.validate_pattern("(?a)", true), Ok(()));
67+
assert_ne!(validator.validate_pattern("(?:", true), Ok(()));
68+
assert_ne!(validator.validate_pattern("(?:a", true), Ok(()));
69+
assert_ne!(validator.validate_pattern("(:a", true), Ok(()));
70+
assert_ne!(validator.validate_pattern("\\c1", true), Ok(()));
71+
assert_ne!(validator.validate_pattern("\\c", true), Ok(()));
72+
assert_ne!(validator.validate_pattern("\\u", true), Ok(()));
73+
assert_ne!(validator.validate_pattern("\\u1", true), Ok(()));
74+
assert_ne!(validator.validate_pattern("\\u12", true), Ok(()));
75+
assert_ne!(validator.validate_pattern("\\u123", true), Ok(()));
76+
assert_ne!(validator.validate_pattern("\\u{", true), Ok(()));
77+
assert_ne!(validator.validate_pattern("\\u{z", true), Ok(()));
78+
assert_ne!(validator.validate_pattern("\\u{20", true), Ok(()));
79+
assert_ne!(validator.validate_pattern("\\u{110000}", true), Ok(()));
80+
assert_ne!(validator.validate_pattern("\\377", true), Ok(()));
81+
assert_ne!(validator.validate_pattern("\\400", true), Ok(()));
82+
assert_ne!(validator.validate_pattern("\\a", true), Ok(()));
83+
assert_ne!(validator.validate_pattern("[b-a]", true), Ok(()));
84+
assert_ne!(validator.validate_pattern("[a-b--+]", true), Ok(()));
85+
//assert_ne!(validator.validate_pattern("[\\c1]", true), Ok(()));
86+
//assert_ne!(validator.validate_pattern("[\\c]", true), Ok(()));
87+
assert_ne!(validator.validate_pattern("[\\x]", true), Ok(()));
88+
assert_ne!(validator.validate_pattern("[\\xz]", true), Ok(()));
89+
assert_ne!(validator.validate_pattern("[\\x1]", true), Ok(()));
90+
assert_ne!(validator.validate_pattern("[\\u]", true), Ok(()));
91+
assert_ne!(validator.validate_pattern("[\\u1]", true), Ok(()));
92+
assert_ne!(validator.validate_pattern("[\\u12]", true), Ok(()));
93+
assert_ne!(validator.validate_pattern("[\\u123]", true), Ok(()));
94+
assert_ne!(validator.validate_pattern("[\\u{]", true), Ok(()));
95+
assert_ne!(validator.validate_pattern("[\\u{z]", true), Ok(()));
96+
assert_ne!(validator.validate_pattern("[\\u{20]", true), Ok(()));
97+
assert_ne!(validator.validate_pattern("[\\u{110000}]", true), Ok(()));
98+
assert_ne!(validator.validate_pattern("[\\77]", true), Ok(()));
99+
assert_ne!(validator.validate_pattern("[\\377]", true), Ok(()));
100+
assert_ne!(validator.validate_pattern("[\\400]", true), Ok(()));
101+
assert_ne!(validator.validate_pattern("[\\a]", true), Ok(()));
102+
assert_ne!(validator.validate_pattern("[\\d-\\uFFFF]", true), Ok(()));
103+
//assert_ne!(validator.validate_pattern("[\\D-\\uFFFF]", true), Ok(()));
104+
//assert_ne!(validator.validate_pattern("[\\s-\\uFFFF]", true), Ok(()));
105+
//assert_ne!(validator.validate_pattern("[\\S-\\uFFFF]", true), Ok(()));
106+
//assert_ne!(validator.validate_pattern("[\\w-\\uFFFF]", true), Ok(()));
107+
//assert_ne!(validator.validate_pattern("[\\W-\\uFFFF]", true), Ok(()));
108+
//assert_ne!(validator.validate_pattern("[\\u0000-\\d]", true), Ok(()));
109+
//assert_ne!(validator.validate_pattern("[\\u0000-\\D]", true), Ok(()));
110+
//assert_ne!(validator.validate_pattern("[\\u0000-\\s]", true), Ok(()));
111+
//assert_ne!(validator.validate_pattern("[\\u0000-\\S]", true), Ok(()));
112+
//assert_ne!(validator.validate_pattern("[\\u0000-\\w]", true), Ok(()));
113+
//assert_ne!(validator.validate_pattern("[\\u0000-\\W]", true), Ok(()));
114+
assert_ne!(validator.validate_pattern("[\\u0001-\\u0000]", true), Ok(()));
115+
assert_ne!(validator.validate_pattern("[\\u{2}-\\u{1}]", true), Ok(()));
116+
assert_ne!(validator.validate_pattern("[\\u{2-\\u{1}]", true), Ok(()));
117+
assert_ne!(validator.validate_pattern("[\\a-\\z]", true), Ok(()));
118+
assert_ne!(validator.validate_pattern("[\\z-\\a]", true), Ok(()));
119+
assert_ne!(validator.validate_pattern("[0-9--+]", true), Ok(()));
120+
assert_ne!(validator.validate_pattern("[\\c-a]", true), Ok(()));
121+
assert_ne!(validator.validate_pattern("[\\c0-]", true), Ok(()));
122+
//assert_ne!(validator.validate_pattern("[\\c_]", true), Ok(()));
123+
assert_ne!(validator.validate_pattern("[🌸-🌷]", true), Ok(()));
124+
assert_ne!(validator.validate_pattern("[\\d][\\12-\\14]{1,}[^\\d]", true), Ok(()));
125+
}
126+
127+
#[test]
128+
fn lookbehind_assertion_invalid_2018() {
129+
// source: https://github.com/mysticatea/regexpp/blob/master/test/fixtures/parser/literal/lookbehind-assertion-invalid-2018.json
130+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
131+
assert_ne!(validator.validate_pattern("(?<a)", false), Ok(()));
132+
assert_ne!(validator.validate_pattern("(?<a)", true), Ok(()));
133+
assert_ne!(validator.validate_pattern("(?<=a)?", false), Ok(()));
134+
assert_ne!(validator.validate_pattern("(?<=a)?", true), Ok(()));
135+
assert_ne!(validator.validate_pattern("(?<=a)+", false), Ok(()));
136+
assert_ne!(validator.validate_pattern("(?<=a)+", true), Ok(()));
137+
assert_ne!(validator.validate_pattern("(?<=a)*", false), Ok(()));
138+
assert_ne!(validator.validate_pattern("(?<=a)*", true), Ok(()));
139+
assert_ne!(validator.validate_pattern("(?<=a){1}", false), Ok(()));
140+
assert_ne!(validator.validate_pattern("(?<=a){1}", true), Ok(()));
141+
assert_ne!(validator.validate_pattern("(?<!a)?", false), Ok(()));
142+
assert_ne!(validator.validate_pattern("(?<!a)?", true), Ok(()));
143+
assert_ne!(validator.validate_pattern("(?<!a)+", false), Ok(()));
144+
assert_ne!(validator.validate_pattern("(?<!a)+", true), Ok(()));
145+
assert_ne!(validator.validate_pattern("(?<!a)*", false), Ok(()));
146+
assert_ne!(validator.validate_pattern("(?<!a)*", true), Ok(()));
147+
assert_ne!(validator.validate_pattern("(?<!a){1}", false), Ok(()));
148+
assert_ne!(validator.validate_pattern("(?<!a){1}", true), Ok(()));
149+
}
150+
151+
#[test]
152+
fn named_capturing_group_invalid_2018() {
153+
// source: https://github.com/mysticatea/regexpp/blob/master/test/fixtures/parser/literal/named-capturing-group-invalid-2018.json
154+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
155+
assert_ne!(validator.validate_pattern("(?a", false), Ok(()));
156+
assert_ne!(validator.validate_pattern("(?a)", false), Ok(()));
157+
assert_ne!(validator.validate_pattern("(?<", false), Ok(()));
158+
assert_ne!(validator.validate_pattern("(?<)", false), Ok(()));
159+
assert_ne!(validator.validate_pattern("(?<a)", false), Ok(()));
160+
assert_ne!(validator.validate_pattern("\\k", true), Ok(()));
161+
assert_ne!(validator.validate_pattern("\\k<a>", true), Ok(()));
162+
assert_ne!(validator.validate_pattern("(?<a>a)\\k<", false), Ok(()));
163+
assert_ne!(validator.validate_pattern("(?<a>a)\\k<", true), Ok(()));
164+
//assert_ne!(validator.validate_pattern("(?<a>a)\\k<a", false), Ok(()));
165+
//assert_ne!(validator.validate_pattern("(?<a>a)\\k<a", true), Ok(()));
166+
assert_ne!(validator.validate_pattern("(?<a>a)\\2", true), Ok(()));
167+
assert_ne!(validator.validate_pattern("(?<a>a)\\k<b>", false), Ok(()));
168+
assert_ne!(validator.validate_pattern("(?<a>a)\\k<b>", true), Ok(()));
169+
assert_ne!(validator.validate_pattern("(?<a>a)(?<a>a)", false), Ok(()));
170+
assert_ne!(validator.validate_pattern("(?<a>a)(?<a>a)", true), Ok(()));
171+
assert_ne!(validator.validate_pattern("(?<a>a)(?<\\u{61}>a)", true), Ok(()));
172+
assert_ne!(validator.validate_pattern("(?<a>a)(?<\\u0061>a)", true), Ok(()));
173+
assert_ne!(validator.validate_pattern("(?<☀>a)\\k<☀>", true), Ok(()));
174+
assert_ne!(validator.validate_pattern("(?<\\u0020>a)\\k<\\u0020>", true), Ok(()));
175+
assert_ne!(validator.validate_pattern("(?<\\u0061\\u0062\\u0063>a)\\k<abd>", true), Ok(()));
176+
assert_ne!(validator.validate_pattern("(?<11>a)\\k<11>", true), Ok(()));
177+
}

0 commit comments

Comments
 (0)