Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Side by Side Diff: test/mjsunit/harmony/super.js

Issue 622523004: Support for super keyed loads where key is a name. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // Flags: --harmony-classes 5 // Flags: --harmony-classes
6 6
7 7
8 (function TestSuperNamedLoads() { 8 (function TestSuperNamedLoads() {
9 function Base() { } 9 function Base() { }
10 function Derived() { 10 function Derived() {
(...skipping 19 matching lines...) Expand all
30 Base.prototype.toString = function() { return "this is Base"; }; 30 Base.prototype.toString = function() { return "this is Base"; };
31 Derived.prototype.toString = function() { return "this is Derived"; }; 31 Derived.prototype.toString = function() { return "this is Derived"; };
32 Derived.prototype.x = 27; 32 Derived.prototype.x = 27;
33 Derived.prototype.f = fDerived.toMethod(Derived.prototype); 33 Derived.prototype.f = fDerived.toMethod(Derived.prototype);
34 34
35 assertEquals("Base this is Base", new Base().f()); 35 assertEquals("Base this is Base", new Base().f());
36 assertEquals("Derived", new Derived().f()); 36 assertEquals("Derived", new Derived().f());
37 }()); 37 }());
38 38
39 39
40 (function TestSuperKeyedLoads() {
41 var x = 'x';
42 var derivedDataProperty = 'derivedDataProperty';
43 var f = 'f';
44 function Base() { }
45 function Derived() {
46 this[derivedDataProperty] = "xxx";
arv (Not doing code reviews) 2014/10/01 15:20:23 consistency
47 }
48 Derived.prototype = Object.create(Base.prototype);
49
50 function fBase() { return "Base " + this.toString(); }
51
52 Base.prototype[f] = fBase.toMethod(Base.prototype);
53
54 function fDerived() {
55 assertEquals("Base this is Derived", super[f]());
56 var a = super[x];
57 assertEquals(15, a);
58 assertEquals(15, super[x]);
59 assertEquals(27, this[x]);
60
61 return "Derived"
62 }
63
64 Base.prototype[x] = 15;
65 Base.prototype.toString = function() { return "this is Base"; };
66 Derived.prototype.toString = function() { return "this is Derived"; };
67 Derived.prototype[x] = 27;
68 Derived.prototype[f] = fDerived.toMethod(Derived.prototype);
69
70 assertEquals("Base this is Base", new Base().f());
71 assertEquals("Derived", new Derived().f());
72 }());
73
74
arv (Not doing code reviews) 2014/10/01 15:20:23 Can you add tests that uses numeric keys? Can you
40 (function TestSuperKeywordNonMethod() { 75 (function TestSuperKeywordNonMethod() {
41 function f() { 76 function f() {
42 super.unknown(); 77 super.unknown();
43 } 78 }
44 79
45 assertThrows(f, ReferenceError); 80 assertThrows(f, ReferenceError);
46 }()); 81 }());
47 82
48 83
49 (function TestGetter() { 84 (function TestGetter() {
(...skipping 22 matching lines...) Expand all
72 'use strict'; 107 'use strict';
73 return super.x; 108 return super.x;
74 }.toMethod(Derived.prototype); 109 }.toMethod(Derived.prototype);
75 derived = new Derived(); 110 derived = new Derived();
76 assertEquals('derived', derived.testGetter()); 111 assertEquals('derived', derived.testGetter());
77 derived = new Derived(); 112 derived = new Derived();
78 assertEquals('derived', derived.testGetterStrict()); 113 assertEquals('derived', derived.testGetterStrict());
79 }()); 114 }());
80 115
81 116
117 (function TestGetterKeyed() {
118 var x = 'x';
119 function Base() {}
120 var derived;
121 Base.prototype = {
122 constructor: Base,
123 get x() {
124 assertSame(this, derived);
125 return this._x;
126 },
127 _x: 'base'
128 };
129
130 function Derived() {}
131 Derived.__proto__ = Base;
132 Derived.prototype = {
133 __proto__: Base.prototype,
134 constructor: Derived,
135 _x: 'derived'
136 };
137 Derived.prototype.testGetter = function() {
138 return super[x];
139 }.toMethod(Derived.prototype);
140 Derived.prototype.testGetterStrict = function() {
141 'use strict';
142 return super[x];
143 }.toMethod(Derived.prototype);
144 derived = new Derived();
145 assertEquals('derived', derived.testGetter());
146 derived = new Derived();
147 assertEquals('derived', derived.testGetterStrict());
148 }());
149
150
82 (function TestSetter() { 151 (function TestSetter() {
83 function Base() {} 152 function Base() {}
84 Base.prototype = { 153 Base.prototype = {
85 constructor: Base, 154 constructor: Base,
86 get x() { 155 get x() {
87 return this._x; 156 return this._x;
88 }, 157 },
89 set x(v) { 158 set x(v) {
90 this._x = v; 159 this._x = v;
91 }, 160 },
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 }()); 601 }());
533 602
534 603
535 (function TestUnsupportedCases() { 604 (function TestUnsupportedCases() {
536 function f1(x) { return super[x]; } 605 function f1(x) { return super[x]; }
537 function f2(x) { super[x] = 5; } 606 function f2(x) { super[x] = 5; }
538 var o = {}; 607 var o = {};
539 assertThrows(function(){f1.toMethod(o)(x);}, ReferenceError); 608 assertThrows(function(){f1.toMethod(o)(x);}, ReferenceError);
540 assertThrows(function(){f2.toMethod(o)(x);}, ReferenceError); 609 assertThrows(function(){f2.toMethod(o)(x);}, ReferenceError);
541 }()); 610 }());
OLDNEW
« src/runtime/runtime-classes.cc ('K') | « src/runtime/runtime-classes.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698