Chromium Code Reviews| 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 |