Skip to content

Commit 65b6e55

Browse files
committed
port missing invalid test cases from regexpp
1 parent 2b52715 commit 65b6e55

File tree

1 file changed

+148
-0
lines changed

1 file changed

+148
-0
lines changed

tests/invalid.rs

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,90 @@ extern crate regexpp_rs;
77

88
use regexpp_rs::{EcmaRegexValidator, EcmaVersion};
99

10+
#[test]
11+
fn basic_invalid() {
12+
// source: https://github.com/mysticatea/regexpp/blob/master/test/fixtures/parser/literal/basic-invalid.json
13+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES5);
14+
assert_ne!(validator.validate_pattern("(", false), Ok(()));
15+
assert_ne!(validator.validate_pattern("(?", false), Ok(()));
16+
assert_ne!(validator.validate_pattern("(?=", false), Ok(()));
17+
assert_ne!(validator.validate_pattern("(?=foo", false), Ok(()));
18+
assert_ne!(validator.validate_pattern("(?!", false), Ok(()));
19+
assert_ne!(validator.validate_pattern("(?!foo", false), Ok(()));
20+
assert_ne!(validator.validate_pattern("a{2,1}", false), Ok(()));
21+
assert_ne!(validator.validate_pattern("(a{2,1}", false), Ok(()));
22+
assert_ne!(validator.validate_pattern("a{2,1}?", false), Ok(()));
23+
assert_ne!(validator.validate_pattern("(*)", false), Ok(()));
24+
assert_ne!(validator.validate_pattern("+", false), Ok(()));
25+
assert_ne!(validator.validate_pattern("?", false), Ok(()));
26+
assert_ne!(validator.validate_pattern(")", false), Ok(()));
27+
assert_ne!(validator.validate_pattern("[", false), Ok(()));
28+
assert_ne!(validator.validate_pattern("^*", false), Ok(()));
29+
assert_ne!(validator.validate_pattern("$*", false), Ok(()));
30+
assert_ne!(validator.validate_pattern("${1,2}", false), Ok(()));
31+
assert_ne!(validator.validate_pattern("${2,1}", false), Ok(()));
32+
assert_ne!(validator.validate_pattern("\\2(a)(", false), Ok(()));
33+
assert_ne!(validator.validate_pattern("(?a", false), Ok(()));
34+
assert_ne!(validator.validate_pattern("(?a)", false), Ok(()));
35+
assert_ne!(validator.validate_pattern("(?:", false), Ok(()));
36+
assert_ne!(validator.validate_pattern("(?:a", false), Ok(()));
37+
assert_ne!(validator.validate_pattern("(:a", false), Ok(()));
38+
assert_ne!(validator.validate_pattern("[b-a]", false), Ok(()));
39+
assert_ne!(validator.validate_pattern("[a-b--+]", false), Ok(()));
40+
assert_ne!(validator.validate_pattern("[\\u0001-\\u0000]", false), Ok(()));
41+
assert_ne!(validator.validate_pattern("[\\u{1}-\\u{2}]", false), Ok(()));
42+
assert_ne!(validator.validate_pattern("[\\u{2}-\\u{1}]", false), Ok(()));
43+
assert_ne!(validator.validate_pattern("[\\z-\\a]", false), Ok(()));
44+
assert_ne!(validator.validate_pattern("[0-9--+]", false), Ok(()));
45+
assert_ne!(validator.validate_pattern("[\\c-a]", false), Ok(()));
46+
assert_ne!(validator.validate_pattern("[🌷-🌸]", false), Ok(()));
47+
assert_ne!(validator.validate_pattern("[🌸-🌷]", false), Ok(()));
48+
assert_ne!(validator.validate_pattern("[\\uD834\\uDF06-\\uD834\\uDF08a-z]", false), Ok(()));
49+
}
50+
51+
#[test]
52+
fn basic_invalid_2015() {
53+
// source: https://github.com/mysticatea/regexpp/blob/master/test/fixtures/parser/literal/basic-invalid-2015.json
54+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2015);
55+
assert_ne!(validator.validate_pattern("(", false), Ok(()));
56+
assert_ne!(validator.validate_pattern("(?", false), Ok(()));
57+
assert_ne!(validator.validate_pattern("(?=", false), Ok(()));
58+
assert_ne!(validator.validate_pattern("(?=foo", false), Ok(()));
59+
assert_ne!(validator.validate_pattern("(?!", false), Ok(()));
60+
assert_ne!(validator.validate_pattern("(?!foo", false), Ok(()));
61+
assert_ne!(validator.validate_pattern("a{2,1}", false), Ok(()));
62+
assert_ne!(validator.validate_pattern("(a{2,1}", false), Ok(()));
63+
assert_ne!(validator.validate_pattern("a{2,1}?", false), Ok(()));
64+
assert_ne!(validator.validate_pattern("(*)", false), Ok(()));
65+
assert_ne!(validator.validate_pattern("+", false), Ok(()));
66+
assert_ne!(validator.validate_pattern("?", false), Ok(()));
67+
assert_ne!(validator.validate_pattern(")", false), Ok(()));
68+
assert_ne!(validator.validate_pattern("[", false), Ok(()));
69+
assert_ne!(validator.validate_pattern("^*", false), Ok(()));
70+
assert_ne!(validator.validate_pattern("$*", false), Ok(()));
71+
assert_ne!(validator.validate_pattern("${1,2}", false), Ok(()));
72+
assert_ne!(validator.validate_pattern("${2,1}", false), Ok(()));
73+
assert_ne!(validator.validate_pattern("\\2(a)(", false), Ok(()));
74+
assert_ne!(validator.validate_pattern("(?a", false), Ok(()));
75+
assert_ne!(validator.validate_pattern("(?a)", false), Ok(()));
76+
assert_ne!(validator.validate_pattern("(?:", false), Ok(()));
77+
assert_ne!(validator.validate_pattern("(?:a", false), Ok(()));
78+
assert_ne!(validator.validate_pattern("(:a", false), Ok(()));
79+
assert_ne!(validator.validate_pattern("[b-a]", false), Ok(()));
80+
assert_ne!(validator.validate_pattern("[a-b--+]", false), Ok(()));
81+
assert_ne!(validator.validate_pattern("[\\u0001-\\u0000]", false), Ok(()));
82+
assert_ne!(validator.validate_pattern("[\\u{1}-\\u{2}]", false), Ok(()));
83+
assert_ne!(validator.validate_pattern("[\\u{2}-\\u{1}]", false), Ok(()));
84+
assert_ne!(validator.validate_pattern("[\\z-\\a]", false), Ok(()));
85+
assert_ne!(validator.validate_pattern("[0-9--+]", false), Ok(()));
86+
assert_ne!(validator.validate_pattern("[\\c-a]", false), Ok(()));
87+
assert_ne!(validator.validate_pattern("[🌷-🌸]", false), Ok(()));
88+
assert_ne!(validator.validate_pattern("[\\u0000-🌸-\\u0000]", false), Ok(()));
89+
assert_ne!(validator.validate_pattern("[\\u0000-\\ud83c\\udf38-\\u0000]", false), Ok(()));
90+
assert_ne!(validator.validate_pattern("[🌸-🌷]", false), Ok(()));
91+
assert_ne!(validator.validate_pattern("[\\uD834\\uDF06-\\uD834\\uDF08a-z]", false), Ok(()));
92+
}
93+
1094
#[test]
1195
fn basic_invalid_2015_unicode() {
1296
// source: https://github.com/mysticatea/regexpp/blob/master/test/fixtures/parser/literal/basic-invalid-2015-u.json
@@ -124,6 +208,18 @@ fn basic_invalid_2015_unicode() {
124208
assert_ne!(validator.validate_pattern("[\\d][\\12-\\14]{1,}[^\\d]", true), Ok(()));
125209
}
126210

211+
#[test]
212+
fn lookbehind_assertion_invalid_2017() {
213+
// source: https://github.com/mysticatea/regexpp/blob/master/test/fixtures/parser/literal/lookbehind-assertion-invalid-2017.json
214+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2017);
215+
assert_ne!(validator.validate_pattern("(?<a)", false), Ok(()));
216+
assert_ne!(validator.validate_pattern("(?<a)", true), Ok(()));
217+
assert_ne!(validator.validate_pattern("(?<=a)", false), Ok(()));
218+
assert_ne!(validator.validate_pattern("(?<=a)", true), Ok(()));
219+
assert_ne!(validator.validate_pattern("(?<!a)", false), Ok(()));
220+
assert_ne!(validator.validate_pattern("(?<!a)", true), Ok(()));
221+
}
222+
127223
#[test]
128224
fn lookbehind_assertion_invalid_2018() {
129225
// source: https://github.com/mysticatea/regexpp/blob/master/test/fixtures/parser/literal/lookbehind-assertion-invalid-2018.json
@@ -148,6 +244,20 @@ fn lookbehind_assertion_invalid_2018() {
148244
assert_ne!(validator.validate_pattern("(?<!a){1}", true), Ok(()));
149245
}
150246

247+
#[test]
248+
fn named_capturing_group_invalid_2017() {
249+
// source: https://github.com/mysticatea/regexpp/blob/master/test/fixtures/parser/literal/named-capturing-group-invalid-2017.json
250+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2017);
251+
assert_ne!(validator.validate_pattern("\\k", true), Ok(()));
252+
assert_ne!(validator.validate_pattern("\\k<a>", true), Ok(()));
253+
assert_ne!(validator.validate_pattern("(?<a>a)\\k<", false), Ok(()));
254+
assert_ne!(validator.validate_pattern("(?<a>a)\\k<", true), Ok(()));
255+
assert_ne!(validator.validate_pattern("(?<a>a)\\k<a", false), Ok(()));
256+
assert_ne!(validator.validate_pattern("(?<a>a)\\k<a", true), Ok(()));
257+
assert_ne!(validator.validate_pattern("(?<a>a)\\k<a>", false), Ok(()));
258+
assert_ne!(validator.validate_pattern("(?<a>a)\\k<a>", true), Ok(()));
259+
}
260+
151261
#[test]
152262
fn named_capturing_group_invalid_2018() {
153263
// source: https://github.com/mysticatea/regexpp/blob/master/test/fixtures/parser/literal/named-capturing-group-invalid-2018.json
@@ -175,3 +285,41 @@ fn named_capturing_group_invalid_2018() {
175285
assert_ne!(validator.validate_pattern("(?<\\u0061\\u0062\\u0063>a)\\k<abd>", true), Ok(()));
176286
assert_ne!(validator.validate_pattern("(?<11>a)\\k<11>", true), Ok(()));
177287
}
288+
289+
#[test]
290+
fn unicode_group_names_invalid_2020() {
291+
// source: https://github.com/mysticatea/regexpp/blob/master/test/fixtures/parser/literal/unicode-group-names-invalid.json
292+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2020);
293+
assert_ne!(validator.validate_pattern("(?<\\ud83d\\ude80>.)", false), Ok(()));
294+
assert_ne!(validator.validate_pattern("(?<\\ud83d\\ude80>.)", true), Ok(()));
295+
assert_ne!(validator.validate_pattern("(?<\\u{1f680}>.)", false), Ok(()));
296+
assert_ne!(validator.validate_pattern("(?<\\u{1f680}>.)", true), Ok(()));
297+
assert_ne!(validator.validate_pattern("(?<🚀>.)", false), Ok(()));
298+
assert_ne!(validator.validate_pattern("(?<🚀>.)", true), Ok(()));
299+
}
300+
301+
#[test]
302+
fn unicode_property_escape_invalid_2017() {
303+
// source: https://github.com/mysticatea/regexpp/blob/master/test/fixtures/parser/literal/unicode-property-escape-invalid-2017.json
304+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2017);
305+
assert_ne!(validator.validate_pattern("\\p", true), Ok(()));
306+
assert_ne!(validator.validate_pattern("\\p{", true), Ok(()));
307+
assert_ne!(validator.validate_pattern("\\p{ASCII", true), Ok(()));
308+
assert_ne!(validator.validate_pattern("\\p{ASCII}", true), Ok(()));
309+
}
310+
311+
#[test]
312+
fn unicode_property_escape_invalid_2018() {
313+
// source: https://github.com/mysticatea/regexpp/blob/master/test/fixtures/parser/literal/unicode-property-escape-invalid-2018.json
314+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
315+
assert_ne!(validator.validate_pattern("\\p", true), Ok(()));
316+
assert_ne!(validator.validate_pattern("\\p{", true), Ok(()));
317+
assert_ne!(validator.validate_pattern("\\p{ASCII", true), Ok(()));
318+
assert_ne!(validator.validate_pattern("\\p{General_Category}", true), Ok(()));
319+
assert_ne!(validator.validate_pattern("\\p{General_Category=}", true), Ok(()));
320+
assert_ne!(validator.validate_pattern("\\p{General_Category", true), Ok(()));
321+
assert_ne!(validator.validate_pattern("\\p{General_Category=", true), Ok(()));
322+
assert_ne!(validator.validate_pattern("\\p{General_Category=Letter", true), Ok(()));
323+
assert_ne!(validator.validate_pattern("\\p{General_Category=Hiragana}", true), Ok(()));
324+
assert_ne!(validator.validate_pattern("[\\p{Script=Hiragana}-\\p{Script=Katakana}]", true), Ok(()));
325+
}

0 commit comments

Comments
 (0)