• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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