Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2014 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-classes | |
| 6 | |
| 7 | |
| 8 (function TestSuperKeyword() { | |
| 9 function Base() { } | |
| 10 function Derived() { | |
| 11 this.derivedDataProperty = "xxx"; | |
| 12 } | |
| 13 Derived.prototype = Object.create(Base.prototype); | |
| 14 | |
| 15 function fBase() { return "Base " + this.toString(); } | |
| 16 | |
| 17 Base.prototype.f = fBase.toMethod(Base.prototype); | |
| 18 | |
| 19 function fDerived() { | |
| 20 assertEquals("Base this is Derived", super.f()); | |
| 21 assertEquals("128 from Base", super[128]()); | |
| 22 assertEquals("128 from Derived", this[128]()); | |
| 23 assertEquals(15, super.x); | |
| 24 assertEquals(27, this.x); | |
| 25 assertEquals(27, super[42]); | |
| 26 assertEquals(33, this[42]); | |
| 27 super.x = 5; | |
| 28 assertEquals(5, Base.prototype.x); | |
| 29 assertEquals(5, super.x); | |
| 30 assertEquals(27, this.x); | |
| 31 super[42] = 6; | |
| 32 assertEquals(6, Base.prototype[42]); | |
| 33 assertEquals(6, super[42]); | |
| 34 assertEquals(33, this[42]); | |
| 35 | |
| 36 return "Derived" | |
| 37 } | |
| 38 | |
| 39 Base.prototype.x = 15; | |
| 40 Base.prototype[42] = 27; | |
| 41 Base.prototype[128] = function() { return "128 from Base"; } | |
| 42 Derived.prototype[128] = function() { return "128 from Derived"; } | |
| 43 Base.prototype.toString = function() { return "this is Base"; }; | |
| 44 Derived.prototype.toString = function() { return "this is Derived"; }; | |
| 45 Derived.prototype.x = 27; | |
| 46 Derived.prototype[42] = 33; | |
| 47 Derived.prototype.f = fDerived.toMethod(Derived.prototype); | |
| 48 | |
| 49 assertEquals("Base this is Base", new Base().f()); | |
| 50 assertEquals("Derived", new Derived().f()); | |
| 51 }()); | |
| 52 | |
| 53 (function TestSuperKeywordNonMethod() { | |
| 54 function f() { | |
| 55 super.unknown(); | |
| 56 } | |
| 57 | |
| 58 function g() { | |
| 59 super['unknown'] = 5; | |
| 60 } | |
| 61 assertThrows(f, ReferenceError); | |
| 62 assertThrows(g, ReferenceError); | |
| 63 }()); | |
| 64 | |
| 65 | |
| 66 (function TestGetter() { | |
| 67 function Base() {} | |
| 68 var derived; | |
| 69 Base.prototype = { | |
| 70 constructor: Base, | |
| 71 get x() { | |
| 72 assertTrue(this === derived); | |
|
Toon Verwaest
2014/09/15 13:16:43
assertSame
Dmitry Lomov (no reviews)
2014/09/16 13:15:55
Done.
| |
| 73 return this._x; | |
| 74 }, | |
| 75 _x: 'base' | |
| 76 }; | |
| 77 | |
| 78 function Derived() {} | |
| 79 Derived.__proto__ = Base; | |
| 80 Derived.prototype = { | |
| 81 __proto__: Base.prototype, | |
| 82 constructor: Derived, | |
| 83 _x: 'derived' | |
| 84 }; | |
| 85 Derived.prototype.testGetter = function() { | |
| 86 return super.x; | |
| 87 }.toMethod(Derived.prototype); | |
|
arv (Not doing code reviews)
2014/09/15 15:22:57
Still wrong indentation. function bodies indent 2
Dmitry Lomov (no reviews)
2014/09/16 13:15:55
Done.
| |
| 88 derived = new Derived(); | |
| 89 assertEquals('derived', derived.testGetter()); | |
| 90 }()); | |
| 91 | |
| 92 /* | |
| 93 * TODO[dslomov]: named stores and keyed loads/stores not implemented yet. | |
| 94 (function TestSetter() { | |
| 95 function Base() {} | |
| 96 Base.prototype = { | |
| 97 constructor: Base, | |
| 98 get x() { | |
| 99 return this._x; | |
| 100 }, | |
| 101 set x(v) { | |
| 102 this._x = v; | |
| 103 }, | |
| 104 _x: 'base' | |
| 105 }; | |
| 106 | |
| 107 function Derived() {} | |
| 108 Derived.__proto__ = Base; | |
| 109 Derived.prototype = { | |
| 110 __proto__: Base.prototype, | |
| 111 constructor: Derived, | |
| 112 _x: 'derived' | |
| 113 }; | |
| 114 Derived.prototype.testSetter = function() { | |
| 115 super.x = 'foobar'; | |
| 116 }.toMethod(Derived.prototype); | |
| 117 var d = new Derived(); | |
| 118 d.testSetter(); | |
| 119 assertEquals('base', Base.prototype._x); | |
| 120 assertEquals('foobar', d._x); | |
| 121 }()); | |
| 122 | |
| 123 | |
| 124 (function TestKeyedGetter() { | |
| 125 function Base() {} | |
| 126 Base.prototype = { | |
| 127 constructor: Base, | |
| 128 _x: 'base' | |
| 129 }; | |
| 130 | |
| 131 Object.defineProperty(Base.prototype, '0', | |
| 132 { get: function() { return this._x; } }); | |
| 133 | |
| 134 function Derived() {} | |
| 135 Derived.__proto__ = Base; | |
| 136 Derived.prototype = { | |
| 137 __proto__: Base.prototype, | |
| 138 constructor: Derived, | |
| 139 _x: 'derived' | |
| 140 }; | |
| 141 Derived.prototype.testGetter = function() { | |
| 142 return super[0]; | |
| 143 }.toMethod(Derived.prototype); | |
| 144 assertEquals('derived', new Derived()[0]); | |
| 145 // assertEquals('derived', new Derived().testGetter()); | |
| 146 }()); | |
| 147 */ | |
| OLD | NEW |