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