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