1 // Copyright 2015 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 'use strict'; 6 7 (function TestDefaultConstructor() { 8 class Stack extends Array { } 9 { 10 let s1 = new Stack(); 11 assertSame(Stack.prototype, s1.__proto__); 12 assertTrue(Array.isArray(s1)); 13 assertSame(0, s1.length); 14 s1[0] = 'xyz'; 15 assertSame(1, s1.length); 16 assertSame('xyz', s1[0]); 17 s1.push(42); 18 assertSame(2, s1.length); 19 assertSame('xyz', s1[0]); 20 assertSame(42, s1[1]); 21 } 22 23 { 24 let s2 = new Stack(10); 25 assertSame(Stack.prototype, s2.__proto__); 26 assertTrue(Array.isArray(s2)); 27 assertSame(10, s2.length); 28 assertSame(undefined, s2[0]); 29 } 30 31 { 32 let a = [1,2,3]; 33 let s3 = new Stack(a); 34 assertSame(Stack.prototype, s3.__proto__); 35 assertTrue(Array.isArray(s3)); 36 assertSame(1, s3.length); 37 assertSame(a, s3[0]); 38 } 39 40 { 41 let s4 = new Stack(1, 2, 3); 42 assertSame(Stack.prototype, s4.__proto__); 43 assertTrue(Array.isArray(s4)); 44 assertSame(3, s4.length); 45 assertSame(1, s4[0]); 46 assertSame(2, s4[1]); 47 assertSame(3, s4[2]); 48 } 49 50 { 51 let s5 = new Stack(undefined, undefined, undefined); 52 assertSame(Stack.prototype, s5.__proto__); 53 assertTrue(Array.isArray(s5)); 54 assertSame(3, s5.length); 55 assertSame(undefined, s5[0]); 56 assertSame(undefined, s5[1]); 57 assertSame(undefined, s5[2]); 58 } 59 }()); 60 61 62 (function TestEmptyArgsSuper() { 63 class Stack extends Array { 64 constructor() { super(); } 65 } 66 let s1 = new Stack(); 67 assertSame(Stack.prototype, s1.__proto__); 68 assertTrue(Array.isArray(s1)); 69 assertSame(0, s1.length); 70 s1[0] = 'xyz'; 71 assertSame(1, s1.length); 72 assertSame('xyz', s1[0]); 73 s1.push(42); 74 assertSame(2, s1.length); 75 assertSame('xyz', s1[0]); 76 assertSame(42, s1[1]); 77 }()); 78 79 80 (function TestOneArgSuper() { 81 class Stack extends Array { 82 constructor(x) { 83 super(x); 84 } 85 } 86 87 { 88 let s2 = new Stack(10, 'ignored arg'); 89 assertSame(Stack.prototype, s2.__proto__); 90 assertTrue(Array.isArray(s2)); 91 assertSame(10, s2.length); 92 assertSame(undefined, s2[0]); 93 } 94 95 { 96 let a = [1,2,3]; 97 let s3 = new Stack(a, 'ignored arg'); 98 assertSame(Stack.prototype, s3.__proto__); 99 assertTrue(Array.isArray(s3)); 100 assertSame(1, s3.length); 101 assertSame(a, s3[0]); 102 } 103 }()); 104 105 106 (function TestMultipleArgsSuper() { 107 class Stack extends Array { 108 constructor(x, y, z) { 109 super(x, y, z); 110 } 111 } 112 { 113 let s4 = new Stack(1, 2, 3, 4, 5); 114 assertSame(Stack.prototype, s4.__proto__); 115 assertTrue(Array.isArray(s4)); 116 assertSame(3, s4.length); 117 assertSame(1, s4[0]); 118 assertSame(2, s4[1]); 119 assertSame(3, s4[2]); 120 } 121 122 { 123 let s5 = new Stack(undefined); 124 assertSame(Stack.prototype, s5.__proto__); 125 assertTrue(Array.isArray(s5)); 126 assertTrue(s5.__proto__ == Stack.prototype); 127 assertSame(3, s5.length); 128 assertSame(undefined, s5[0]); 129 assertSame(undefined, s5[1]); 130 assertSame(undefined, s5[2]); 131 } 132 }()); 133 134 135 (function TestArrayConcat() { 136 class Stack extends Array { } 137 let s1 = new Stack(1,2,3); 138 139 assertArrayEquals([1,2,3,4,5,6], s1.concat([4,5,6])); 140 assertArrayEquals([4,5,6,1,2,3], [4,5,6].concat(s1)); 141 }()); 142 143 144 (function TestJSONStringify() { 145 class Stack extends Array { } 146 147 let s1 = new Stack(1,2,3); 148 assertSame("[1,2,3]", JSON.stringify(s1)); 149 }()); 150