Ben Murdoch | 4a90d5f | 2016-03-22 12:00:34 +0000 | [diff] [blame] | 1 | Tests for ES6 class syntax "extends" |
| 2 | |
| 3 | On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". |
| 4 | |
| 5 | |
| 6 | PASS (new Base) instanceof Base is true |
| 7 | PASS Object.getPrototypeOf(new Base) is Base.prototype |
| 8 | PASS (new Derived) instanceof Derived is true |
| 9 | PASS Object.getPrototypeOf(new Derived) is Derived.prototype |
| 10 | PASS Object.getPrototypeOf(Derived.prototype) is Base.prototype |
| 11 | PASS (new Derived).baseMethod() is "base" |
| 12 | PASS (new Derived).overridenMethod() is "derived" |
| 13 | PASS Derived.staticBaseMethod() is "base" |
| 14 | PASS Derived.staticOverridenMethod() is "derived" |
| 15 | PASS x = class extends threw exception SyntaxError: Unexpected end of input. |
| 16 | PASS x = class extends threw exception SyntaxError: Unexpected end of input. |
| 17 | PASS x = class extends Base { threw exception SyntaxError: Unexpected end of input. |
| 18 | PASS x = class extends Base { } did not throw exception. |
| 19 | PASS x = class extends Base { constructor() { } } did not throw exception. |
| 20 | PASS x.__proto__ is Base |
| 21 | PASS Object.getPrototypeOf(x) is Base |
| 22 | PASS x.prototype.__proto__ is Base.prototype |
| 23 | PASS Object.getPrototypeOf(x.prototype) is Base.prototype |
| 24 | PASS x = class extends null { constructor() { } }; x.__proto__ is Function.prototype |
| 25 | PASS x.__proto__ is Function.prototype |
Ben Murdoch | 61f157c | 2016-09-16 13:49:30 +0100 | [diff] [blame] | 26 | PASS x = class extends 3 { constructor() { } }; x.__proto__ threw exception TypeError: Class extends value 3 is not a constructor or null. |
| 27 | PASS x = class extends "abc" { constructor() { } }; x.__proto__ threw exception TypeError: Class extends value abc is not a constructor or null. |
Ben Murdoch | 4a90d5f | 2016-03-22 12:00:34 +0000 | [diff] [blame] | 28 | PASS baseWithBadPrototype = function () {}; baseWithBadPrototype.prototype = 3; new baseWithBadPrototype did not throw exception. |
| 29 | PASS x = class extends baseWithBadPrototype { constructor() { } } threw exception TypeError: Class extends value does not have valid prototype property 3. |
| 30 | PASS baseWithBadPrototype.prototype = "abc" did not throw exception. |
| 31 | PASS x = class extends baseWithBadPrototype { constructor() { } } threw exception TypeError: Class extends value does not have valid prototype property abc. |
| 32 | PASS baseWithBadPrototype.prototype = null; x = class extends baseWithBadPrototype { constructor() { } } did not throw exception. |
| 33 | PASS x = 1; c = class extends ++x { constructor() { } }; threw exception SyntaxError: Unexpected token ++. |
| 34 | PASS x = 1; c = class extends x++ { constructor() { } }; threw exception SyntaxError: Unexpected token ++. |
Ben Murdoch | 61f157c | 2016-09-16 13:49:30 +0100 | [diff] [blame] | 35 | PASS x = 1; c = class extends (++x) { constructor() { } }; threw exception TypeError: Class extends value 2 is not a constructor or null. |
| 36 | PASS x = 1; c = class extends (x++) { constructor() { } }; threw exception TypeError: Class extends value 1 is not a constructor or null. |
Ben Murdoch | 4a90d5f | 2016-03-22 12:00:34 +0000 | [diff] [blame] | 37 | PASS x = 1; try { c = class extends (++x) { constructor() { } } } catch (e) { }; x is 2 |
| 38 | PASS x = 1; try { c = class extends (x++) { constructor() { } } } catch (e) { }; x is 2 |
| 39 | PASS namespace = {}; namespace.A = class { }; namespace.B = class extends namespace.A { } did not throw exception. |
| 40 | PASS namespace = {}; namespace.A = class A { }; namespace.B = class B extends namespace.A { } did not throw exception. |
| 41 | PASS namespace = {}; namespace.A = class { constructor() { } }; namespace.B = class extends namespace.A { constructor() { } } did not throw exception. |
| 42 | PASS namespace = {}; namespace.A = class A { constructor() { } }; namespace.B = class B extends namespace.A { constructor() { } } did not throw exception. |
| 43 | PASS namespace = {}; namespace.A = class { constructor() { } }; namespace.B = class extends (namespace.A) { constructor() { } } did not throw exception. |
| 44 | PASS namespace = {}; namespace.A = class { constructor() { } }; namespace.B = class extends namespace["A"] { constructor() { } } did not throw exception. |
| 45 | PASS namespace = {}; namespace.A = class { constructor() { } }; function getClassA() { return namespace.A }; namespace.B = class extends getClassA() { constructor() { } } did not throw exception. |
| 46 | PASS namespace = {}; namespace.A = class { constructor() { } }; function getClass(prop) { return namespace[prop] }; namespace.B = class extends getClass("A") { constructor() { } } did not throw exception. |
| 47 | PASS namespace = {}; namespace.A = class { constructor() { } }; namespace.B = class extends (false||null||namespace.A) { constructor() { } } did not throw exception. |
| 48 | PASS namespace = {}; namespace.A = class { constructor() { } }; namespace.B = class extends false||null||namespace.A { constructor() { } } threw exception SyntaxError: Unexpected token ||. |
| 49 | PASS x = 1; namespace = {}; namespace.A = class { constructor() { } }; namespace.B = class extends (x++, namespace.A) { constructor() { } }; did not throw exception. |
Ben Murdoch | 61f157c | 2016-09-16 13:49:30 +0100 | [diff] [blame] | 50 | PASS x = 1; namespace = {}; namespace.A = class { constructor() { } }; namespace.B = class extends (namespace.A, x++) { constructor() { } }; threw exception TypeError: Class extends value 1 is not a constructor or null. |
| 51 | PASS namespace = {}; namespace.A = class { constructor() { } }; namespace.B = class extends new namespace.A { constructor() { } } threw exception TypeError: Class extends value [object Object] is not a constructor or null. |
| 52 | PASS namespace = {}; namespace.A = class { constructor() { } }; namespace.B = class extends new namespace.A() { constructor() { } } threw exception TypeError: Class extends value [object Object] is not a constructor or null. |
Ben Murdoch | 4a90d5f | 2016-03-22 12:00:34 +0000 | [diff] [blame] | 53 | PASS x = 1; namespace = {}; namespace.A = class { constructor() { } }; try { namespace.B = class extends (x++, namespace.A) { constructor() { } } } catch (e) { } x is 2 |
| 54 | PASS x = 1; namespace = {}; namespace.A = class { constructor() { } }; try { namespace.B = class extends (namespace.A, x++) { constructor() { } } } catch (e) { } x is 2 |
| 55 | PASS Object.getPrototypeOf((class { constructor () { } }).prototype) is Object.prototype |
| 56 | PASS Object.getPrototypeOf((class extends null { constructor () { super(); } }).prototype) is null |
Ben Murdoch | 61f157c | 2016-09-16 13:49:30 +0100 | [diff] [blame] | 57 | PASS new (class extends undefined { constructor () { this } }) threw exception TypeError: Class extends value undefined is not a constructor or null. |
| 58 | PASS new (class extends undefined { constructor () { super(); } }) threw exception TypeError: Class extends value undefined is not a constructor or null. |
| 59 | PASS x = {}; new (class extends undefined { constructor () { return x; } }) threw exception TypeError: Class extends value undefined is not a constructor or null. |
| 60 | PASS y = 12; new (class extends undefined { constructor () { return y; } }) threw exception TypeError: Class extends value undefined is not a constructor or null. |
Ben Murdoch | 4a90d5f | 2016-03-22 12:00:34 +0000 | [diff] [blame] | 61 | PASS class x {}; new (class extends null { constructor () { return new x; } }) instanceof x is true |
| 62 | PASS new (class extends null { constructor () { this; } }) threw exception ReferenceError: this is not defined. |
| 63 | PASS new (class extends null { constructor () { super(); } }) threw exception TypeError: super is not a constructor. |
| 64 | PASS x = {}; new (class extends null { constructor () { return x } }) is x |
| 65 | PASS y = 12; new (class extends null { constructor () { return y; } }) threw exception TypeError: Derived constructors may only return object or undefined. |
| 66 | PASS class x {}; new (class extends null { constructor () { return new x; } }) instanceof x is true |
| 67 | PASS x = null; Object.getPrototypeOf((class extends x { }).prototype) is null |
| 68 | PASS Object.prototype.isPrototypeOf(class { }) is true |
| 69 | PASS Function.prototype.isPrototypeOf(class { }) is true |
| 70 | PASS successfullyParsed is true |
| 71 | |
| 72 | TEST COMPLETE |