1425bb815Sopenharmony_ci// Copyright JS Foundation and other contributors, http://js.foundation
2425bb815Sopenharmony_ci//
3425bb815Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License");
4425bb815Sopenharmony_ci// you may not use this file except in compliance with the License.
5425bb815Sopenharmony_ci// You may obtain a copy of the License at
6425bb815Sopenharmony_ci//
7425bb815Sopenharmony_ci//     http://www.apache.org/licenses/LICENSE-2.0
8425bb815Sopenharmony_ci//
9425bb815Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software
10425bb815Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS
11425bb815Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12425bb815Sopenharmony_ci// See the License for the specific language governing permissions and
13425bb815Sopenharmony_ci// limitations under the License.
14425bb815Sopenharmony_ci
15425bb815Sopenharmony_civar r;
16425bb815Sopenharmony_ci
17425bb815Sopenharmony_ci// Simple test cases
18425bb815Sopenharmony_cir = new RegExp ("()");
19425bb815Sopenharmony_ciassert (r.exec ("a") == ",");
20425bb815Sopenharmony_ci
21425bb815Sopenharmony_cir = new RegExp ("(a)");
22425bb815Sopenharmony_ciassert (r.exec ("a") == "a,a");
23425bb815Sopenharmony_ci
24425bb815Sopenharmony_cir = new RegExp ("((a)b)c");
25425bb815Sopenharmony_ciassert (r.exec ("abc") == "abc,ab,a");
26425bb815Sopenharmony_ci
27425bb815Sopenharmony_cir = new RegExp ("(a)*");
28425bb815Sopenharmony_ciassert (r.exec ("b")[0] == "");
29425bb815Sopenharmony_ciassert (r.exec ("b")[1] == undefined);
30425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa,a");
31425bb815Sopenharmony_ci
32425bb815Sopenharmony_cir = new RegExp ("(a)+");
33425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa,a");
34425bb815Sopenharmony_ci
35425bb815Sopenharmony_cir = new RegExp ("(a){4}");
36425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa,a");
37425bb815Sopenharmony_ci
38425bb815Sopenharmony_cir = new RegExp ("(a){1,2}");
39425bb815Sopenharmony_ciassert (r.exec ("a") == "a,a");
40425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa,a");
41425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aa,a");
42425bb815Sopenharmony_ci
43425bb815Sopenharmony_cir = new RegExp ("(a)?");
44425bb815Sopenharmony_ciassert (r.exec ("a") == "a,a");
45425bb815Sopenharmony_ciassert (r.exec ("b")[0] == "");
46425bb815Sopenharmony_ciassert (r.exec ("b")[1] == undefined);
47425bb815Sopenharmony_ci
48425bb815Sopenharmony_ci// Test greedy iterations
49425bb815Sopenharmony_cir = new RegExp ("(a){1,3}a");
50425bb815Sopenharmony_ciassert (r.exec("aa") == "aa,a");
51425bb815Sopenharmony_ci
52425bb815Sopenharmony_cir = new RegExp ("(a){1,3}a");
53425bb815Sopenharmony_ciassert (r.exec("aaa") == "aaa,a");
54425bb815Sopenharmony_ci
55425bb815Sopenharmony_cir = new RegExp ("(a){1,3}");
56425bb815Sopenharmony_ciassert (r.exec("a") == "a,a");
57425bb815Sopenharmony_ci
58425bb815Sopenharmony_cir = new RegExp ("(a){1,3}");
59425bb815Sopenharmony_ciassert (r.exec("aaa") == "aaa,a");
60425bb815Sopenharmony_ci
61425bb815Sopenharmony_cir = new RegExp ("(a){1,3}");
62425bb815Sopenharmony_ciassert (r.exec("aaaa") == "aaa,a");
63425bb815Sopenharmony_ci
64425bb815Sopenharmony_cir = new RegExp ("(a){1,5}");
65425bb815Sopenharmony_ciassert (r.exec("aaaa") == "aaaa,a");
66425bb815Sopenharmony_ci
67425bb815Sopenharmony_cir = new RegExp ("(a|b){1,2}");
68425bb815Sopenharmony_ciassert (r.exec("a") == "a,a");
69425bb815Sopenharmony_ci
70425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}a");
71425bb815Sopenharmony_ciassert (r.exec("aaa") == "aaa,a");
72425bb815Sopenharmony_ci
73425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}a");
74425bb815Sopenharmony_ciassert (r.exec("aba") == "aba,b");
75425bb815Sopenharmony_ci
76425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}a");
77425bb815Sopenharmony_ciassert (r.exec("b") == undefined);
78425bb815Sopenharmony_ci
79425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}a");
80425bb815Sopenharmony_ciassert (r.exec("bbb") == undefined);
81425bb815Sopenharmony_ci
82425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}");
83425bb815Sopenharmony_ciassert (r.exec("a") == "a,a");
84425bb815Sopenharmony_ci
85425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}");
86425bb815Sopenharmony_ciassert (r.exec("aa") == "aa,a");
87425bb815Sopenharmony_ci
88425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}");
89425bb815Sopenharmony_ciassert (r.exec("aaa") == "aaa,a");
90425bb815Sopenharmony_ci
91425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}");
92425bb815Sopenharmony_ciassert (r.exec("ab") == "ab,b");
93425bb815Sopenharmony_ci
94425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}");
95425bb815Sopenharmony_ciassert (r.exec("aba") == "aba,a");
96425bb815Sopenharmony_ci
97425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}");
98425bb815Sopenharmony_ciassert (r.exec("bab") == "bab,b");
99425bb815Sopenharmony_ci
100425bb815Sopenharmony_cir = new RegExp ("(a|b){1,3}");
101425bb815Sopenharmony_ciassert (r.exec("bbb") == "bbb,b");
102425bb815Sopenharmony_ci
103425bb815Sopenharmony_cir = new RegExp ("(a|b){1,4}a");
104425bb815Sopenharmony_ciassert (r.exec("bbb") == undefined);
105425bb815Sopenharmony_ci
106425bb815Sopenharmony_cir = new RegExp ("(a|b){1,4}");
107425bb815Sopenharmony_ciassert (r.exec("ab") == "ab,b");
108425bb815Sopenharmony_ci
109425bb815Sopenharmony_cir = new RegExp ("(a|b){1,4}");
110425bb815Sopenharmony_ciassert (r.exec("aba") == "aba,a");
111425bb815Sopenharmony_ci
112425bb815Sopenharmony_cir = new RegExp ("(a|b){1,4}");
113425bb815Sopenharmony_ciassert (r.exec("bbb") == "bbb,b");
114425bb815Sopenharmony_ci
115425bb815Sopenharmony_cir = new RegExp ("(a|b){1,5}");
116425bb815Sopenharmony_ciassert (r.exec("aba") == "aba,a");
117425bb815Sopenharmony_ci
118425bb815Sopenharmony_cir = new RegExp ("(a|b){1,5}");
119425bb815Sopenharmony_ciassert (r.exec("abab") == "abab,b");
120425bb815Sopenharmony_ci
121425bb815Sopenharmony_cir = new RegExp ("(a|b){1,5}");
122425bb815Sopenharmony_ciassert (r.exec("bbb") == "bbb,b");
123425bb815Sopenharmony_ci
124425bb815Sopenharmony_cir = new RegExp ("(aba)*");
125425bb815Sopenharmony_ciassert (r.exec("aaaa") == ",");
126425bb815Sopenharmony_ci
127425bb815Sopenharmony_cir = new RegExp ("(aba)+");
128425bb815Sopenharmony_ciassert (r.exec("aaaa") == undefined);
129425bb815Sopenharmony_ci
130425bb815Sopenharmony_cir = new RegExp ("(a|bb|c|d)");
131425bb815Sopenharmony_ciassert (r.exec("a") == "a,a");
132425bb815Sopenharmony_ci
133425bb815Sopenharmony_cir = new RegExp ("(a|b)");
134425bb815Sopenharmony_ciassert (r.exec("a") == "a,a");
135425bb815Sopenharmony_ci
136425bb815Sopenharmony_cir = new RegExp ("(a|b)+");
137425bb815Sopenharmony_ciassert (r.exec("aba") == "aba,a");
138425bb815Sopenharmony_ci
139425bb815Sopenharmony_cir = new RegExp ("(a|b)");
140425bb815Sopenharmony_ciassert (r.exec("b") == "b,b");
141425bb815Sopenharmony_ci
142425bb815Sopenharmony_cir = new RegExp ("(a)");
143425bb815Sopenharmony_ciassert (r.exec("a") == "a,a");
144425bb815Sopenharmony_ci
145425bb815Sopenharmony_cir = new RegExp ("(a)*");
146425bb815Sopenharmony_ciassert (r.exec("a") == "a,a");
147425bb815Sopenharmony_ci
148425bb815Sopenharmony_cir = new RegExp ("(a)*");
149425bb815Sopenharmony_ciassert (r.exec("aaaa") == "aaaa,a");
150425bb815Sopenharmony_ci
151425bb815Sopenharmony_cir = new RegExp ("(a)+");
152425bb815Sopenharmony_ciassert (r.exec("aaaa") == "aaaa,a");
153425bb815Sopenharmony_ci
154425bb815Sopenharmony_cir = new RegExp ("(a|aa){0,3}b");
155425bb815Sopenharmony_ciassert (r.exec("aaaaaab") == "aaaaaab,aa");
156425bb815Sopenharmony_ci
157425bb815Sopenharmony_cir = new RegExp ("((a){2,3}){4}b");
158425bb815Sopenharmony_ciassert (r.exec("aaaaaaaab") == "aaaaaaaab,aa,a");
159425bb815Sopenharmony_ci
160425bb815Sopenharmony_ci// Test non-greedy iterations
161425bb815Sopenharmony_cir = new RegExp ("(a)+?");
162425bb815Sopenharmony_ciassert (r.exec("aaaa") == "a,a");
163425bb815Sopenharmony_ci
164425bb815Sopenharmony_cir = new RegExp ("(a)*?aa");
165425bb815Sopenharmony_ciassert (r.exec("aaaa") == "aa,");
166425bb815Sopenharmony_ci
167425bb815Sopenharmony_cir = new RegExp ("(aaa|aa)*?aa");
168425bb815Sopenharmony_ciassert (r.exec("aaaa")[0] == "aa");
169425bb815Sopenharmony_ciassert (r.exec("aaaa")[1] == undefined);
170425bb815Sopenharmony_ci
171425bb815Sopenharmony_cir = new RegExp ("(a)??aa");
172425bb815Sopenharmony_ciassert (r.exec("aaaa")[0] == "aa");
173425bb815Sopenharmony_ciassert (r.exec("aaaa")[1] == undefined);
174425bb815Sopenharmony_ci
175425bb815Sopenharmony_cir = new RegExp ("(a)?aa");
176425bb815Sopenharmony_ciassert (r.exec("aaaa") == "aaa,a");
177425bb815Sopenharmony_ci
178425bb815Sopenharmony_cir = new RegExp ("(()*?)*?a");
179425bb815Sopenharmony_ciassert (r.exec("ba")[0] == "a");
180425bb815Sopenharmony_ciassert (r.exec("ba")[1] == undefined);
181425bb815Sopenharmony_ciassert (r.exec("ba")[2] == undefined);
182425bb815Sopenharmony_ci
183425bb815Sopenharmony_cir = new RegExp ("((bb?)*)*a");
184425bb815Sopenharmony_ciassert (r.exec("bbba") == "bbba,bbb,b");
185425bb815Sopenharmony_ci
186425bb815Sopenharmony_cir = new RegExp ("((bb?)*)*bbb\\Ba");
187425bb815Sopenharmony_ciassert (r.exec("bbba")[0] == "bbba");
188425bb815Sopenharmony_ciassert (r.exec("bbba")[1] == undefined);
189425bb815Sopenharmony_ciassert (r.exec("bbba")[2] == undefined);
190425bb815Sopenharmony_ci
191425bb815Sopenharmony_cir = new RegExp ("(a??){0,1}a");
192425bb815Sopenharmony_ciassert (r.exec("aa") == "aa,a");
193425bb815Sopenharmony_ci
194425bb815Sopenharmony_cir = new RegExp ("(a?){0,1}a");
195425bb815Sopenharmony_ciassert (r.exec("aa") == "aa,a");
196425bb815Sopenharmony_ci
197425bb815Sopenharmony_cir = new RegExp ("(a{0,1}?){0,1}a");
198425bb815Sopenharmony_ciassert (r.exec("aa") == "aa,a");
199425bb815Sopenharmony_ci
200425bb815Sopenharmony_cir = new RegExp ("(|.)+");
201425bb815Sopenharmony_ciassert (JSON.stringify (r.exec("asdfgh")) === '["asdfgh","h"]');
202425bb815Sopenharmony_ci
203425bb815Sopenharmony_ciassert (JSON.stringify (/([^\W](){8,}?){5}/.exec("asdfghijk")) === '["asdfg","g",""]');
204425bb815Sopenharmony_ciassert (JSON.stringify (/(()+?(.+)|){3,}./u.exec("asdfghi")) === '["asdfghi","",null,null]')
205425bb815Sopenharmony_ciassert (JSON.stringify (/(()+?(.+)|){3,}?./u.exec("asdfghi")) === '["asdfghi","",null,null]')
206425bb815Sopenharmony_ciassert (JSON.stringify (/(?:()+?(.+)|){3,}./u.exec("asdfghi")) === '["asdfghi",null,null]')
207425bb815Sopenharmony_ciassert (JSON.stringify (/(?:()+?(.+)|){3,}?./u.exec("asdfghi")) === '["asdfghi",null,null]')
208