Skip to content

Commit c8b60a2

Browse files
committed
add ECMA-262 tests for character range order
1 parent bf45279 commit c8b60a2

File tree

1 file changed

+64
-6
lines changed

1 file changed

+64
-6
lines changed

src/lib.rs

Lines changed: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ mod tests {
3434
let validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
3535
assert_eq!(validator.validate_flags("gimgu"), Err("Duplicated flag g".to_string()));
3636
assert_eq!(validator.validate_flags("migg"), Err("Duplicated flag g".to_string()));
37+
assert_eq!(validator.validate_flags("igi"), Err("Duplicated flag i".to_string()));
38+
3739
assert_eq!(validator.validate_flags("ii"), Err("Duplicated flag i".to_string()));
3840
assert_eq!(validator.validate_flags("mm"), Err("Duplicated flag m".to_string()));
3941
assert_eq!(validator.validate_flags("ss"), Err("Duplicated flag s".to_string()));
@@ -45,29 +47,26 @@ mod tests {
4547
fn invalid_flags() {
4648
let validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
4749
assert_eq!(validator.validate_flags("gimuf"), Err("Invalid flag f".to_string()));
50+
assert_eq!(validator.validate_flags("gI"), Err("Invalid flag I".to_string()));
4851
assert_eq!(validator.validate_flags("a"), Err("Invalid flag a".to_string()));
52+
assert_eq!(validator.validate_flags("1"), Err("Invalid flag 1".to_string()));
4953
}
5054

5155
#[test]
5256
fn validate_pattern_test() {
5357
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
58+
assert_eq!(validator.validate_pattern("", false), Ok(()));
5459
assert_eq!(validator.validate_pattern("[abc]de|fg", false), Ok(()));
5560
assert_eq!(validator.validate_pattern("[abc]de|fg", true), Ok(()));
5661
assert_eq!(validator.validate_pattern("^.$", false), Ok(()));
5762
assert_eq!(validator.validate_pattern("^.$", true), Ok(()));
5863
assert_eq!(validator.validate_pattern("foo\\[bar", false), Ok(()));
5964
assert_eq!(validator.validate_pattern("foo\\[bar", true), Ok(()));
6065

61-
assert_ne!(validator.validate_pattern("^[z-a]$", false), Ok(()));
62-
assert_ne!(validator.validate_pattern("0{2,1}", false), Ok(()));
6366
assert_ne!(validator.validate_pattern("\\", false), Ok(()));
6467
assert_ne!(validator.validate_pattern("a**", false), Ok(()));
6568
assert_ne!(validator.validate_pattern("++a", false), Ok(()));
6669
assert_ne!(validator.validate_pattern("?a", false), Ok(()));
67-
assert_ne!(validator.validate_pattern("x{1}{1,}", false), Ok(()));
68-
assert_ne!(validator.validate_pattern("x{1,2}{1}", false), Ok(()));
69-
assert_ne!(validator.validate_pattern("x{1,}{1}", false), Ok(()));
70-
assert_ne!(validator.validate_pattern("x{0,1}{1,}", false), Ok(()));
7170
assert_ne!(validator.validate_pattern("a***", false), Ok(()));
7271
assert_ne!(validator.validate_pattern("a++", false), Ok(()));
7372
assert_ne!(validator.validate_pattern("a+++", false), Ok(()));
@@ -76,6 +75,65 @@ mod tests {
7675
assert_ne!(validator.validate_pattern("*a", false), Ok(()));
7776
assert_ne!(validator.validate_pattern("**a", false), Ok(()));
7877
assert_ne!(validator.validate_pattern("+a", false), Ok(()));
78+
assert_ne!(validator.validate_pattern("[{-z]", false), Ok(()));
79+
assert_ne!(validator.validate_pattern("[a--z]", false), Ok(()));
80+
81+
assert_ne!(validator.validate_pattern("0{2,1}", false), Ok(()));
82+
assert_ne!(validator.validate_pattern("x{1}{1,}", false), Ok(()));
83+
assert_ne!(validator.validate_pattern("x{1,2}{1}", false), Ok(()));
84+
assert_ne!(validator.validate_pattern("x{1,}{1}", false), Ok(()));
85+
assert_ne!(validator.validate_pattern("x{0,1}{1,}", false), Ok(()));
86+
87+
assert_ne!(validator.validate_pattern("\\1(\\P{P\0[}()/", true), Ok(()));
88+
}
89+
90+
#[test]
91+
fn character_range_order() {
92+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
93+
assert_ne!(validator.validate_pattern("^[z-a]$", false), Ok(()));
94+
assert_ne!(validator.validate_pattern("[b-ac-e]", false), Ok(()));
95+
assert_ne!(validator.validate_pattern("[c-eb-a]", false), Ok(()));
96+
assert_ne!(validator.validate_pattern("[a-dc-b]", false), Ok(()));
97+
98+
assert_ne!(validator.validate_pattern("[\\10b-G]", false), Ok(()));
99+
assert_ne!(validator.validate_pattern("[\\ad-G]", false), Ok(()));
100+
assert_ne!(validator.validate_pattern("[\\bd-G]", false), Ok(()));
101+
assert_ne!(validator.validate_pattern("[\\Bd-G]", false), Ok(()));
102+
assert_ne!(validator.validate_pattern("[\\db-G]", false), Ok(()));
103+
assert_ne!(validator.validate_pattern("[\\Db-G]", false), Ok(()));
104+
assert_ne!(validator.validate_pattern("[\\sb-G]", false), Ok(()));
105+
assert_ne!(validator.validate_pattern("[\\Sb-G]", false), Ok(()));
106+
assert_ne!(validator.validate_pattern("[\\wb-G]", false), Ok(()));
107+
assert_ne!(validator.validate_pattern("[\\Wb-G]", false), Ok(()));
108+
assert_ne!(validator.validate_pattern("[\\0b-G]", false), Ok(()));
109+
assert_ne!(validator.validate_pattern("[\\td-G]", false), Ok(()));
110+
assert_ne!(validator.validate_pattern("[\\nd-G]", false), Ok(()));
111+
assert_ne!(validator.validate_pattern("[\\vd-G]", false), Ok(()));
112+
assert_ne!(validator.validate_pattern("[\\fd-G]", false), Ok(()));
113+
assert_ne!(validator.validate_pattern("[\\rd-G]", false), Ok(()));
114+
assert_ne!(validator.validate_pattern("[\\c0001d-G]", false), Ok(()));
115+
assert_ne!(validator.validate_pattern("[\\x0061d-G]", false), Ok(()));
116+
assert_ne!(validator.validate_pattern("[\\u0061d-G]", false), Ok(()));
117+
118+
assert_ne!(validator.validate_pattern("[b-G\\10]", false), Ok(()));
119+
assert_ne!(validator.validate_pattern("[d-G\\a]", false), Ok(()));
120+
assert_ne!(validator.validate_pattern("[d-G\\b]", false), Ok(()));
121+
assert_ne!(validator.validate_pattern("[d-G\\B]", false), Ok(()));
122+
assert_ne!(validator.validate_pattern("[b-G\\d]", false), Ok(()));
123+
assert_ne!(validator.validate_pattern("[b-G\\D]", false), Ok(()));
124+
assert_ne!(validator.validate_pattern("[b-G\\s]", false), Ok(()));
125+
assert_ne!(validator.validate_pattern("[b-G\\S]", false), Ok(()));
126+
assert_ne!(validator.validate_pattern("[b-G\\w]", false), Ok(()));
127+
assert_ne!(validator.validate_pattern("[b-G\\W]", false), Ok(()));
128+
assert_ne!(validator.validate_pattern("[b-G\\0]", false), Ok(()));
129+
assert_ne!(validator.validate_pattern("[d-G\\t]", false), Ok(()));
130+
assert_ne!(validator.validate_pattern("[d-G\\n]", false), Ok(()));
131+
assert_ne!(validator.validate_pattern("[d-G\\v]", false), Ok(()));
132+
assert_ne!(validator.validate_pattern("[d-G\\f]", false), Ok(()));
133+
assert_ne!(validator.validate_pattern("[d-G\\r]", false), Ok(()));
134+
assert_ne!(validator.validate_pattern("[d-G\\c0001]", false), Ok(()));
135+
assert_ne!(validator.validate_pattern("[d-G\\x0061]", false), Ok(()));
136+
assert_ne!(validator.validate_pattern("[d-G\\u0061]", false), Ok(()));
79137
}
80138

81139
#[test]

0 commit comments

Comments
 (0)