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 6 (function testConstructClassStrict() { 7 "use strict"; 8 class Base { 9 constructor(...args) { 10 this.baseArgs = args; 11 } 12 method() { return this.baseArgs; } 13 } 14 15 class Child extends Base { 16 constructor(...args) { 17 super(...args); 18 this.childArgs = args; 19 } 20 } 21 22 class Child2 extends Base { 23 constructor(...args) { 24 super("extra", ...args); 25 this.childArgs = args; 26 } 27 } 28 29 var c = new Base(...[1, 2, 3]); 30 assertInstanceof(c, Base); 31 assertEquals([1, 2, 3], c.method()); 32 assertEquals([1, 2, 3], c.baseArgs); 33 34 c = new Child(...[1, 2, 3]); 35 assertInstanceof(c, Child); 36 assertInstanceof(c, Base); 37 assertEquals([1, 2, 3], c.method()); 38 assertEquals([1, 2, 3], c.baseArgs); 39 assertEquals([1, 2, 3], c.childArgs); 40 41 c = new Child2(...[1, 2, 3]); 42 assertInstanceof(c, Child2); 43 assertInstanceof(c, Base); 44 assertEquals(["extra", 1, 2, 3], c.method()); 45 assertEquals(["extra", 1, 2, 3], c.baseArgs); 46 assertEquals([1, 2, 3], c.childArgs); 47 })(); 48 49 50 (function testConstructSloppy() { 51 class Base { 52 constructor(...args) { 53 this.baseArgs = args; 54 } 55 method() { return this.baseArgs; } 56 } 57 58 class Child extends Base { 59 constructor(...args) { 60 super(...args); 61 this.childArgs = args; 62 } 63 } 64 65 class Child2 extends Base { 66 constructor(...args) { 67 super("extra", ...args); 68 this.childArgs = args; 69 } 70 } 71 72 var c = new Base(...[1, 2, 3]); 73 assertInstanceof(c, Base); 74 assertEquals([1, 2, 3], c.method()); 75 assertEquals([1, 2, 3], c.baseArgs); 76 77 c = new Child(...[1, 2, 3]); 78 assertInstanceof(c, Child); 79 assertInstanceof(c, Base); 80 assertEquals([1, 2, 3], c.method()); 81 assertEquals([1, 2, 3], c.baseArgs); 82 assertEquals([1, 2, 3], c.childArgs); 83 84 c = new Child2(...[1, 2, 3]); 85 assertInstanceof(c, Child2); 86 assertInstanceof(c, Base); 87 assertEquals(["extra", 1, 2, 3], c.method()); 88 assertEquals(["extra", 1, 2, 3], c.baseArgs); 89 assertEquals([1, 2, 3], c.childArgs); 90 })(); 91