Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1481)

Side by Side Diff: test/webkit/fast/js/kde/Array.js

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

Powered by Google App Engine
This is Rietveld 408576698