19258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org// Copyright 2008 the V8 project authors. All rights reserved. 29a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Redistribution and use in source and binary forms, with or without 39a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// modification, are permitted provided that the following conditions are 49a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// met: 59a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// 69a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// * Redistributions of source code must retain the above copyright 79a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// notice, this list of conditions and the following disclaimer. 89a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// * Redistributions in binary form must reproduce the above 99a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// copyright notice, this list of conditions and the following 109a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// disclaimer in the documentation and/or other materials provided 119a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// with the distribution. 129a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// * Neither the name of Google Inc. nor the names of its 139a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// contributors may be used to endorse or promote products derived 149a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// from this software without specific prior written permission. 159a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// 169a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 179a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 189a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 199a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 209a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 219a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 229a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 239a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 249a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 259a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 269a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 279a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 289a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comexpected = ["A", undefined, "B", "bold", "/", "B", "and", undefined, "CODE", "coded", "/", "CODE", ""]; 299a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comresult = "A<B>bold</B>and<CODE>coded</CODE>".split(/<(\/)?([^<>]+)>/); 30f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(expected, result); 319a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 329a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 33f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["a", "b"], "ab".split(/a*?/)); 349a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 35f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["", "b"], "ab".split(/a*/)); 369a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 37f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["a"], "ab".split(/a*?/, 1)); 389a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 39f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals([""], "ab".split(/a*/, 1)); 409a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 41f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["as","fas","fas","f"], "asdfasdfasdf".split("d")); 429a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 43f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["as","fas","fas","f"], "asdfasdfasdf".split("d", -1)); 449a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 45f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["as", "fas"], "asdfasdfasdf".split("d", 2)); 469a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 47f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals([], "asdfasdfasdf".split("d", 0)); 489a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 49f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["as","fas","fas",""], "asdfasdfasd".split("d")); 509a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 51f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals([], "".split("")); 529a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 53f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals([""], "".split("a")); 549a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 55f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["a","b"], "axxb".split(/x*/)); 569a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 57f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["a","b"], "axxb".split(/x+/)); 58f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org 59f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["a","","b"], "axxb".split(/x/)); 609a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 619a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// This was http://b/issue?id=1151354 62f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["div", "#id", ".class"], "div#id.class".split(/(?=[#.])/)); 63f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org 649a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 65f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["div", "#i", "d", ".class"], "div#id.class".split(/(?=[d#.])/)); 66f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org 67f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["a", "b", "c"], "abc".split(/(?=.)/)); 689a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 6949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgassertArrayEquals(["Wenige", "sind", "auserwählt."], 7049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org "Wenige sind auserwählt.".split(" ")); 7149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 7249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgassertArrayEquals([], "Wenige sind auserwählt.".split(" ", 0)); 7349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 7449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgassertArrayEquals(["Wenige"], "Wenige sind auserwählt.".split(" ", 1)); 7549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 7649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgassertArrayEquals(["Wenige", "sind"], "Wenige sind auserwählt.".split(" ", 2)); 7749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 7849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgassertArrayEquals(["Wenige", "sind", "auserwählt."], 7949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org "Wenige sind auserwählt.".split(" ", 3)); 8049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 8149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgassertArrayEquals(["Wenige sind auserw", "hlt."], 8249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org "Wenige sind auserwählt.".split("ä")); 8349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 8449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgassertArrayEquals(["Wenige sind ", "."], 8549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org "Wenige sind auserwählt.".split("auserwählt")); 869a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 879a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com/* "ab".split(/((?=.))/) 881805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org * 899a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com * KJS: ,a,,b 909a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com * SM: a,,b, 919a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com * IE: a,b 929a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com * Opera: a,,b 939a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com * V8: a,,b 941805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org * 959a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com * Opera seems to have this right. The others make no sense. 969a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com */ 97f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["a", "", "b"], "ab".split(/((?=.))/)); 989a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 999a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com/* "ab".split(/(?=)/) 1009a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com * 1019a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com * KJS: a,b 1029a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com * SM: ab 1039a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com * IE: a,b 104f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org * Opera: a,bb 1059a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com * V8: a,b 1069a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com */ 107f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertArrayEquals(["a", "b"], "ab".split(/(?=)/)); 108f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org 1099a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 110f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org// For issue http://code.google.com/p/v8/issues/detail?id=924 111f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org// Splitting the empty string is a special case. 112f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertEquals([""], ''.split()); 113f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertEquals([""], ''.split(/./)); 114f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertEquals([], ''.split(/.?/)); 115f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertEquals([], ''.split(/.??/)); 116f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgassertEquals([], ''.split(/()()/)); 117beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org 118beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org 119beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org// Issue http://code.google.com/p/v8/issues/detail?id=929 120beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org// (Splitting with empty separator and a limit.) 121beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org 122beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.orgfunction numberObj(num) { 123beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org return {valueOf: function() { return num; }}; 124beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org} 125beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.org 126beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.orgassertEquals([], "abc".split("", 0)); 127beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.orgassertEquals([], "abc".split("", numberObj(0))); 128beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.orgassertEquals(["a"], "abc".split("", 1)); 129beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.orgassertEquals(["a"], "abc".split("", numberObj(1))); 130beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.orgassertEquals(["a", "b"], "abc".split("", 2)); 131beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.orgassertEquals(["a", "b"], "abc".split("", numberObj(2))); 132beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.orgassertEquals(["a", "b", "c"], "abc".split("", 3)); 133beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.orgassertEquals(["a", "b", "c"], "abc".split("", numberObj(3))); 134beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.orgassertEquals(["a", "b", "c"], "abc".split("", 4)); 135beb2571dca14508fbbbb47a2f606327d5968ee92ager@chromium.orgassertEquals(["a", "b", "c"], "abc".split("", numberObj(4))); 136ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org 137ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org 138ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.orgvar all_ascii_codes = []; 139ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.orgfor (var i = 0; i < 128; i++) all_ascii_codes[i] = i; 140ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.orgvar all_ascii_string = String.fromCharCode.apply(String, all_ascii_codes); 141ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org 142ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.orgvar split_chars = all_ascii_string.split(""); 143ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.orgassertEquals(128, split_chars.length); 144ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.orgfor (var i = 0; i < 128; i++) { 145ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org assertEquals(1, split_chars[i].length); 146ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org assertEquals(i, split_chars[i].charCodeAt(0)); 147ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org} 1484954674151afa960af66efb4831df06bde727333yangguo@chromium.org 1494954674151afa960af66efb4831df06bde727333yangguo@chromium.org// Check that the separator is converted to string before returning due to 1504954674151afa960af66efb4831df06bde727333yangguo@chromium.org// limit == 0. 1514954674151afa960af66efb4831df06bde727333yangguo@chromium.orgvar counter = 0; 1524954674151afa960af66efb4831df06bde727333yangguo@chromium.orgvar separator = { toString: function() { counter++; return "b"; }}; 1534954674151afa960af66efb4831df06bde727333yangguo@chromium.orgassertEquals([], "abc".split(separator, 0)); 1544954674151afa960af66efb4831df06bde727333yangguo@chromium.orgassertEquals(1, counter); 1554954674151afa960af66efb4831df06bde727333yangguo@chromium.org 1564954674151afa960af66efb4831df06bde727333yangguo@chromium.org// Check that the subject is converted to string before the separator. 1574954674151afa960af66efb4831df06bde727333yangguo@chromium.orgcounter = 0; 1584954674151afa960af66efb4831df06bde727333yangguo@chromium.orgvar subject = { toString: function() { assertEquals(0, counter); 1594954674151afa960af66efb4831df06bde727333yangguo@chromium.org counter++; 1604954674151afa960af66efb4831df06bde727333yangguo@chromium.org return "abc"; }}; 1614954674151afa960af66efb4831df06bde727333yangguo@chromium.orgseparator = { toString: function() { assertEquals(1, counter); 1624954674151afa960af66efb4831df06bde727333yangguo@chromium.org counter++; 1634954674151afa960af66efb4831df06bde727333yangguo@chromium.org return "b"; }}; 1644954674151afa960af66efb4831df06bde727333yangguo@chromium.org 1654954674151afa960af66efb4831df06bde727333yangguo@chromium.orgassertEquals(["a", "c"], String.prototype.split.call(subject, separator)); 1664954674151afa960af66efb4831df06bde727333yangguo@chromium.orgassertEquals(2, counter); 167