1fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
2fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org//
4fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// Redistribution and use in source and binary forms, with or without
5fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// modification, are permitted provided that the following conditions
6fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// are met:
7fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// 1.  Redistributions of source code must retain the above copyright
8fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org//     notice, this list of conditions and the following disclaimer.
9fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// 2.  Redistributions in binary form must reproduce the above copyright
10fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org//     notice, this list of conditions and the following disclaimer in the
11fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org//     documentation and/or other materials provided with the distribution.
12fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org//
13fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
24fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgdescription("This page tests handling of parentheses subexpressions.");
25fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
26fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar regexp1 = /.*blah.*/;
27fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp1.exec('test')");
28fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp1.exec('blah')", "['blah']");
29fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp1.exec('1blah')", "['1blah']");
30fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp1.exec('blah1')", "['blah1']");
31fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp1.exec('blah blah blah')", "['blah blah blah']");
32fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp1.exec('blah\\nsecond')", "['blah']");
33fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp1.exec('first\\nblah')", "['blah']");
34fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp1.exec('first\\nblah\\nthird')", "['blah']");
35fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp1.exec('first\\nblah2\\nblah3')", "['blah2']");
36fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
37fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar regexp2 = /^.*blah.*/;
38fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp2.exec('test')");
39fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp2.exec('blah')", "['blah']");
40fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp2.exec('1blah')", "['1blah']");
41fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp2.exec('blah1')", "['blah1']");
42fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp2.exec('blah blah blah')", "['blah blah blah']");
43fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp2.exec('blah\\nsecond')", "['blah']");
44fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp2.exec('first\\nblah')");
45fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp2.exec('first\\nblah\\nthird')");
46fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp2.exec('first\\nblah2\\nblah3')");
47fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
48fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar regexp3 = /.*blah.*$/;
49fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp3.exec('test')");
50fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp3.exec('blah')", "['blah']");
51fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp3.exec('1blah')", "['1blah']");
52fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp3.exec('blah1')", "['blah1']");
53fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp3.exec('blah blah blah')", "['blah blah blah']");
54fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp3.exec('blah\\nsecond')");
55fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp3.exec('first\\nblah')", "['blah']");
56fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp3.exec('first\\nblah\\nthird')");
57fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp3.exec('first\\nblah2\\nblah3')", "['blah3']");
58fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
59fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar regexp4 = /^.*blah.*$/;
60fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp4.exec('test')");
61fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp4.exec('blah')", "['blah']");
62fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp4.exec('1blah')", "['1blah']");
63fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp4.exec('blah1')", "['blah1']");
64fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp4.exec('blah blah blah')", "['blah blah blah']");
65fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp4.exec('blah\\nsecond')");
66fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp4.exec('first\\nblah')");
67fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp4.exec('first\\nblah\\nthird')");
68fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp4.exec('first\\nblah2\\nblah3')");
69fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
70fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar regexp5 = /.*?blah.*/;
71fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp5.exec('test')");
72fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp5.exec('blah')", "['blah']");
73fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp5.exec('1blah')", "['1blah']");
74fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp5.exec('blah1')", "['blah1']");
75fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp5.exec('blah blah blah')", "['blah blah blah']");
76fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp5.exec('blah\\nsecond')", "['blah']");
77fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp5.exec('first\\nblah')", "['blah']");
78fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp5.exec('first\\nblah\\nthird')", "['blah']");
79fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp5.exec('first\\nblah2\\nblah3')", "['blah2']");
80fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
81fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar regexp6 = /.*blah.*?/;
82fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp6.exec('test')");
83fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp6.exec('blah')", "['blah']");
84fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp6.exec('1blah')", "['1blah']");
85fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp6.exec('blah1')", "['blah']");
86fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp6.exec('blah blah blah')", "['blah blah blah']");
87fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp6.exec('blah\\nsecond')", "['blah']");
88fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp6.exec('first\\nblah')", "['blah']");
89fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp6.exec('first\\nblah\\nthird')", "['blah']");
90fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp6.exec('first\\nblah2\\nblah3')", "['blah']");
91fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
92fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar regexp7 = /^.*?blah.*?$/;
93fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp7.exec('test')");
94fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp7.exec('blah')", "['blah']");
95fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp7.exec('1blah')", "['1blah']");
96fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp7.exec('blah1')", "['blah1']");
97fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp7.exec('blah blah blah')", "['blah blah blah']");
98fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp7.exec('blah\\nsecond')");
99fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp7.exec('first\\nblah')");
100fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp7.exec('first\\nblah\\nthird')");
101fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp7.exec('first\\nblah2\\nblah3')");
102fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
103fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar regexp8 = /^(.*)blah.*$/;
104fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp8.exec('test')");
105fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp8.exec('blah')", "['blah','']");
106fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp8.exec('1blah')", "['1blah','1']");
107fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp8.exec('blah1')", "['blah1','']");
108fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp8.exec('blah blah blah')", "['blah blah blah','blah blah ']");
109fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp8.exec('blah\\nsecond')");
110fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp8.exec('first\\nblah')");
111fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp8.exec('first\\nblah\\nthird')");
112fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp8.exec('first\\nblah2\\nblah3')");
113fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
114fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar regexp9 = /.*blah.*/m;
115fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp9.exec('test')");
116fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp9.exec('blah')", "['blah']");
117fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp9.exec('1blah')", "['1blah']");
118fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp9.exec('blah1')", "['blah1']");
119fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp9.exec('blah blah blah')", "['blah blah blah']");
120fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp9.exec('blah\\nsecond')", "['blah']");
121fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp9.exec('first\\nblah')", "['blah']");
122fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp9.exec('first\\nblah\\nthird')", "['blah']");
123fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp9.exec('first\\nblah2\\nblah3')", "['blah2']");
124fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
125fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar regexp10 = /^.*blah.*/m;
126fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp10.exec('test')");
127fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp10.exec('blah')", "['blah']");
128fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp10.exec('1blah')", "['1blah']");
129fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp10.exec('blah1')", "['blah1']");
130fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp10.exec('blah blah blah')", "['blah blah blah']");
131fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp10.exec('blah\\nsecond')", "['blah']");
132fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp10.exec('first\\nblah')", "['blah']");
133fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp10.exec('first\\nblah\\nthird')", "['blah']");
134fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp10.exec('first\\nblah2\\nblah3')", "['blah2']");
135fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
136fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar regexp11 = /.*(?:blah).*$/;
137fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp11.exec('test')");
138fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp11.exec('blah')", "['blah']");
139fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp11.exec('1blah')", "['1blah']");
140fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp11.exec('blah1')", "['blah1']");
141fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp11.exec('blah blah blah')", "['blah blah blah']");
142fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp11.exec('blah\\nsecond')");
143fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp11.exec('first\\nblah')", "['blah']");
144fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp11.exec('first\\nblah\\nthird')");
145fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp11.exec('first\\nblah2\\nblah3')", "['blah3']");
146fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
147fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar regexp12 = /.*(?:blah|buzz|bang).*$/;
148fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp12.exec('test')");
149fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp12.exec('blah')", "['blah']");
150fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp12.exec('1blah')", "['1blah']");
151fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp12.exec('blah1')", "['blah1']");
152fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp12.exec('blah blah blah')", "['blah blah blah']");
153fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp12.exec('blah\\nsecond')");
154fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp12.exec('first\\nblah')", "['blah']");
155fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeNull("regexp12.exec('first\\nblah\\nthird')");
156fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp12.exec('first\\nblah2\\nblah3')", "['blah3']");
157fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
158fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar regexp13 = /.*\n\d+.*/;
159fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBe("regexp13.exec('abc\\n123')", "['abc\\n123']");
160