@@ -11,13 +11,39 @@ mod tests {
11
11
use super :: * ;
12
12
13
13
#[ test]
14
- fn validate_flags_test ( ) {
14
+ fn valid_flags ( ) {
15
15
let validator = EcmaRegexValidator :: new ( EcmaVersion :: ES2018 ) ;
16
16
assert_eq ! ( validator. validate_flags( "gimuys" ) , Ok ( ( ) ) ) ;
17
- assert_eq ! ( validator. validate_flags( "g " ) , Ok ( ( ) ) ) ;
17
+ assert_eq ! ( validator. validate_flags( "gimuy " ) , Ok ( ( ) ) ) ;
18
18
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 ( ( ) ) ) ;
19
25
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 ) ;
20
35
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 ) ;
21
47
assert_eq ! ( validator. validate_flags( "gimuf" ) , Err ( "Invalid flag f" . to_string( ) ) ) ;
22
48
assert_eq ! ( validator. validate_flags( "a" ) , Err ( "Invalid flag a" . to_string( ) ) ) ;
23
49
}
@@ -26,6 +52,9 @@ mod tests {
26
52
fn validate_pattern_test ( ) {
27
53
let mut validator = EcmaRegexValidator :: new ( EcmaVersion :: ES2018 ) ;
28
54
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 ( ( ) ) ) ;
29
58
30
59
assert_ne ! ( validator. validate_pattern( "^[z-a]$" , false ) , Ok ( ( ) ) ) ;
31
60
assert_ne ! ( validator. validate_pattern( "0{2,1}" , false ) , Ok ( ( ) ) ) ;
@@ -46,4 +75,36 @@ mod tests {
46
75
assert_ne ! ( validator. validate_pattern( "**a" , false ) , Ok ( ( ) ) ) ;
47
76
assert_ne ! ( validator. validate_pattern( "+a" , false ) , Ok ( ( ) ) ) ;
48
77
}
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
+ }
49
110
}
0 commit comments