| Index: test/mjsunit/harmony/super.js
|
| diff --git a/test/mjsunit/harmony/super.js b/test/mjsunit/harmony/super.js
|
| index d1cba533d56f9c3dbee417572808f12b66f8021a..cb13889ec2fb13b40f67708d733a217bbaa3751e 100644
|
| --- a/test/mjsunit/harmony/super.js
|
| +++ b/test/mjsunit/harmony/super.js
|
| @@ -72,6 +72,41 @@
|
| }());
|
|
|
|
|
| +(function TestSuperNumericKeyedLoads() {
|
| + var x = 1;
|
| + var derivedDataProperty = 2;
|
| + var f = 3;
|
| + function Base() { }
|
| + function Derived() {
|
| + this[derivedDataProperty] = 'xxx';
|
| + }
|
| + Derived.prototype = Object.create(Base.prototype);
|
| +
|
| + function fBase() { return "Base " + this.toString(); }
|
| +
|
| + Base.prototype[f] = fBase.toMethod(Base.prototype);
|
| +
|
| + function fDerived() {
|
| + assertEquals("Base this is Derived", super[f]());
|
| + var a = super[x];
|
| + assertEquals(15, a);
|
| + assertEquals(15, super[x]);
|
| + assertEquals(27, this[x]);
|
| +
|
| + return "Derived"
|
| + }
|
| +
|
| + Base.prototype[x] = 15;
|
| + Base.prototype.toString = function() { return "this is Base"; };
|
| + Derived.prototype.toString = function() { return "this is Derived"; };
|
| + Derived.prototype[x] = 27;
|
| + Derived.prototype[f] = fDerived.toMethod(Derived.prototype);
|
| +
|
| + assertEquals("Base this is Base", new Base()[f]());
|
| + assertEquals("Derived", new Derived()[f]());
|
| +}());
|
| +
|
| +
|
| (function TestSuperKeywordNonMethod() {
|
| function f() {
|
| super.unknown();
|
| @@ -167,17 +202,75 @@
|
| return "1";
|
| } };
|
|
|
| - ex = null;
|
| + assertEquals(undefined, super[oReturnsNumericString]);
|
| + assertEquals(undefined, super[1]);
|
| + }.toMethod(Derived.prototype);
|
| + derived = new Derived();
|
| + assertEquals('derived', derived.testGetter());
|
| + derived = new Derived();
|
| + assertEquals('derived', derived.testGetterStrict());
|
| + derived = new Derived();
|
| + derived.testGetterWithToString();
|
| +}());
|
| +
|
| +
|
| +(function TestGetterNumericKeyed() {
|
| + var x = 42;
|
| + function Base() {}
|
| + var derived;
|
| + Base.prototype = {
|
| + constructor: Base,
|
| + _x: 'base'
|
| + };
|
| +
|
| + Object.defineProperty(Base.prototype, x, { get: function() {
|
| + assertSame(this, derived);
|
| + return this._x;
|
| + }});
|
| +
|
| + function Derived() {}
|
| + Derived.__proto__ = Base;
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + constructor: Derived,
|
| + _x: 'derived'
|
| + };
|
| + Derived.prototype.testGetter = function() {
|
| + return super[x];
|
| + }.toMethod(Derived.prototype);
|
| + Derived.prototype.testGetterStrict = function() {
|
| + 'use strict';
|
| + return super[x];
|
| + }.toMethod(Derived.prototype);
|
| +
|
| + Derived.prototype.testGetterWithToString = function() {
|
| + var toStringCalled;
|
| + var o = { toString: function() {
|
| + toStringCalled++;
|
| + return '42';
|
| + } };
|
| +
|
| + toStringCalled = 0;
|
| + assertEquals('derived', super[o]);
|
| + assertEquals(1, toStringCalled);
|
| +
|
| + var eToThrow = new Error();
|
| + var oThrowsInToString = { toString: function() {
|
| + throw eToThrow;
|
| + } };
|
| +
|
| + var ex = null;
|
| try {
|
| - super[oReturnsNumericString];
|
| + super[oThrowsInToString];
|
| } catch(e) { ex = e }
|
| - assertTrue(ex instanceof ReferenceError);
|
| + assertEquals(eToThrow, ex);
|
|
|
| - ex = null;
|
| - try {
|
| - super[1]; // Indexed properties unsupported yet.
|
| - } catch (e) { ex = e; }
|
| - assertTrue(ex instanceof ReferenceError);
|
| + var oReturnsNumericString = { toString: function() {
|
| + return "42";
|
| + } };
|
| +
|
| + assertEquals('derived', super[oReturnsNumericString]);
|
| + assertEquals('derived', super[42]);
|
| }.toMethod(Derived.prototype);
|
| derived = new Derived();
|
| assertEquals('derived', derived.testGetter());
|
| @@ -1096,9 +1189,7 @@
|
|
|
|
|
| (function TestUnsupportedCases() {
|
| - function f1(x) { return super[x]; }
|
| - function f2(x) { super[x] = 5; }
|
| + function f(x) { super[x] = 5; }
|
| var o = {};
|
| - assertThrows(function(){f1.toMethod(o)(15);}, ReferenceError);
|
| - assertThrows(function(){f2.toMethod(o)(15);}, ReferenceError);
|
| + assertThrows(function(){f.toMethod(o)(15);}, ReferenceError);
|
| }());
|
|
|