// 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)); }());