1d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// Copyright 2013 the V8 project authors. All rights reserved. 2d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 3d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// 4d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// Redistribution and use in source and binary forms, with or without 5d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// modification, are permitted provided that the following conditions 6d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// are met: 7d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// 1. Redistributions of source code must retain the above copyright 8d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// notice, this list of conditions and the following disclaimer. 9d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// 2. Redistributions in binary form must reproduce the above copyright 10d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// notice, this list of conditions and the following disclaimer in the 11d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// documentation and/or other materials provided with the distribution. 12d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// 13d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 14d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 17d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 20d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 24d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgdescription("KDE JS Test"); 25d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// 15.4 Array Objects 26d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// (c) 2001 Harri Porten <porten@kde.org> 27d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 28d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("Array().length", "0"); 29d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("(new Array()).length", "0"); 30d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("(new Array(3)).length", "3"); 31d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("(new Array(11, 22)).length", "2"); 32d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("(new Array(11, 22))[0]", "11"); 33d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("Array(11, 22)[1]", "22"); 34d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBeUndefined("(new Array(11, 22))[3]"); 35d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("String(new Array(11, 22))", "'11,22'"); 36d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("var a = []; a[0] = 33; a[0]", "33"); 37d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("var a = []; a[0] = 33; a.length", "1"); 38d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("var a = [11, 22]; a.length = 1; String(a);", "'11'"); 39d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("var a = [11, 22]; a.length = 1; a.length;", "1"); 40d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 41d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// range checks 42d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgvar caught = false; 43d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgvar ename = ""; 44d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgtry { 45d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org [].length = -1; 46d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} catch (e) { 47d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // expect Range Error 48d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org caught = true; 49d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org ename = e.name; 50d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} 51d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 52d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBeTrue("caught;"); 53d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("ename", "'RangeError'"); 54d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 55d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgcaught = false; 56d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgename = ""; 57d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgtry { 58d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org new Array(Infinity); 59d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} catch (e) { 60d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // expect Range Error 61d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org caught = true; 62d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org ename = e.name; 63d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} 64d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBeTrue("caught;"); 65d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("ename", "'RangeError'"); 66d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 67d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBeUndefined("var a = [11, 22]; a.length = 1; a[1];"); 68d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("Array().toString()", "''"); 69d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("Array(3).toString()", "',,'"); 70d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("Array(11, 22).toString()", "'11,22'"); 71d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("String(Array(11, 22).concat(33))", "'11,22,33'"); 72d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("String(Array(2).concat(33, 44))", "',,33,44'"); 73d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("String(Array(2).concat(Array(2)))", "',,,'"); 74d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("String(Array(11,22).concat(Array(33,44)))", "'11,22,33,44'"); 75d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("String(Array(1,2).concat(3,Array(4,5)))", "'1,2,3,4,5'"); 76d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("var a = new Array(1,2,3); delete a[1]; String(a.concat(4))", "'1,,3,4'"); 77d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 78d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("[1,2,3,4].slice(1, 3).toString()", "'2,3'"); 79d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("[1,2,3,4].slice(-3, -1).toString()", "'2,3'"); 80d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("[1,2].slice(-9, 0).length", "0"); 81d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("[1,2].slice(1).toString()", "'2'"); 82d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("[1,2].slice().toString()", "'1,2'"); 83d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 84d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// 2nd set. 85d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("(new Array('a')).length", "1"); 86d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("(new Array('a'))[0]", "'a'"); 87d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBeUndefined("(new Array('a'))[1]"); 88d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 89d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("Array('a').length", "1"); 90d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("Array('a')[0]", "'a'"); 91d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 92d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("String(Array())", "''"); 93d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("String(Array('a','b'))", "'a,b'"); 94d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 95d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("[].length", "0"); 96d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("['a'].length", "1"); 97d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("['a'][0]", "'a'"); 98d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("['a',,'c'][2]", "'c'"); 99d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("['a',undefined,'c'][1]", "undefined"); 100d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("['a',,'c'][1]", "undefined"); 101d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("1 in ['a',,'c']", "false"); 102d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("1 in ['a',undefined,'c']", "true"); 103d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 104d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgvar arrayWithDeletion = ['a','b','c']; 105d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgdelete arrayWithDeletion[1]; 106d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("1 in arrayWithDeletion", "false"); 107d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 108d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgfunction forInSum(_a) { 109d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org var s = ''; 110d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org for (i in _a) 111d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org s += _a[i]; 112d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return s; 113d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} 114d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 115d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("forInSum([])", "''"); 116d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("forInSum(Array())", "''"); 117d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("forInSum(Array('a'))", "'a'"); 118d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("forInSum([,undefined,'x','aa'])", "'undefinedxaa'"); 119d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 120d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgvar a0 = []; 121d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("forInSum(a0)", "''"); 122d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 123d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgvar a1 = [ 'a' ]; 124d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("forInSum(a1)", "'a'"); 125d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 126d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("String([].sort())", "''") 127d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("String([3,1,'2'].sort())", "'1,2,3'"); 128d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("String([,'x','aa'].sort())", "'aa,x,'"); 129d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("String([,undefined,'x','aa'].sort())", "'aa,x,,'"); 130d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("2 in [,undefined,'x','aa'].sort()", "true"); 131d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("3 in [,undefined,'x','aa'].sort()", "false"); 132d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 133d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// sort by length 134d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgfunction comp(a, b) { 135d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org var la = String(a).length; 136d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org var lb = String(b).length; 137d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org if (la < lb) 138d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return -1; 139d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org else if (la > lb) 140d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return 1; 141d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org else 142d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return 0; 143d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} 144d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("var a = ['aa', 'b', 'cccc', 'ddd']; String(a.sort(comp))", "'b,aa,ddd,cccc'"); 145d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 146d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// +/-Infinity as function return value 147d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("[0, Infinity].sort(function(a, b) { return a - b }).toString()", "'0,Infinity'"); 148d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 149d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// Array.unshift() 150d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("[].unshift('a')", "1"); 151d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("['c'].unshift('a', 'b')", "3"); 152d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("var a = []; a.unshift('a'); String(a)", "'a'"); 153d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("var a = ['c']; a.unshift('a', 'b'); String(a)", "'a,b,c'"); 154d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 155d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// Array.splice() 156d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("String(['a', 'b', 'c'].splice(1, 2, 'x', 'y'))", "'b,c'"); 157d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 158d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgvar maxint = Math.pow(2,32)-1; 159d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgvar arr = new Array(); 160d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 161d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// 2^32 should not be treated as a valid array index, i.e. 162d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// setting the property on the array should not result in 163d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// the length being modified 164d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 165d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgarr.length = 40; 166d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgarr[maxint] = "test"; 167d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("arr.length","40"); 168d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("arr[maxint]","\"test\""); 169d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgdelete arr[maxint]; 170d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("arr.length","40"); 171d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("arr[maxint]","undefined"); 172d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgarr[maxint-1] = "test2"; 173d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("arr.length","maxint"); 174d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("arr[maxint-1]","\"test2\""); 175d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 176d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// Floating point numbers also should not be treated as valid array indices. 177d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgarr.length = 40; 178d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgarr[55.5] = "test"; // does fit in a JSImmediate number 179d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgarr[65.11111111111111111111111111111] = "test"; // does not fit in a JSImmediate number 180d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("arr.length","40"); 181d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("arr[55.5]","\"test\""); 182d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("arr[65.11111111111111111111111111111]","\"test\""); 183d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgdelete arr[55.5]; 184d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgdelete arr[65.11111111111111111111111111111]; 185d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("arr.length","40"); 186d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("arr[55.5]","undefined"); 187d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("arr[65.11111111111111111111111111111]","undefined"); 188d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 189d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgarr = new Array('a','b','c'); 190d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgarr.__proto__ = { 1: 'x' }; 191d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgvar propnames = new Array(); 192d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgfor (i in arr) 193d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org propnames.push(i); 194d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgpropnames.sort(); 195d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("propnames.length","3"); 196d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("propnames[0]","'0'"); 197d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("propnames[1]","'1'"); 198d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgshouldBe("propnames[2]","'2'"); 199d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 200d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgfunction testToString() { 201d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // backup 202d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org var backupNumberToString = Number.prototype.toString; 203d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org var backupNumberToLocaleString = Number.prototype.toLocaleString; 204d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org var backupRegExpToString = RegExp.prototype.toString; 205d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org var backupRegExpToLocaleString = RegExp.prototype.toLocaleString; 206d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 207d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // change functions 208d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Number.prototype.toString = function() { return "toString"; } 209d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Number.prototype.toLocaleString = function() { return "toLocaleString"; } 210d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org RegExp.prototype.toString = function() { return "toString2"; } 211d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org RegExp.prototype.toLocaleString = function() { return "toLocaleString2"; } 212d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 213d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // the tests 214d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org shouldBe("[1].toString()", "'1'"); 215d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org shouldBe("[1].toLocaleString()", "'toLocaleString'"); 216d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Number.prototype.toLocaleString = "invalid"; 217d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org shouldBe("[1].toLocaleString()", "'1'"); 218d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org shouldBe("[/r/].toString()", "'toString2'"); 219d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org shouldBe("[/r/].toLocaleString()", "'toLocaleString2'"); 220d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org RegExp.prototype.toLocaleString = "invalid"; 221d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org shouldBe("[/r/].toLocaleString()", "'toString2'"); 222d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 223d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org var caught = false; 224d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org try { 225d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org [{ toString : 0 }].toString(); 226d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org } catch (e) { 227d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org caught = true; 228d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org } 229d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org shouldBeTrue("caught"); 230d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 231d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org // restore 232d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Number.prototype.toString = backupNumberToString; 233d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org Number.prototype.toLocaleString = backupNumberToLocaleString; 234d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org RegExp.prototype.toString = backupRegExpToString; 235d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org RegExp.prototype.toLocaleString = backupRegExpToLocaleString; 236f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org} 237