1// Copyright JS Foundation and other contributors, http://js.foundation
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15var r;
16
17// Simple test cases
18r = new RegExp ("()");
19assert (r.exec ("a") == ",");
20
21r = new RegExp ("(a)");
22assert (r.exec ("a") == "a,a");
23
24r = new RegExp ("((a)b)c");
25assert (r.exec ("abc") == "abc,ab,a");
26
27r = new RegExp ("(a)*");
28assert (r.exec ("b")[0] == "");
29assert (r.exec ("b")[1] == undefined);
30assert (r.exec ("aaaa") == "aaaa,a");
31
32r = new RegExp ("(a)+");
33assert (r.exec ("aaaa") == "aaaa,a");
34
35r = new RegExp ("(a){4}");
36assert (r.exec ("aaaa") == "aaaa,a");
37
38r = new RegExp ("(a){1,2}");
39assert (r.exec ("a") == "a,a");
40assert (r.exec ("aa") == "aa,a");
41assert (r.exec ("aaaa") == "aa,a");
42
43r = new RegExp ("(a)?");
44assert (r.exec ("a") == "a,a");
45assert (r.exec ("b")[0] == "");
46assert (r.exec ("b")[1] == undefined);
47
48// Test greedy iterations
49r = new RegExp ("(a){1,3}a");
50assert (r.exec("aa") == "aa,a");
51
52r = new RegExp ("(a){1,3}a");
53assert (r.exec("aaa") == "aaa,a");
54
55r = new RegExp ("(a){1,3}");
56assert (r.exec("a") == "a,a");
57
58r = new RegExp ("(a){1,3}");
59assert (r.exec("aaa") == "aaa,a");
60
61r = new RegExp ("(a){1,3}");
62assert (r.exec("aaaa") == "aaa,a");
63
64r = new RegExp ("(a){1,5}");
65assert (r.exec("aaaa") == "aaaa,a");
66
67r = new RegExp ("(a|b){1,2}");
68assert (r.exec("a") == "a,a");
69
70r = new RegExp ("(a|b){1,3}a");
71assert (r.exec("aaa") == "aaa,a");
72
73r = new RegExp ("(a|b){1,3}a");
74assert (r.exec("aba") == "aba,b");
75
76r = new RegExp ("(a|b){1,3}a");
77assert (r.exec("b") == undefined);
78
79r = new RegExp ("(a|b){1,3}a");
80assert (r.exec("bbb") == undefined);
81
82r = new RegExp ("(a|b){1,3}");
83assert (r.exec("a") == "a,a");
84
85r = new RegExp ("(a|b){1,3}");
86assert (r.exec("aa") == "aa,a");
87
88r = new RegExp ("(a|b){1,3}");
89assert (r.exec("aaa") == "aaa,a");
90
91r = new RegExp ("(a|b){1,3}");
92assert (r.exec("ab") == "ab,b");
93
94r = new RegExp ("(a|b){1,3}");
95assert (r.exec("aba") == "aba,a");
96
97r = new RegExp ("(a|b){1,3}");
98assert (r.exec("bab") == "bab,b");
99
100r = new RegExp ("(a|b){1,3}");
101assert (r.exec("bbb") == "bbb,b");
102
103r = new RegExp ("(a|b){1,4}a");
104assert (r.exec("bbb") == undefined);
105
106r = new RegExp ("(a|b){1,4}");
107assert (r.exec("ab") == "ab,b");
108
109r = new RegExp ("(a|b){1,4}");
110assert (r.exec("aba") == "aba,a");
111
112r = new RegExp ("(a|b){1,4}");
113assert (r.exec("bbb") == "bbb,b");
114
115r = new RegExp ("(a|b){1,5}");
116assert (r.exec("aba") == "aba,a");
117
118r = new RegExp ("(a|b){1,5}");
119assert (r.exec("abab") == "abab,b");
120
121r = new RegExp ("(a|b){1,5}");
122assert (r.exec("bbb") == "bbb,b");
123
124r = new RegExp ("(aba)*");
125assert (r.exec("aaaa") == ",");
126
127r = new RegExp ("(aba)+");
128assert (r.exec("aaaa") == undefined);
129
130r = new RegExp ("(a|bb|c|d)");
131assert (r.exec("a") == "a,a");
132
133r = new RegExp ("(a|b)");
134assert (r.exec("a") == "a,a");
135
136r = new RegExp ("(a|b)+");
137assert (r.exec("aba") == "aba,a");
138
139r = new RegExp ("(a|b)");
140assert (r.exec("b") == "b,b");
141
142r = new RegExp ("(a)");
143assert (r.exec("a") == "a,a");
144
145r = new RegExp ("(a)*");
146assert (r.exec("a") == "a,a");
147
148r = new RegExp ("(a)*");
149assert (r.exec("aaaa") == "aaaa,a");
150
151r = new RegExp ("(a)+");
152assert (r.exec("aaaa") == "aaaa,a");
153
154r = new RegExp ("(a|aa){0,3}b");
155assert (r.exec("aaaaaab") == "aaaaaab,aa");
156
157r = new RegExp ("((a){2,3}){4}b");
158assert (r.exec("aaaaaaaab") == "aaaaaaaab,aa,a");
159
160// Test non-greedy iterations
161r = new RegExp ("(a)+?");
162assert (r.exec("aaaa") == "a,a");
163
164r = new RegExp ("(a)*?aa");
165assert (r.exec("aaaa") == "aa,");
166
167r = new RegExp ("(aaa|aa)*?aa");
168assert (r.exec("aaaa")[0] == "aa");
169assert (r.exec("aaaa")[1] == undefined);
170
171r = new RegExp ("(a)??aa");
172assert (r.exec("aaaa")[0] == "aa");
173assert (r.exec("aaaa")[1] == undefined);
174
175r = new RegExp ("(a)?aa");
176assert (r.exec("aaaa") == "aaa,a");
177
178r = new RegExp ("(()*?)*?a");
179assert (r.exec("ba")[0] == "a");
180assert (r.exec("ba")[1] == undefined);
181assert (r.exec("ba")[2] == undefined);
182
183r = new RegExp ("((bb?)*)*a");
184assert (r.exec("bbba") == "bbba,bbb,b");
185
186r = new RegExp ("((bb?)*)*bbb\\Ba");
187assert (r.exec("bbba")[0] == "bbba");
188assert (r.exec("bbba")[1] == undefined);
189assert (r.exec("bbba")[2] == undefined);
190
191r = new RegExp ("(a??){0,1}a");
192assert (r.exec("aa") == "aa,a");
193
194r = new RegExp ("(a?){0,1}a");
195assert (r.exec("aa") == "aa,a");
196
197r = new RegExp ("(a{0,1}?){0,1}a");
198assert (r.exec("aa") == "aa,a");
199
200r = new RegExp ("(|.)+");
201assert (JSON.stringify (r.exec("asdfgh")) === '["asdfgh","h"]');
202
203assert (JSON.stringify (/([^\W](){8,}?){5}/.exec("asdfghijk")) === '["asdfg","g",""]');
204assert (JSON.stringify (/(()+?(.+)|){3,}./u.exec("asdfghi")) === '["asdfghi","",null,null]')
205assert (JSON.stringify (/(()+?(.+)|){3,}?./u.exec("asdfghi")) === '["asdfghi","",null,null]')
206assert (JSON.stringify (/(?:()+?(.+)|){3,}./u.exec("asdfghi")) === '["asdfghi",null,null]')
207assert (JSON.stringify (/(?:()+?(.+)|){3,}?./u.exec("asdfghi")) === '["asdfghi",null,null]')
208