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");
23425bb815Sopenharmony_ci
24425bb815Sopenharmony_cir = new RegExp ("(?:(?:a)b)c");
25425bb815Sopenharmony_ciassert (r.exec ("abc") == "abc");
26425bb815Sopenharmony_ci
27425bb815Sopenharmony_cir = new RegExp ("(?:a)*");
28425bb815Sopenharmony_ciassert (r.exec ("b") == "");
29425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa");
30425bb815Sopenharmony_ci
31425bb815Sopenharmony_cir = new RegExp ("(?:a)+");
32425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa");
33425bb815Sopenharmony_ci
34425bb815Sopenharmony_cir = new RegExp ("(?:a){4}");
35425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa");
36425bb815Sopenharmony_ci
37425bb815Sopenharmony_cir = new RegExp ("(?:a){1,2}");
38425bb815Sopenharmony_ciassert (r.exec ("a") == "a");
39425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa");
40425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aa");
41425bb815Sopenharmony_ci
42425bb815Sopenharmony_cir = new RegExp ("(?:a)?");
43425bb815Sopenharmony_ciassert (r.exec ("a") == "a");
44425bb815Sopenharmony_ciassert (r.exec ("b") == "");
45425bb815Sopenharmony_ci
46425bb815Sopenharmony_ci// Test greedy iterations
47425bb815Sopenharmony_cir = new RegExp ("(?:a){1,3}a");
48425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa");
49425bb815Sopenharmony_ci
50425bb815Sopenharmony_cir = new RegExp ("(?:a){1,3}a");
51425bb815Sopenharmony_ciassert (r.exec ("aaa") == "aaa");
52425bb815Sopenharmony_ci
53425bb815Sopenharmony_cir = new RegExp ("(?:a){1,3}");
54425bb815Sopenharmony_ciassert (r.exec ("a") == "a");
55425bb815Sopenharmony_ci
56425bb815Sopenharmony_cir = new RegExp ("(?:a){1,3}");
57425bb815Sopenharmony_ciassert (r.exec ("aaa") == "aaa");
58425bb815Sopenharmony_ci
59425bb815Sopenharmony_cir = new RegExp ("(?:a){1,3}");
60425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaa");
61425bb815Sopenharmony_ci
62425bb815Sopenharmony_cir = new RegExp ("(?:a){1,5}");
63425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa");
64425bb815Sopenharmony_ci
65425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,2}");
66425bb815Sopenharmony_ciassert (r.exec ("a") == "a");
67425bb815Sopenharmony_ci
68425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}a");
69425bb815Sopenharmony_ciassert (r.exec ("aaa") == "aaa");
70425bb815Sopenharmony_ci
71425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}a");
72425bb815Sopenharmony_ciassert (r.exec ("aba") == "aba");
73425bb815Sopenharmony_ci
74425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}a");
75425bb815Sopenharmony_ciassert (r.exec ("b") == undefined);
76425bb815Sopenharmony_ci
77425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}a");
78425bb815Sopenharmony_ciassert (r.exec ("bbb") == undefined);
79425bb815Sopenharmony_ci
80425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}");
81425bb815Sopenharmony_ciassert (r.exec ("a") == "a");
82425bb815Sopenharmony_ci
83425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}");
84425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa");
85425bb815Sopenharmony_ci
86425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}");
87425bb815Sopenharmony_ciassert (r.exec ("aaa") == "aaa");
88425bb815Sopenharmony_ci
89425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}");
90425bb815Sopenharmony_ciassert (r.exec ("ab") == "ab");
91425bb815Sopenharmony_ci
92425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}");
93425bb815Sopenharmony_ciassert (r.exec ("aba") == "aba");
94425bb815Sopenharmony_ci
95425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}");
96425bb815Sopenharmony_ciassert (r.exec ("bab") == "bab");
97425bb815Sopenharmony_ci
98425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,3}");
99425bb815Sopenharmony_ciassert (r.exec ("bbb") == "bbb");
100425bb815Sopenharmony_ci
101425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,4}a");
102425bb815Sopenharmony_ciassert (r.exec ("bbb") == undefined);
103425bb815Sopenharmony_ci
104425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,4}");
105425bb815Sopenharmony_ciassert (r.exec ("ab") == "ab");
106425bb815Sopenharmony_ci
107425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,4}");
108425bb815Sopenharmony_ciassert (r.exec ("aba") == "aba");
109425bb815Sopenharmony_ci
110425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,4}");
111425bb815Sopenharmony_ciassert (r.exec ("bbb") == "bbb");
112425bb815Sopenharmony_ci
113425bb815Sopenharmony_cir = new RegExp ("(?:a|b){1,5}");
114425bb815Sopenharmony_ciassert (r.exec ("abab") == "abab");
115425bb815Sopenharmony_ci
116425bb815Sopenharmony_cir = new RegExp ("(?:aba)*");
117425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "");
118425bb815Sopenharmony_ci
119425bb815Sopenharmony_cir = new RegExp ("(?:aba)+");
120425bb815Sopenharmony_ciassert (r.exec ("aaaa") == undefined);
121425bb815Sopenharmony_ci
122425bb815Sopenharmony_cir = new RegExp ("(?:a|bb|c|d)");
123425bb815Sopenharmony_ciassert (r.exec ("a") == "a");
124425bb815Sopenharmony_ci
125425bb815Sopenharmony_cir = new RegExp ("(?:a|b|c|d)");
126425bb815Sopenharmony_ciassert (r.exec ("") == undefined);
127425bb815Sopenharmony_ci
128425bb815Sopenharmony_cir = new RegExp ("(?:a|b|c|d)");
129425bb815Sopenharmony_ciassert (r.exec ("a") == "a");
130425bb815Sopenharmony_ci
131425bb815Sopenharmony_cir = new RegExp ("(?:a|b|c|d)");
132425bb815Sopenharmony_ciassert (r.exec ("b") == "b");
133425bb815Sopenharmony_ci
134425bb815Sopenharmony_cir = new RegExp ("(?:a|b|c|d)");
135425bb815Sopenharmony_ciassert (r.exec ("c") == "c");
136425bb815Sopenharmony_ci
137425bb815Sopenharmony_cir = new RegExp ("(?:a|b|c|d)");
138425bb815Sopenharmony_ciassert (r.exec ("d") == "d");
139425bb815Sopenharmony_ci
140425bb815Sopenharmony_cir = new RegExp ("(?:a|b)+");
141425bb815Sopenharmony_ciassert (r.exec ("aba") == "aba");
142425bb815Sopenharmony_ci
143425bb815Sopenharmony_cir = new RegExp ("(?:a|b)");
144425bb815Sopenharmony_ciassert (r.exec ("b") == "b");
145425bb815Sopenharmony_ci
146425bb815Sopenharmony_cir = new RegExp ("(?:a)");
147425bb815Sopenharmony_ciassert (r.exec ("a") == "a");
148425bb815Sopenharmony_ci
149425bb815Sopenharmony_cir = new RegExp ("(?:a)*");
150425bb815Sopenharmony_ciassert (r.exec ("a") == "a");
151425bb815Sopenharmony_ci
152425bb815Sopenharmony_cir = new RegExp ("(?:a)*");
153425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa");
154425bb815Sopenharmony_ci
155425bb815Sopenharmony_cir = new RegExp ("(?:a)+");
156425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaaa");
157425bb815Sopenharmony_ci
158425bb815Sopenharmony_cir = new RegExp ("(?:a)?aa");
159425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aaa");
160425bb815Sopenharmony_ci
161425bb815Sopenharmony_cir = new RegExp ("(?:a?){0,1}a");
162425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa");
163425bb815Sopenharmony_ci
164425bb815Sopenharmony_cir = new RegExp ("(?:a|aa){0,3}b");
165425bb815Sopenharmony_ciassert (r.exec ("aaaaaab") == "aaaaaab");
166425bb815Sopenharmony_ci
167425bb815Sopenharmony_cir = new RegExp ("(?:(?:a){2,3}){4}b");
168425bb815Sopenharmony_ciassert (r.exec ("aaaaaaaab") == "aaaaaaaab");
169425bb815Sopenharmony_ci
170425bb815Sopenharmony_ci// Test non-greedy iterations
171425bb815Sopenharmony_cir = new RegExp ("(?:a)+?");
172425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "a");
173425bb815Sopenharmony_ci
174425bb815Sopenharmony_cir = new RegExp ("(?:a)*?aa");
175425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aa");
176425bb815Sopenharmony_ci
177425bb815Sopenharmony_cir = new RegExp ("(?:aaa|aa)*?aa");
178425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aa");
179425bb815Sopenharmony_ci
180425bb815Sopenharmony_cir = new RegExp ("(?:a)??aa");
181425bb815Sopenharmony_ciassert (r.exec ("aaaa") == "aa");
182425bb815Sopenharmony_ci
183425bb815Sopenharmony_cir = new RegExp ("(?:(?:)*?)*?a");
184425bb815Sopenharmony_ciassert (r.exec ("ba") == "a");
185425bb815Sopenharmony_ci
186425bb815Sopenharmony_cir = new RegExp ("(?:(?:bb?)*)*a");
187425bb815Sopenharmony_ciassert (r.exec ("bbba") == "bbba");
188425bb815Sopenharmony_ci
189425bb815Sopenharmony_cir = new RegExp ("(?:(?:bb?)*)*bbb\\Ba");
190425bb815Sopenharmony_ciassert (r.exec ("bbba") == "bbba");
191425bb815Sopenharmony_ci
192425bb815Sopenharmony_cir = new RegExp ("(?:a??){0,1}a");
193425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa");
194425bb815Sopenharmony_ci
195425bb815Sopenharmony_cir = new RegExp ("(?:a{0,1}?){0,1}a");
196425bb815Sopenharmony_ciassert (r.exec ("aa") == "aa");
197