| Index: test/mjsunit/harmony/classes-subclass-arrays.js
|
| diff --git a/test/mjsunit/harmony/classes-subclass-arrays.js b/test/mjsunit/harmony/classes-subclass-arrays.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e0363c715bc433b7706c1aed00ab4ada0c6d10c2
|
| --- /dev/null
|
| +++ b/test/mjsunit/harmony/classes-subclass-arrays.js
|
| @@ -0,0 +1,150 @@
|
| +// Copyright 2015 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.
|
| +//
|
| +// Flags: --harmony-classes
|
| +'use strict';
|
| +
|
| +(function TestDefaultConstructor() {
|
| + class Stack extends Array { }
|
| + {
|
| + let s1 = new Stack();
|
| + assertSame(Stack.prototype, s1.__proto__);
|
| + assertTrue(Array.isArray(s1));
|
| + assertSame(0, s1.length);
|
| + s1[0] = 'xyz';
|
| + assertSame(1, s1.length);
|
| + assertSame('xyz', s1[0]);
|
| + s1.push(42);
|
| + assertSame(2, s1.length);
|
| + assertSame('xyz', s1[0]);
|
| + assertSame(42, s1[1]);
|
| + }
|
| +
|
| + {
|
| + let s2 = new Stack(10);
|
| + assertSame(Stack.prototype, s2.__proto__);
|
| + assertTrue(Array.isArray(s2));
|
| + assertSame(10, s2.length);
|
| + assertSame(undefined, s2[0]);
|
| + }
|
| +
|
| + {
|
| + let a = [1,2,3];
|
| + let s3 = new Stack(a);
|
| + assertSame(Stack.prototype, s3.__proto__);
|
| + assertTrue(Array.isArray(s3));
|
| + assertSame(1, s3.length);
|
| + assertSame(a, s3[0]);
|
| + }
|
| +
|
| + {
|
| + let s4 = new Stack(1, 2, 3);
|
| + assertSame(Stack.prototype, s4.__proto__);
|
| + assertTrue(Array.isArray(s4));
|
| + assertSame(3, s4.length);
|
| + assertSame(1, s4[0]);
|
| + assertSame(2, s4[1]);
|
| + assertSame(3, s4[2]);
|
| + }
|
| +
|
| + {
|
| + let s5 = new Stack(undefined, undefined, undefined);
|
| + assertSame(Stack.prototype, s5.__proto__);
|
| + assertTrue(Array.isArray(s5));
|
| + assertSame(3, s5.length);
|
| + assertSame(undefined, s5[0]);
|
| + assertSame(undefined, s5[1]);
|
| + assertSame(undefined, s5[2]);
|
| + }
|
| +}());
|
| +
|
| +
|
| +(function TestEmptyArgsSuper() {
|
| + class Stack extends Array {
|
| + constructor() { super(); }
|
| + }
|
| + let s1 = new Stack();
|
| + assertSame(Stack.prototype, s1.__proto__);
|
| + assertTrue(Array.isArray(s1));
|
| + assertSame(0, s1.length);
|
| + s1[0] = 'xyz';
|
| + assertSame(1, s1.length);
|
| + assertSame('xyz', s1[0]);
|
| + s1.push(42);
|
| + assertSame(2, s1.length);
|
| + assertSame('xyz', s1[0]);
|
| + assertSame(42, s1[1]);
|
| +}());
|
| +
|
| +
|
| +(function TestOneArgSuper() {
|
| + class Stack extends Array {
|
| + constructor(x) {
|
| + super(x);
|
| + }
|
| + }
|
| +
|
| + {
|
| + let s2 = new Stack(10, 'ignored arg');
|
| + assertSame(Stack.prototype, s2.__proto__);
|
| + assertTrue(Array.isArray(s2));
|
| + assertSame(10, s2.length);
|
| + assertSame(undefined, s2[0]);
|
| + }
|
| +
|
| + {
|
| + let a = [1,2,3];
|
| + let s3 = new Stack(a, 'ignored arg');
|
| + assertSame(Stack.prototype, s3.__proto__);
|
| + assertTrue(Array.isArray(s3));
|
| + assertSame(1, s3.length);
|
| + assertSame(a, s3[0]);
|
| + }
|
| +}());
|
| +
|
| +
|
| +(function TestMultipleArgsSuper() {
|
| + class Stack extends Array {
|
| + constructor(x, y, z) {
|
| + super(x, y, z);
|
| + }
|
| + }
|
| + {
|
| + let s4 = new Stack(1, 2, 3, 4, 5);
|
| + assertSame(Stack.prototype, s4.__proto__);
|
| + assertTrue(Array.isArray(s4));
|
| + assertSame(3, s4.length);
|
| + assertSame(1, s4[0]);
|
| + assertSame(2, s4[1]);
|
| + assertSame(3, s4[2]);
|
| + }
|
| +
|
| + {
|
| + let s5 = new Stack(undefined);
|
| + assertSame(Stack.prototype, s5.__proto__);
|
| + assertTrue(Array.isArray(s5));
|
| + assertTrue(s5.__proto__ == Stack.prototype);
|
| + assertSame(3, s5.length);
|
| + assertSame(undefined, s5[0]);
|
| + assertSame(undefined, s5[1]);
|
| + assertSame(undefined, s5[2]);
|
| + }
|
| +}());
|
| +
|
| +
|
| +(function TestArrayConcat() {
|
| + class Stack extends Array { }
|
| + let s1 = new Stack(1,2,3);
|
| +
|
| + assertArrayEquals([1,2,3,4,5,6], s1.concat([4,5,6]));
|
| + assertArrayEquals([4,5,6,1,2,3], [4,5,6].concat(s1));
|
| +}());
|
| +
|
| +
|
| +(function TestJSONStringify() {
|
| + class Stack extends Array { }
|
| +
|
| + let s1 = new Stack(1,2,3);
|
| + assertSame("[1,2,3]", JSON.stringify(s1));
|
| +}());
|
|
|