Home | History | Annotate | Download | only in es6
      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