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 t;
16425bb815Sopenharmony_ci
17425bb815Sopenharmony_cit = new RegExp ("^alma$").exec("alma");
18425bb815Sopenharmony_ciassert (t == "alma");
19425bb815Sopenharmony_ci
20425bb815Sopenharmony_cit = new RegExp ("^alma$").exec("almaa");
21425bb815Sopenharmony_ciassert (t == undefined);
22425bb815Sopenharmony_ci
23425bb815Sopenharmony_cit = new RegExp ("^alma$").exec("aalma");
24425bb815Sopenharmony_ciassert (t == undefined);
25425bb815Sopenharmony_ci
26425bb815Sopenharmony_cit = new RegExp ("^alma").exec("alma");
27425bb815Sopenharmony_ciassert (t == "alma");
28425bb815Sopenharmony_ci
29425bb815Sopenharmony_cit = new RegExp ("^alma").exec("almaa");
30425bb815Sopenharmony_ciassert (t == "alma");
31425bb815Sopenharmony_ci
32425bb815Sopenharmony_cit = new RegExp ("^alma").exec("aalma");
33425bb815Sopenharmony_ciassert (t == undefined);
34425bb815Sopenharmony_ci
35425bb815Sopenharmony_cit = new RegExp ("alma$").exec("alma");
36425bb815Sopenharmony_ciassert (t == "alma");
37425bb815Sopenharmony_ci
38425bb815Sopenharmony_cit = new RegExp ("alma$").exec("almaa");
39425bb815Sopenharmony_ciassert (t == undefined);
40425bb815Sopenharmony_ci
41425bb815Sopenharmony_cit = new RegExp ("alma$").exec("aalma");
42425bb815Sopenharmony_ciassert (t == "alma");
43425bb815Sopenharmony_ci
44425bb815Sopenharmony_cit = new RegExp ("\\bis\\b").exec("This island is beautiful");
45425bb815Sopenharmony_ciassert (t == "is");
46425bb815Sopenharmony_ci
47425bb815Sopenharmony_cit = new RegExp ("\\Bis\\B").exec("This island is beautiful");
48425bb815Sopenharmony_ciassert (t == undefined);
49425bb815Sopenharmony_ci
50425bb815Sopenharmony_cit = new RegExp ("\\Bis").exec("This island is beautiful");
51425bb815Sopenharmony_ciassert (t == "is");
52425bb815Sopenharmony_ci
53425bb815Sopenharmony_cit = new RegExp ("is\\B").exec("This island is beautiful");
54425bb815Sopenharmony_ciassert (t == "is");
55425bb815Sopenharmony_ci
56425bb815Sopenharmony_cit = new RegExp ("\\Bis\\b").exec("This island is beautiful");
57425bb815Sopenharmony_ciassert (t == "is");
58425bb815Sopenharmony_ci
59425bb815Sopenharmony_cit = new RegExp ("\\bis\\B").exec("This island is beautiful");
60425bb815Sopenharmony_ciassert (t == "is");
61425bb815Sopenharmony_ci
62425bb815Sopenharmony_cit = new RegExp ("al(?=(ma))").exec("al");
63425bb815Sopenharmony_ciassert (t == undefined);
64425bb815Sopenharmony_ci
65425bb815Sopenharmony_cit = new RegExp ("al(?!(ma))").exec("ala");
66425bb815Sopenharmony_ciassert (t[0] == "al");
67425bb815Sopenharmony_ciassert (t[1] == undefined);
68425bb815Sopenharmony_ci
69425bb815Sopenharmony_cit = new RegExp ("al(?=(ma))").exec("alma");
70425bb815Sopenharmony_ciassert (t[0] == "al");
71425bb815Sopenharmony_ciassert (t[1] == "ma");
72425bb815Sopenharmony_ci
73425bb815Sopenharmony_cit = new RegExp ("al(?=(ma))").exec("almama");
74425bb815Sopenharmony_ciassert (t[0] == "al");
75425bb815Sopenharmony_ciassert (t[1] == "ma");
76425bb815Sopenharmony_ci
77425bb815Sopenharmony_cit = new RegExp ("(al)(?=(ma))ma").exec("al");
78425bb815Sopenharmony_ciassert (t == undefined);
79425bb815Sopenharmony_ci
80425bb815Sopenharmony_cit = new RegExp ("(al)(?=(ma)ma)").exec("al");
81425bb815Sopenharmony_ciassert (t == undefined);
82425bb815Sopenharmony_ci
83425bb815Sopenharmony_cit = new RegExp ("al(?=(ma))*ma").exec("alma");
84425bb815Sopenharmony_ciassert (t[0] == "alma");
85425bb815Sopenharmony_ciassert (t[1] == undefined);
86425bb815Sopenharmony_ci
87425bb815Sopenharmony_cit = new RegExp ("al(?!(ma))*ma").exec("alma");
88425bb815Sopenharmony_ciassert (t[0] == "alma");
89425bb815Sopenharmony_ciassert (t[1] == undefined);
90425bb815Sopenharmony_ci
91425bb815Sopenharmony_cit = new RegExp ("al(?=(ma))ma").exec("alma");
92425bb815Sopenharmony_ciassert (t[0] == "alma");
93425bb815Sopenharmony_ciassert (t[1] == "ma");
94425bb815Sopenharmony_ci
95425bb815Sopenharmony_cit = new RegExp ("al(?!(ma))ma").exec("alma");
96425bb815Sopenharmony_ciassert (t == undefined);
97425bb815Sopenharmony_ci
98425bb815Sopenharmony_cit = new RegExp ("(al)(?=(ma))ma").exec("almama");
99425bb815Sopenharmony_cit = new RegExp ("(al)(?=(ma)ma)").exec("almama");
100425bb815Sopenharmony_ci
101425bb815Sopenharmony_cit = new RegExp ("al(?=(ma))ma").exec("almama");
102425bb815Sopenharmony_ciassert (t[0] == "alma");
103425bb815Sopenharmony_ciassert (t[1] == "ma");
104425bb815Sopenharmony_ci
105425bb815Sopenharmony_cit = new RegExp ("al(?=(ma)ma)").exec("almama");
106425bb815Sopenharmony_ciassert (t[0] == "al");
107425bb815Sopenharmony_ciassert (t[1] == "ma");
108425bb815Sopenharmony_ci
109425bb815Sopenharmony_cit = new RegExp ("al(?!(ma))ma").exec("almama");
110425bb815Sopenharmony_ciassert (t == undefined);
111425bb815Sopenharmony_ci
112425bb815Sopenharmony_cit = new RegExp ("a(?=(a)(a))aab|aaac").exec("aaac");
113425bb815Sopenharmony_cit = new RegExp ("a(?=(a)(a))aab|aaac").exec("aaab");
114425bb815Sopenharmony_ci
115425bb815Sopenharmony_cit = new RegExp ("(?!(a)b)|ab").exec("ab");
116425bb815Sopenharmony_ciassert (t[0] == "ab");
117425bb815Sopenharmony_ciassert (t[1] == undefined);
118425bb815Sopenharmony_ci
119425bb815Sopenharmony_cit = new RegExp ("(?=(a)b)|ab").exec("ab");
120425bb815Sopenharmony_ciassert (t[0] == "");
121425bb815Sopenharmony_ciassert (t[1] == "a");
122425bb815Sopenharmony_ci
123425bb815Sopenharmony_cit = new RegExp ("(?=a|.)Dt").exec("Dt");
124425bb815Sopenharmony_ciassert (t == "Dt");
125425bb815Sopenharmony_ci
126425bb815Sopenharmony_cit = new RegExp ("(?=.|a)Dt").exec("Dt");
127425bb815Sopenharmony_ciassert (t == "Dt");
128425bb815Sopenharmony_ci
129425bb815Sopenharmony_cit = new RegExp ("(?=a|b)Dt").exec("Dt");
130425bb815Sopenharmony_ciassert (t == undefined);
131425bb815Sopenharmony_ci
132425bb815Sopenharmony_cit = new RegExp ("(?=.|P)").exec("a");
133425bb815Sopenharmony_ciassert (t == "");
134425bb815Sopenharmony_ci
135425bb815Sopenharmony_cit = new RegExp ("(?=.)").exec("a");
136425bb815Sopenharmony_ciassert (t == "");
137425bb815Sopenharmony_ci
138425bb815Sopenharmony_cit = new RegExp ("(?!a|.)Dt").exec("Dt");
139425bb815Sopenharmony_ciassert (t == undefined);
140425bb815Sopenharmony_ci
141425bb815Sopenharmony_cit = new RegExp ("(?!.|a)Dt").exec("Dt");
142425bb815Sopenharmony_ciassert (t == undefined);
143425bb815Sopenharmony_ci
144425bb815Sopenharmony_cit = new RegExp ("(?!a|b)Dt").exec("Dt");
145425bb815Sopenharmony_ciassert (t == "Dt");
146425bb815Sopenharmony_ci
147425bb815Sopenharmony_cit = new RegExp ("(?!.|P)").exec("a");
148425bb815Sopenharmony_ciassert (t == "");
149425bb815Sopenharmony_ci
150425bb815Sopenharmony_cit = new RegExp ("(?!.)").exec("a");
151425bb815Sopenharmony_ciassert (t == "");
152425bb815Sopenharmony_ci
153425bb815Sopenharmony_cit = new RegExp ("abc","g");
154425bb815Sopenharmony_cit.lastIndex = {toString: function () { return "4"}};
155425bb815Sopenharmony_civar result = t.exec("abc   abc");
156425bb815Sopenharmony_ciassert(result[0] === "abc");
157425bb815Sopenharmony_ciassert(result.index === 6);
158425bb815Sopenharmony_ci
159425bb815Sopenharmony_cit = new RegExp ("abc","g");
160425bb815Sopenharmony_cit.lastIndex = {valueOf: function () { return "4"}};
161425bb815Sopenharmony_civar result = t.exec("abc   abc");
162425bb815Sopenharmony_ciassert(result[0] === "abc");
163425bb815Sopenharmony_ciassert(result.index === 6);
164425bb815Sopenharmony_ci
165425bb815Sopenharmony_cit = new RegExp ("abc","g");
166425bb815Sopenharmony_cit.lastIndex = "2"
167425bb815Sopenharmony_civar result = t.exec("abc   abc");
168425bb815Sopenharmony_ciassert(result[0] === "abc");
169425bb815Sopenharmony_ciassert(result.index === 6);
170