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

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

Issue 638193004: Keyed loads from super with numeric keys. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Minor test update 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
« no previous file with comments | « test/cctest/test-api.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 Base.prototype.toString = function() { return "this is Base"; }; 65 Base.prototype.toString = function() { return "this is Base"; };
66 Derived.prototype.toString = function() { return "this is Derived"; }; 66 Derived.prototype.toString = function() { return "this is Derived"; };
67 Derived.prototype[x] = 27; 67 Derived.prototype[x] = 27;
68 Derived.prototype[f] = fDerived.toMethod(Derived.prototype); 68 Derived.prototype[f] = fDerived.toMethod(Derived.prototype);
69 69
70 assertEquals("Base this is Base", new Base().f()); 70 assertEquals("Base this is Base", new Base().f());
71 assertEquals("Derived", new Derived().f()); 71 assertEquals("Derived", new Derived().f());
72 }()); 72 }());
73 73
74 74
75 (function TestSuperNumericKeyedLoads() {
76 var x = 1;
77 var derivedDataProperty = 2;
78 var f = 3;
79 function Base() { }
80 function Derived() {
81 this[derivedDataProperty] = 'xxx';
82 }
83 Derived.prototype = Object.create(Base.prototype);
84
85 function fBase() { return "Base " + this.toString(); }
86
87 Base.prototype[f] = fBase.toMethod(Base.prototype);
88
89 function fDerived() {
90 assertEquals("Base this is Derived", super[f]());
91 var a = super[x];
92 assertEquals(15, a);
93 assertEquals(15, super[x]);
94 assertEquals(27, this[x]);
95
96 return "Derived"
97 }
98
99 Base.prototype[x] = 15;
100 Base.prototype.toString = function() { return "this is Base"; };
101 Derived.prototype.toString = function() { return "this is Derived"; };
102 Derived.prototype[x] = 27;
103 Derived.prototype[f] = fDerived.toMethod(Derived.prototype);
104
105 assertEquals("Base this is Base", new Base()[f]());
106 assertEquals("Derived", new Derived()[f]());
107 }());
108
109
75 (function TestSuperKeywordNonMethod() { 110 (function TestSuperKeywordNonMethod() {
76 function f() { 111 function f() {
77 super.unknown(); 112 super.unknown();
78 } 113 }
79 114
80 assertThrows(f, ReferenceError); 115 assertThrows(f, ReferenceError);
81 }()); 116 }());
82 117
83 118
84 (function TestGetter() { 119 (function TestGetter() {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 var ex = null; 195 var ex = null;
161 try { 196 try {
162 super[oThrowsInToString]; 197 super[oThrowsInToString];
163 } catch(e) { ex = e } 198 } catch(e) { ex = e }
164 assertEquals(eToThrow, ex); 199 assertEquals(eToThrow, ex);
165 200
166 var oReturnsNumericString = { toString: function() { 201 var oReturnsNumericString = { toString: function() {
167 return "1"; 202 return "1";
168 } }; 203 } };
169 204
170 ex = null; 205 assertEquals(undefined, super[oReturnsNumericString]);
171 try { 206 assertEquals(undefined, super[1]);
172 super[oReturnsNumericString];
173 } catch(e) { ex = e }
174 assertTrue(ex instanceof ReferenceError);
175
176 ex = null;
177 try {
178 super[1]; // Indexed properties unsupported yet.
179 } catch (e) { ex = e; }
180 assertTrue(ex instanceof ReferenceError);
181 }.toMethod(Derived.prototype); 207 }.toMethod(Derived.prototype);
182 derived = new Derived(); 208 derived = new Derived();
183 assertEquals('derived', derived.testGetter()); 209 assertEquals('derived', derived.testGetter());
210 derived = new Derived();
211 assertEquals('derived', derived.testGetterStrict());
212 derived = new Derived();
213 derived.testGetterWithToString();
214 }());
215
216
217 (function TestGetterNumericKeyed() {
218 var x = 42;
219 function Base() {}
220 var derived;
221 Base.prototype = {
222 constructor: Base,
223 _x: 'base'
224 };
225
226 Object.defineProperty(Base.prototype, x, { get: function() {
227 assertSame(this, derived);
228 return this._x;
229 }});
230
231 function Derived() {}
232 Derived.__proto__ = Base;
233 Derived.prototype = {
234 __proto__: Base.prototype,
235 constructor: Derived,
236 _x: 'derived'
237 };
238 Derived.prototype.testGetter = function() {
239 return super[x];
240 }.toMethod(Derived.prototype);
241 Derived.prototype.testGetterStrict = function() {
242 'use strict';
243 return super[x];
244 }.toMethod(Derived.prototype);
245
246 Derived.prototype.testGetterWithToString = function() {
247 var toStringCalled;
248 var o = { toString: function() {
249 toStringCalled++;
250 return '42';
251 } };
252
253 toStringCalled = 0;
254 assertEquals('derived', super[o]);
255 assertEquals(1, toStringCalled);
256
257 var eToThrow = new Error();
258 var oThrowsInToString = { toString: function() {
259 throw eToThrow;
260 } };
261
262 var ex = null;
263 try {
264 super[oThrowsInToString];
265 } catch(e) { ex = e }
266 assertEquals(eToThrow, ex);
267
268 var oReturnsNumericString = { toString: function() {
269 return "42";
270 } };
271
272 assertEquals('derived', super[oReturnsNumericString]);
273 assertEquals('derived', super[42]);
274 }.toMethod(Derived.prototype);
275 derived = new Derived();
276 assertEquals('derived', derived.testGetter());
184 derived = new Derived(); 277 derived = new Derived();
185 assertEquals('derived', derived.testGetterStrict()); 278 assertEquals('derived', derived.testGetterStrict());
186 derived = new Derived(); 279 derived = new Derived();
187 derived.testGetterWithToString(); 280 derived.testGetterWithToString();
188 }()); 281 }());
189 282
190 283
191 (function TestSetter() { 284 (function TestSetter() {
192 function Base() {} 285 function Base() {}
193 Base.prototype = { 286 Base.prototype = {
(...skipping 895 matching lines...) Expand 10 before | Expand all | Expand 10 after
1089 this.fromDerived = v2; 1182 this.fromDerived = v2;
1090 }); 1183 });
1091 1184
1092 var d = new Derived2("base", "derived"); 1185 var d = new Derived2("base", "derived");
1093 assertEquals("base", d.fromBase); 1186 assertEquals("base", d.fromBase);
1094 assertEquals("derived", d.fromDerived); 1187 assertEquals("derived", d.fromDerived);
1095 }()); 1188 }());
1096 1189
1097 1190
1098 (function TestUnsupportedCases() { 1191 (function TestUnsupportedCases() {
1099 function f1(x) { return super[x]; } 1192 function f(x) { super[x] = 5; }
1100 function f2(x) { super[x] = 5; }
1101 var o = {}; 1193 var o = {};
1102 assertThrows(function(){f1.toMethod(o)(15);}, ReferenceError); 1194 assertThrows(function(){f.toMethod(o)(15);}, ReferenceError);
1103 assertThrows(function(){f2.toMethod(o)(15);}, ReferenceError);
1104 }()); 1195 }());
OLDNEW
« no previous file with comments | « test/cctest/test-api.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698