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