Skip to content

Commit 1288a77

Browse files
committed
add some more ECMA-262 tests
1 parent 8e267cb commit 1288a77

File tree

1 file changed

+63
-2
lines changed

1 file changed

+63
-2
lines changed

src/lib.rs

Lines changed: 63 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,39 @@ mod tests {
1111
use super::*;
1212

1313
#[test]
14-
fn validate_flags_test() {
14+
fn valid_flags() {
1515
let validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
1616
assert_eq!(validator.validate_flags("gimuys"), Ok(()));
17-
assert_eq!(validator.validate_flags("g"), Ok(()));
17+
assert_eq!(validator.validate_flags("gimuy"), Ok(()));
1818
assert_eq!(validator.validate_flags("gim"), Ok(()));
19+
assert_eq!(validator.validate_flags("g"), Ok(()));
20+
assert_eq!(validator.validate_flags("i"), Ok(()));
21+
assert_eq!(validator.validate_flags("m"), Ok(()));
22+
assert_eq!(validator.validate_flags("s"), Ok(()));
23+
assert_eq!(validator.validate_flags("u"), Ok(()));
24+
assert_eq!(validator.validate_flags("y"), Ok(()));
1925

26+
assert_eq!(validator.validate_flags("gy"), Ok(()));
27+
assert_eq!(validator.validate_flags("iy"), Ok(()));
28+
assert_eq!(validator.validate_flags("my"), Ok(()));
29+
assert_eq!(validator.validate_flags("uy"), Ok(()));
30+
}
31+
32+
#[test]
33+
fn duplicate_flags() {
34+
let validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
2035
assert_eq!(validator.validate_flags("gimgu"), Err("Duplicated flag g".to_string()));
36+
assert_eq!(validator.validate_flags("migg"), Err("Duplicated flag g".to_string()));
37+
assert_eq!(validator.validate_flags("ii"), Err("Duplicated flag i".to_string()));
38+
assert_eq!(validator.validate_flags("mm"), Err("Duplicated flag m".to_string()));
39+
assert_eq!(validator.validate_flags("ss"), Err("Duplicated flag s".to_string()));
40+
assert_eq!(validator.validate_flags("uu"), Err("Duplicated flag u".to_string()));
41+
assert_eq!(validator.validate_flags("yy"), Err("Duplicated flag y".to_string()));
42+
}
43+
44+
#[test]
45+
fn invalid_flags() {
46+
let validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
2147
assert_eq!(validator.validate_flags("gimuf"), Err("Invalid flag f".to_string()));
2248
assert_eq!(validator.validate_flags("a"), Err("Invalid flag a".to_string()));
2349
}
@@ -26,6 +52,9 @@ mod tests {
2652
fn validate_pattern_test() {
2753
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
2854
assert_eq!(validator.validate_pattern("[abc]de|fg", false), Ok(()));
55+
assert_eq!(validator.validate_pattern("[abc]de|fg", true), Ok(()));
56+
assert_eq!(validator.validate_pattern("^.$", false), Ok(()));
57+
assert_eq!(validator.validate_pattern("^.$", true), Ok(()));
2958

3059
assert_ne!(validator.validate_pattern("^[z-a]$", false), Ok(()));
3160
assert_ne!(validator.validate_pattern("0{2,1}", false), Ok(()));
@@ -46,4 +75,36 @@ mod tests {
4675
assert_ne!(validator.validate_pattern("**a", false), Ok(()));
4776
assert_ne!(validator.validate_pattern("+a", false), Ok(()));
4877
}
78+
79+
#[test]
80+
fn unicode_quantifier_without_atom() {
81+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
82+
assert_ne!(validator.validate_pattern("*", true), Ok(()));
83+
assert_ne!(validator.validate_pattern("+", true), Ok(()));
84+
assert_ne!(validator.validate_pattern("?", true), Ok(()));
85+
assert_ne!(validator.validate_pattern("{1}", true), Ok(()));
86+
assert_ne!(validator.validate_pattern("{1,}", true), Ok(()));
87+
assert_ne!(validator.validate_pattern("{1,2}", true), Ok(()));
88+
89+
assert_ne!(validator.validate_pattern("*?", true), Ok(()));
90+
assert_ne!(validator.validate_pattern("+?", true), Ok(()));
91+
assert_ne!(validator.validate_pattern("??", true), Ok(()));
92+
assert_ne!(validator.validate_pattern("{1}?", true), Ok(()));
93+
assert_ne!(validator.validate_pattern("{1,}?", true), Ok(()));
94+
assert_ne!(validator.validate_pattern("{1,2}?", true), Ok(()));
95+
}
96+
97+
#[test]
98+
fn unicode_incomplete_quantifier() {
99+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
100+
assert_ne!(validator.validate_pattern("a{", true), Ok(()));
101+
assert_ne!(validator.validate_pattern("a{1", true), Ok(()));
102+
assert_ne!(validator.validate_pattern("a{1,", true), Ok(()));
103+
assert_ne!(validator.validate_pattern("a{1,2", true), Ok(()));
104+
105+
assert_ne!(validator.validate_pattern("{", true), Ok(()));
106+
assert_ne!(validator.validate_pattern("{1", true), Ok(()));
107+
assert_ne!(validator.validate_pattern("{1,", true), Ok(()));
108+
assert_ne!(validator.validate_pattern("{1,2", true), Ok(()));
109+
}
49110
}

0 commit comments

Comments
 (0)