| // Copyright 2018 the V8 project authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // Test spreading of holey arrays. Holes should be replaced with undefined. | |
| var a = [, 2]; | |
| assertEquals([, 2], [...a]); | |
| assertTrue([...a].hasOwnProperty(0)); | |
| assertTrue([2, ...a].hasOwnProperty(1)); | |
| class MyArray1 extends Array { | |
| constructor(a) { | |
| super(...a); | |
| } | |
| } | |
| var myarr1 = new MyArray1(a); | |
| assertEquals(undefined, myarr1[0]); | |
| assertTrue(myarr1.hasOwnProperty(0)); | |
| class MyArray2 extends Array { | |
| constructor(a) { | |
| super(2, ...a); | |
| } | |
| } | |
| var myarr2 = new MyArray2(a); | |
| assertEquals(undefined, myarr2[1]); | |
| assertTrue(myarr2.hasOwnProperty(1)); | |
| function foo0() { return arguments.hasOwnProperty(0); } | |
| assertTrue(foo0(...a)); | |
| function foo1() { return arguments.hasOwnProperty(1); } | |
| assertTrue(foo1(2, ...a)); | |
| // This test pollutes the Array prototype. No more tests should be run in the | |
| // same instance after this. | |
| a.__proto__[0] = 1; | |
| var arr2 = [...a]; | |
| assertEquals([1,2], arr2); | |
| assertTrue(arr2.hasOwnProperty(0)); | |
| myarr1 = new MyArray1(a); | |
| assertEquals(1, myarr1[0]); | |
| assertTrue(myarr1.hasOwnProperty(0)); | |
| var myarr2 = new MyArray2(a); | |
| assertEquals(1, myarr2[1]); | |
| assertTrue(myarr2.hasOwnProperty(1)); |