OLD | NEW |
---|---|
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --harmony-arrays --harmony-classes | 5 // Flags: --harmony-arrays --harmony-classes |
6 | 6 |
7 (function testArrayConcatArity() { | 7 (function testArrayConcatArity() { |
8 "use strict"; | 8 "use strict"; |
9 assertEquals(1, Array.prototype.concat.length); | 9 assertEquals(1, Array.prototype.concat.length); |
10 })(); | 10 })(); |
(...skipping 22 matching lines...) Expand all Loading... | |
33 }; | 33 }; |
34 obj[Symbol.isConcatSpreadable] = true; | 34 obj[Symbol.isConcatSpreadable] = true; |
35 var obj2 = { length: 3, "0": "0", "1": "1", "2": "2" }; | 35 var obj2 = { length: 3, "0": "0", "1": "1", "2": "2" }; |
36 var arr = ["X", "Y", "Z"]; | 36 var arr = ["X", "Y", "Z"]; |
37 assertEquals([void 0, "A", void 0, "B", void 0, "C", | 37 assertEquals([void 0, "A", void 0, "B", void 0, "C", |
38 { "length": 3, "0": "0", "1": "1", "2": "2" }, | 38 { "length": 3, "0": "0", "1": "1", "2": "2" }, |
39 "X", "Y", "Z"], Array.prototype.concat.call(obj, obj2, arr)); | 39 "X", "Y", "Z"], Array.prototype.concat.call(obj, obj2, arr)); |
40 })(); | 40 })(); |
41 | 41 |
42 | 42 |
43 (function testConcatArrayLikeStringLength() { | |
44 "use strict"; | |
45 var obj = { | |
46 "length": "6", | |
47 "1": "A", | |
48 "3": "B", | |
49 "5": "C" | |
50 }; | |
51 obj[Symbol.isConcatSpreadable] = true; | |
52 var obj2 = { length: 3, "0": "0", "1": "1", "2": "2" }; | |
53 var arr = ["X", "Y", "Z"]; | |
54 assertEquals([void 0, "A", void 0, "B", void 0, "C", | |
55 { "length": 3, "0": "0", "1": "1", "2": "2" }, | |
56 "X", "Y", "Z"], Array.prototype.concat.call(obj, obj2, arr)); | |
57 })(); | |
58 | |
59 | |
60 (function testConcatArrayLikeNegativeLength() { | |
61 "use strict"; | |
62 var obj = { | |
63 "length": -6, | |
64 "1": "A", | |
65 "3": "B", | |
66 "5": "C" | |
67 }; | |
68 obj[Symbol.isConcatSpreadable] = true; | |
69 assertEquals([], [].concat(obj)); | |
70 obj.length = -6.7; | |
71 assertEquals([], [].concat(obj)); | |
72 obj.length = "-6"; | |
73 assertEquals([], [].concat(obj)); | |
74 })(); | |
75 | |
76 | |
77 (function testConcatArrayLikeToLengthThrows() { | |
78 "use strict"; | |
79 var obj = { | |
80 "length": {valueOf: null, toString: null}, | |
Dmitry Lomov (no reviews)
2014/12/15 07:23:51
Add a test where `toString` and `valueOf` throw an
caitp (gmail)
2014/12/15 18:15:29
Done
| |
81 "1": "A", | |
82 "3": "B", | |
83 "5": "C" | |
84 }; | |
85 obj[Symbol.isConcatSpreadable] = true; | |
86 var obj2 = { length: 3, "0": "0", "1": "1", "2": "2" }; | |
87 var arr = ["X", "Y", "Z"]; | |
88 assertThrows(function() { | |
89 Array.prototype.concat.call(obj, obj2, arr); | |
90 }, TypeError); | |
91 })(); | |
92 | |
93 | |
43 (function testConcatHoleyArray() { | 94 (function testConcatHoleyArray() { |
44 "use strict"; | 95 "use strict"; |
45 var arr = []; | 96 var arr = []; |
46 arr[4] = "Item 4"; | 97 arr[4] = "Item 4"; |
47 arr[8] = "Item 8"; | 98 arr[8] = "Item 8"; |
48 var arr2 = [".", "!", "?"]; | 99 var arr2 = [".", "!", "?"]; |
49 assertEquals([void 0, void 0, void 0, void 0, "Item 4", void 0, void 0, | 100 assertEquals([void 0, void 0, void 0, void 0, "Item 4", void 0, void 0, |
50 void 0, "Item 8", ".", "!", "?"], arr.concat(arr2)); | 101 void 0, "Item 8", ".", "!", "?"], arr.concat(arr2)); |
51 })(); | 102 })(); |
52 | 103 |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
404 arr3.length = 10000; | 455 arr3.length = 10000; |
405 for (var i = 0; i < 100; i++) { | 456 for (var i = 0; i < 100; i++) { |
406 Object.defineProperty(arr3, i * i, {get: mkGetter(i)}); | 457 Object.defineProperty(arr3, i * i, {get: mkGetter(i)}); |
407 expectedTrace[i] = i; | 458 expectedTrace[i] = i; |
408 expectedTrace[100 + i] = i; | 459 expectedTrace[100 + i] = i; |
409 } | 460 } |
410 var r4 = [0].concat(arr3, arr3); | 461 var r4 = [0].concat(arr3, arr3); |
411 assertEquals(1 + arr3.length * 2, r4.length); | 462 assertEquals(1 + arr3.length * 2, r4.length); |
412 assertEquals(expectedTrace, trace); | 463 assertEquals(expectedTrace, trace); |
413 })(); | 464 })(); |
OLD | NEW |