| Tests for ES6 class syntax "super" |
| |
| On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". |
| |
| |
| PASS (new Base) instanceof Base |
| PASS (new Derived) instanceof Derived |
| PASS (new DerivedWithEval) instanceof DerivedWithEval |
| PASS (new DerivedWithEval(true)):::ReferenceError: 'super()' must be called in derived constructor before accessing |this| or returning non-object. |
| PASS (new Derived).callBaseMethod():::baseMethodValue |
| PASS x = (new Derived).callBaseMethod; x():::baseMethodValue |
| PASS (new Derived).callBaseMethodInGetter:::baseMethodValue |
| PASS (new Derived).callBaseMethodInSetter = 1; valueInSetter:::baseMethodValue |
| PASS (new Derived).baseMethodInGetterSetter:::(new Base).baseMethod |
| PASS (new Derived).baseMethodInGetterSetter = 1; valueInSetter:::(new Base).baseMethod |
| PASS Derived.staticMethod():::"base3" |
| PASS (new SecondDerived).chainMethod().toString():::["base", "derived", "secondDerived"].toString() |
| PASS x = class extends Base { constructor() { super(); } super() {} } |
| PASS x = class extends Base { constructor() { super(); } method() { super() } }:::SyntaxError: super is not valid in this context. |
| PASS x = class extends Base { constructor() { super(); } method() { super } }:::SyntaxError: super is not valid in this context. |
| PASS x = class extends Base { constructor() { super(); } method() { return new super } }:::SyntaxError: Cannot use new with super call. |
| PASS x = class extends Base { constructor() { super(); } method1() { delete (super.foo) } method2() { delete super["foo"] } } |
| PASS (new x).method1():::ReferenceError: Cannot delete a super property |
| PASS (new x).method2():::ReferenceError: Cannot delete a super property |
| PASS (new (class { constructor() { super.property = "ABC"; } })).property === "ABC" |
| PASS (new (class extends Base { constructor() { super(); super.property = "ABC"; } })).property === "ABC" |
| PASS (new (class { constructor() { var arr = () => super.property = "ABC"; arr(); } })).property === "ABC" |
| PASS (new (class { constructor() { var async_arr = async () => super.property = "ABC"; async_arr(); } })).property === "ABC" |
| PASS (new (class { constructor() { eval('super.property = "ABC"'); } })).property === "ABC" |
| PASS (new (class { constructor() { var arr = () => eval('super.property = "ABC"'); arr(); } })).property === "ABC" |
| PASS new (class { constructor() { return undefined; } }) instanceof Object |
| PASS new (class { constructor() { return 1; } }) instanceof Object |
| PASS new (class extends Base { constructor() { return undefined } }):::ReferenceError: 'super()' must be called in derived constructor before accessing |this| or returning non-object. |
| PASS new (class extends Base { constructor() { super(); return undefined } }) instanceof Object |
| PASS x = { }; new (class extends Base { constructor() { return x } });:::x |
| PASS x instanceof Base |
| PASS new (class extends Base { constructor() { } }):::ReferenceError: 'super()' must be called in derived constructor before accessing |this| or returning non-object. |
| PASS new (class extends Base { constructor() { return 1; } }):::TypeError: Cannot return a non-object type in the constructor of a derived class. |
| PASS new (class extends null { constructor() { return undefined } }):::ReferenceError: 'super()' must be called in derived constructor before accessing |this| or returning non-object. |
| PASS new (class extends null { constructor() { super(); return undefined } }):::TypeError: function is not a constructor (evaluating 'super()') |
| PASS x = { }; new (class extends null { constructor() { return x } });:::x |
| PASS x instanceof Object |
| PASS new (class extends null { constructor() { } }):::ReferenceError: 'super()' must be called in derived constructor before accessing |this| or returning non-object. |
| PASS new (class extends null { constructor() { return 1; } }):::TypeError: Cannot return a non-object type in the constructor of a derived class. |
| PASS new (class extends null { constructor() { super() } }):::TypeError: function is not a constructor (evaluating 'super()') |
| PASS new (class { constructor() { super() } }):::SyntaxError: super is not valid in this context. |
| PASS function x() { super(); }:::SyntaxError: super is not valid in this context. |
| PASS new (class extends Object { constructor() { function x() { super() } } }):::SyntaxError: super is not valid in this context. |
| PASS new (class extends Object { constructor() { function x() { super.method } } }):::SyntaxError: super is not valid in this context. |
| PASS function x() { super.method(); }:::SyntaxError: super is not valid in this context. |
| PASS function x() { super(); }:::SyntaxError: super is not valid in this context. |
| PASS eval("super.method()"):::SyntaxError: super is not valid in this context. |
| PASS eval("super()"):::SyntaxError: super is not valid in this context. |
| PASS (function () { eval("super.method()");})():::SyntaxError: super is not valid in this context. |
| PASS (function () { eval("super()");})():::SyntaxError: super is not valid in this context. |
| PASS new (class { constructor() { (function () { eval("super()");})(); } }):::SyntaxError: super is not valid in this context. |
| PASS (new (class { method() { (function () { eval("super.method()");})(); }})).method():::SyntaxError: super is not valid in this context. |
| PASS new (class extends Base { constructor() { super(); super();}}):::ReferenceError: 'super()' can't be called more than once in a constructor. |
| PASS (new class D extends class { m() {}} { constructor() { eval('super["m"]()') } }):::ReferenceError: 'super()' must be called in derived constructor before accessing |this| or returning non-object. |
| PASS new class extends class { m() {}} { constructor() { super["m"](super()) } }:::ReferenceError: 'super()' must be called in derived constructor before accessing |this| or returning non-object. |
| PASS (new class D extends class { m() {}} { constructor(f) { super[f()]() } }(()=>"m")):::ReferenceError: 'super()' must be called in derived constructor before accessing |this| or returning non-object. |
| PASS (new class D extends class { m() {}} { constructor() { super(); eval('super["m"]()') } }) |
| PASS new class extends class { m() {}} { constructor() { super(); super["m"](super()) } }:::ReferenceError: 'super()' can't be called more than once in a constructor. |
| PASS (new class D extends class { m() {}} { constructor(f) { super(); super[f()]() } }(()=>"m")) |
| PASS successfullyParsed |
| |
| TEST COMPLETE |
| |