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 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 | 297 |
298 | 298 |
299 (function testConcatHoleySloppyArguments() { | 299 (function testConcatHoleySloppyArguments() { |
300 var args = (function(a) { return arguments; })(1,2,3); | 300 var args = (function(a) { return arguments; })(1,2,3); |
301 delete args[1]; | 301 delete args[1]; |
302 args[Symbol.isConcatSpreadable] = true; | 302 args[Symbol.isConcatSpreadable] = true; |
303 assertEquals([1, void 0, 3, 1, void 0, 3], [].concat(args, args)); | 303 assertEquals([1, void 0, 3, 1, void 0, 3], [].concat(args, args)); |
304 })(); | 304 })(); |
305 | 305 |
306 | 306 |
| 307 (function testConcatSpreadableStringPrototype() { |
| 308 var str1 = new String("yuck\uD83D\uDCA9") |
| 309 // String wrapper objects are not concat-spreadable by default |
| 310 assertEquals([str1], [].concat(str1)); |
| 311 |
| 312 String.prototype[Symbol.isConcatSpreadable] = true; |
| 313 // String wrapper objects may be concat-spreadable |
| 314 assertEquals(["y", "u", "c", "k", "\uD83D", "\uDCA9"], |
| 315 [].concat(new String("yuck\uD83D\uDCA9"))); |
| 316 |
| 317 // String values are never concat-spreadable |
| 318 assertEquals(["yuck\uD83D\uDCA9"], [].concat("yuck\uD83D\uDCA9")); |
| 319 delete String.prototype[Symbol.isConcatSpreadable]; |
| 320 })(); |
| 321 |
| 322 |
307 // ES5 tests | 323 // ES5 tests |
308 (function testArrayConcatES5() { | 324 (function testArrayConcatES5() { |
309 "use strict"; | 325 "use strict"; |
310 var poses; | 326 var poses; |
311 var pos; | 327 var pos; |
312 | 328 |
313 poses = [140, 4000000000]; | 329 poses = [140, 4000000000]; |
314 while (pos = poses.shift()) { | 330 while (pos = poses.shift()) { |
315 var a = new Array(pos); | 331 var a = new Array(pos); |
316 var array_proto = []; | 332 var array_proto = []; |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 arr3.length = 10000; | 524 arr3.length = 10000; |
509 for (var i = 0; i < 100; i++) { | 525 for (var i = 0; i < 100; i++) { |
510 Object.defineProperty(arr3, i * i, {get: mkGetter(i)}); | 526 Object.defineProperty(arr3, i * i, {get: mkGetter(i)}); |
511 expectedTrace[i] = i; | 527 expectedTrace[i] = i; |
512 expectedTrace[100 + i] = i; | 528 expectedTrace[100 + i] = i; |
513 } | 529 } |
514 var r4 = [0].concat(arr3, arr3); | 530 var r4 = [0].concat(arr3, arr3); |
515 assertEquals(1 + arr3.length * 2, r4.length); | 531 assertEquals(1 + arr3.length * 2, r4.length); |
516 assertEquals(expectedTrace, trace); | 532 assertEquals(expectedTrace, trace); |
517 })(); | 533 })(); |
OLD | NEW |