| Index: test/mjsunit/harmony/super.js
|
| diff --git a/test/mjsunit/harmony/super.js b/test/mjsunit/harmony/super.js
|
| index 6dcc393cceb23a26232c0d458880f8952d45c1c9..bf805a4304a4ca65101bf253247d2d69f71c7f6a 100644
|
| --- a/test/mjsunit/harmony/super.js
|
| +++ b/test/mjsunit/harmony/super.js
|
| @@ -1,36 +1,38 @@
|
| // Copyright 2014 the V8 project authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
| -//
|
| -// Flags: --harmony-classes
|
|
|
| +// Flags: --harmony-classes
|
|
|
| (function TestSuperNamedLoads() {
|
| function Base() { }
|
| + function fBase() { }
|
| + Base.prototype = {
|
| + f() {
|
| + return "Base " + this.toString();
|
| + },
|
| + x: 15,
|
| + toString() {
|
| + return "this is 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);
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + toString() { return "this is Derived"; },
|
| + x: 27,
|
| + f() {
|
| + assertEquals("Base this is Derived", super.f());
|
| + var a = super.x;
|
| + assertEquals(15, a);
|
| + assertEquals(15, super.x);
|
| + assertEquals(27, this.x);
|
| + return "Derived";
|
| + }
|
| + };
|
|
|
| assertEquals("Base this is Base", new Base().f());
|
| assertEquals("Derived", new Derived().f());
|
| @@ -41,31 +43,29 @@
|
| var x = 'x';
|
| var derivedDataProperty = 'derivedDataProperty';
|
| var f = 'f';
|
| - function Base() { }
|
| - function Derived() {
|
| - this[derivedDataProperty] = 'xxx';
|
| - }
|
| - Derived.prototype = Object.create(Base.prototype);
|
|
|
| + function Base() { }
|
| 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);
|
| +
|
| + function Derived() {
|
| + this[derivedDataProperty] = "xxx";
|
| + }
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + toString() { return "this is Derived"; },
|
| + x: 27,
|
| + f() {
|
| + assertEquals("Base this is Derived", super[f]());
|
| + var a = super[x];
|
| + assertEquals(15, a);
|
| + assertEquals(15, super[x]);
|
| + assertEquals(27, this[x]);
|
| + return "Derived";
|
| + }
|
| + };
|
|
|
| assertEquals("Base this is Base", new Base().f());
|
| assertEquals("Derived", new Derived().f());
|
| @@ -76,31 +76,29 @@
|
| var x = 1;
|
| var derivedDataProperty = 2;
|
| var f = 3;
|
| - function Base() { }
|
| - function Derived() {
|
| - this[derivedDataProperty] = 'xxx';
|
| - }
|
| - Derived.prototype = Object.create(Base.prototype);
|
|
|
| + function Base() { }
|
| 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);
|
| +
|
| + function Derived() {
|
| + this[derivedDataProperty] = "xxx";
|
| + }
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + toString() { return "this is Derived"; },
|
| + 1: 27,
|
| + 3() {
|
| + assertEquals("Base this is Derived", super[f]());
|
| + var a = super[x];
|
| + assertEquals(15, a);
|
| + assertEquals(15, super[x]);
|
| + assertEquals(27, this[x]);
|
| + return "Derived";
|
| + }
|
| + };
|
|
|
| assertEquals("Base this is Base", new Base()[f]());
|
| assertEquals("Derived", new Derived()[f]());
|
| @@ -108,11 +106,17 @@
|
|
|
|
|
| (function TestSuperKeywordNonMethod() {
|
| - function f() {
|
| - super.unknown();
|
| + 'use strict';
|
| +
|
| + class C {
|
| + f() {
|
| + super.unknown();
|
| + }
|
| }
|
|
|
| - assertThrows(f, ReferenceError);
|
| + assertThrows(function() {
|
| + new C().f();
|
| + }, TypeError);
|
| }());
|
|
|
|
|
| @@ -133,15 +137,16 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| - _x: 'derived'
|
| + _x: 'derived',
|
| + testGetter() {
|
| + return super.x;
|
| + },
|
| + testGetterStrict() {
|
| + 'use strict';
|
| + return super.x;
|
| + }
|
| };
|
| - Derived.prototype.testGetter = function() {
|
| - return super.x;
|
| - }.toMethod(Derived.prototype);
|
| - Derived.prototype.testGetterStrict = function() {
|
| - 'use strict';
|
| - return super.x;
|
| - }.toMethod(Derived.prototype);
|
| +
|
| derived = new Derived();
|
| assertEquals('derived', derived.testGetter());
|
| derived = new Derived();
|
| @@ -167,44 +172,45 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| - _x: 'derived'
|
| + _x: 'derived',
|
| + testGetter() {
|
| + return super[x];
|
| + },
|
| + testGetterStrict() {
|
| + 'use strict';
|
| + return super[x];
|
| + },
|
| + testGetterWithToString() {
|
| + var toStringCalled;
|
| + var o = { toString: function() {
|
| + toStringCalled++;
|
| + return 'x';
|
| + } };
|
| +
|
| + toStringCalled = 0;
|
| + assertEquals('derived', super[o]);
|
| + assertEquals(1, toStringCalled);
|
| +
|
| + var eToThrow = new Error();
|
| + var oThrowsInToString = { toString: function() {
|
| + throw eToThrow;
|
| + } };
|
| +
|
| + var ex = null;
|
| + try {
|
| + super[oThrowsInToString];
|
| + } catch(e) { ex = e }
|
| + assertEquals(eToThrow, ex);
|
| +
|
| + var oReturnsNumericString = { toString: function() {
|
| + return "1";
|
| + } };
|
| +
|
| + assertEquals(undefined, super[oReturnsNumericString]);
|
| + assertEquals(undefined, super[1]);
|
| + }
|
| };
|
| - 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 'x';
|
| - } };
|
| -
|
| - toStringCalled = 0;
|
| - assertEquals('derived', super[o]);
|
| - assertEquals(1, toStringCalled);
|
| -
|
| - var eToThrow = new Error();
|
| - var oThrowsInToString = { toString: function() {
|
| - throw eToThrow;
|
| - } };
|
| -
|
| - var ex = null;
|
| - try {
|
| - super[oThrowsInToString];
|
| - } catch(e) { ex = e }
|
| - assertEquals(eToThrow, ex);
|
| -
|
| - var oReturnsNumericString = { toString: function() {
|
| - return "1";
|
| - } };
|
| -
|
| - assertEquals(undefined, super[oReturnsNumericString]);
|
| - assertEquals(undefined, super[1]);
|
| - }.toMethod(Derived.prototype);
|
| +
|
| derived = new Derived();
|
| assertEquals('derived', derived.testGetter());
|
| derived = new Derived();
|
| @@ -233,45 +239,51 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| - _x: 'derived'
|
| + _x: 'derived',
|
| + testGetter() {
|
| + return super[x];
|
| + },
|
| + testGetterStrict() {
|
| + 'use strict';
|
| + return super[x];
|
| + },
|
| + testGetterWithToString() {
|
| + 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[oThrowsInToString];
|
| + } catch(e) { ex = e }
|
| + assertEquals(eToThrow, ex);
|
| +
|
| + var oReturnsNumericString = {
|
| + toString: function() {
|
| + return "42";
|
| + }
|
| + };
|
| +
|
| + assertEquals('derived', super[oReturnsNumericString]);
|
| + assertEquals('derived', super[42]);
|
| + }
|
| };
|
| - 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[oThrowsInToString];
|
| - } catch(e) { ex = e }
|
| - assertEquals(eToThrow, ex);
|
| -
|
| - var oReturnsNumericString = { toString: function() {
|
| - return "42";
|
| - } };
|
| -
|
| - assertEquals('derived', super[oReturnsNumericString]);
|
| - assertEquals('derived', super[42]);
|
| - }.toMethod(Derived.prototype);
|
| +
|
| derived = new Derived();
|
| assertEquals('derived', derived.testGetter());
|
| derived = new Derived();
|
| @@ -299,22 +311,24 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| - _x: 'derived'
|
| + _x: 'derived',
|
| + testSetter() {
|
| + assertEquals('foobar', super.x = 'foobar');
|
| + assertEquals('foobarabc', super.x += 'abc');
|
| + },
|
| + testSetterStrict() {
|
| + 'use strict';
|
| + assertEquals('foobar', super.x = 'foobar');
|
| + assertEquals('foobarabc', super.x += 'abc');
|
| + }
|
| };
|
| - Derived.prototype.testSetter = function() {
|
| - assertEquals('foobar', super.x = 'foobar');
|
| - assertEquals('foobarabc', super.x += 'abc');
|
| - }.toMethod(Derived.prototype);
|
| +
|
| var d = new Derived();
|
| d.testSetter();
|
| assertEquals('base', Base.prototype._x);
|
| assertEquals('foobarabc', d._x);
|
| d._x = '';
|
| - Derived.prototype.testSetterStrict = function() {
|
| - 'use strict';
|
| - assertEquals('foobar', super.x = 'foobar');
|
| - assertEquals('foobarabc', super.x += 'abc');
|
| - }.toMethod(Derived.prototype);
|
| +
|
| d.testSetterStrict();
|
| assertEquals('base', Base.prototype._x);
|
| assertEquals('foobarabc', d._x);
|
| @@ -339,51 +353,56 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| - _x: 'derived'
|
| + _x: 'derived',
|
| + testSetter() {
|
| + assertEquals('foobar', super[x] = 'foobar');
|
| + assertEquals('foobarabc', super[x] += 'abc');
|
| + },
|
| + testSetterStrict() {
|
| + 'use strict';
|
| + assertEquals('foobar', super[x] = 'foobar');
|
| + assertEquals('foobarabc', super[x] += 'abc');
|
| + },
|
| + testSetterWithToString() {
|
| + var toStringCalled;
|
| + var o = {
|
| + toString: function() {
|
| + toStringCalled++;
|
| + return x;
|
| + }
|
| + };
|
| +
|
| + toStringCalled = 0;
|
| + super[o] = 'set';
|
| + assertEquals(1, toStringCalled);
|
| + assertEquals('set', this._x);
|
| +
|
| + var eToThrow = new Error();
|
| + var oThrowsInToString = {
|
| + toString: function() {
|
| + throw eToThrow;
|
| + }
|
| + };
|
| +
|
| + var ex = null;
|
| + try {
|
| + super[oThrowsInToString] = 'xyz';
|
| + } catch(e) { ex = e }
|
| + assertEquals(eToThrow, ex);
|
| + assertEquals('set', this._x);
|
| + }
|
| };
|
| - Derived.prototype.testSetter = function() {
|
| - assertEquals('foobar', super[x] = 'foobar');
|
| - assertEquals('foobarabc', super[x] += 'abc');
|
| - }.toMethod(Derived.prototype);
|
| +
|
| var d = new Derived();
|
| d.testSetter();
|
| assertEquals('base', Base.prototype._x);
|
| assertEquals('foobarabc', d._x);
|
| d._x = '';
|
| - Derived.prototype.testSetterStrict = function() {
|
| - 'use strict';
|
| - assertEquals('foobar', super[x] = 'foobar');
|
| - assertEquals('foobarabc', super[x] += 'abc');
|
| - }.toMethod(Derived.prototype);
|
| +
|
| d.testSetterStrict();
|
| assertEquals('base', Base.prototype._x);
|
| assertEquals('foobarabc', d._x);
|
|
|
| -
|
| - Derived.prototype.testSetterWithToString = function() {
|
| - var toStringCalled;
|
| - var o = { toString: function() {
|
| - toStringCalled++;
|
| - return x;
|
| - } };
|
| -
|
| - toStringCalled = 0;
|
| - super[o] = 'set';
|
| - assertEquals(1, toStringCalled);
|
| - assertEquals('set', this._x);
|
| -
|
| - var eToThrow = new Error();
|
| - var oThrowsInToString = { toString: function() {
|
| - throw eToThrow;
|
| - } };
|
| -
|
| - var ex = null;
|
| - try {
|
| - super[oThrowsInToString] = 'xyz';
|
| - } catch(e) { ex = e }
|
| - assertEquals(eToThrow, ex);
|
| - assertEquals('set', this._x);
|
| - }.toMethod(Derived.prototype);
|
| d = new Derived();
|
| d.testSetterWithToString();
|
| }());
|
| @@ -408,61 +427,67 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| - _x: 'derived'
|
| + _x: 'derived',
|
| + testSetter() {
|
| + assertEquals('foobar', super[x] = 'foobar');
|
| + assertEquals('foobarabc', super[x] += 'abc');
|
| + },
|
| + testSetterStrict() {
|
| + 'use strict';
|
| + assertEquals('foobar', super[x] = 'foobar');
|
| + assertEquals('foobarabc', super[x] += 'abc');
|
| + },
|
| + testSetterWithToString() {
|
| + var toStringCalled;
|
| + var o = {
|
| + toString: function() {
|
| + toStringCalled++;
|
| + return 'x';
|
| + }
|
| + };
|
| +
|
| + toStringCalled = 0;
|
| + super[o] = 'set';
|
| + assertEquals(1, toStringCalled);
|
| + assertEquals('set', this._x);
|
| +
|
| + var eToThrow = new Error();
|
| + var oThrowsInToString = {
|
| + toString: function() {
|
| + throw eToThrow;
|
| + }
|
| + };
|
| +
|
| + var ex = null;
|
| + try {
|
| + super[oThrowsInToString] = 'xyz';
|
| + } catch(e) { ex = e }
|
| + assertEquals(eToThrow, ex);
|
| + assertEquals('set', this._x);
|
| +
|
| + var oReturnsNumericString = {
|
| + toString: function() {
|
| + return "1";
|
| + }
|
| + };
|
| +
|
| + assertEquals('abc', super[oReturnsNumericString] = 'abc');
|
| +
|
| + assertEquals('set', this._x);
|
| +
|
| + assertEquals(10, super[1] = 10);
|
| + }
|
| };
|
| - Derived.prototype.testSetter = function() {
|
| - assertEquals('foobar', super[x] = 'foobar');
|
| - assertEquals('foobarabc', super[x] += 'abc');
|
| - }.toMethod(Derived.prototype);
|
| +
|
| var d = new Derived();
|
| d.testSetter();
|
| assertEquals('base', Base.prototype._x);
|
| assertEquals('foobarabc', d._x);
|
| d._x = '';
|
| - Derived.prototype.testSetterStrict = function() {
|
| - 'use strict';
|
| - assertEquals('foobar', super[x] = 'foobar');
|
| - assertEquals('foobarabc', super[x] += 'abc');
|
| - }.toMethod(Derived.prototype);
|
| d.testSetterStrict();
|
| assertEquals('base', Base.prototype._x);
|
| assertEquals('foobarabc', d._x);
|
|
|
| -
|
| - Derived.prototype.testSetterWithToString = function() {
|
| - var toStringCalled;
|
| - var o = { toString: function() {
|
| - toStringCalled++;
|
| - return 'x';
|
| - } };
|
| -
|
| - toStringCalled = 0;
|
| - super[o] = 'set';
|
| - assertEquals(1, toStringCalled);
|
| - assertEquals('set', this._x);
|
| -
|
| - var eToThrow = new Error();
|
| - var oThrowsInToString = { toString: function() {
|
| - throw eToThrow;
|
| - } };
|
| -
|
| - var ex = null;
|
| - try {
|
| - super[oThrowsInToString] = 'xyz';
|
| - } catch(e) { ex = e }
|
| - assertEquals(eToThrow, ex);
|
| - assertEquals('set', this._x);
|
| -
|
| - var oReturnsNumericString = { toString: function() {
|
| - return "1";
|
| - } };
|
| -
|
| - assertEquals('abc', super[oReturnsNumericString] = 'abc');
|
| -
|
| - assertEquals('set', this._x);
|
| -
|
| - assertEquals(10, super[1] = 10);
|
| - }.toMethod(Derived.prototype);
|
| d = new Derived();
|
| d.testSetterWithToString();
|
| }());
|
| @@ -479,15 +504,14 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| + testSetter() {
|
| + assertEquals('x from Base', super.x);
|
| + super.x = 'data property';
|
| + assertEquals('x from Base', super.x);
|
| + assertEquals('data property', this.x);
|
| + }
|
| };
|
|
|
| - Derived.prototype.testSetter = function() {
|
| - assertEquals('x from Base', super.x);
|
| - super.x = 'data property';
|
| - assertEquals('x from Base', super.x);
|
| - assertEquals('data property', this.x);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| new Derived().testSetter();
|
| }());
|
|
|
| @@ -504,15 +528,14 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| + testSetter() {
|
| + assertEquals('x from Base', super[x]);
|
| + super[x] = 'data property';
|
| + assertEquals('x from Base', super[x]);
|
| + assertEquals('data property', this[x]);
|
| + }
|
| };
|
|
|
| - Derived.prototype.testSetter = function() {
|
| - assertEquals('x from Base', super[x]);
|
| - super[x] = 'data property';
|
| - assertEquals('x from Base', super[x]);
|
| - assertEquals('data property', this[x]);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| new Derived().testSetter();
|
| }());
|
|
|
| @@ -529,15 +552,14 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| + testSetter() {
|
| + assertEquals('x from Base', super[x]);
|
| + super[x] = 'data property';
|
| + assertEquals('x from Base', super[x]);
|
| + assertEquals('data property', this[x]);
|
| + }
|
| };
|
|
|
| - Derived.prototype.testSetter = function() {
|
| - assertEquals('x from Base', super[x]);
|
| - super[x] = 'data property';
|
| - assertEquals('x from Base', super[x]);
|
| - assertEquals('data property', this[x]);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| new Derived().testSetter();
|
| }());
|
|
|
| @@ -562,73 +584,74 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| - };
|
| - Derived.prototype.testSetter = function() {
|
| - setCalled = 0;
|
| - getCalled = 0;
|
| - assertEquals('object', typeof this);
|
| - assertTrue(this instanceof Number)
|
| - assertEquals(42, this.valueOf());
|
| - assertEquals(1, super.x);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - assertEquals(5, super.x = 5);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(1, setCalled);
|
| -
|
| - assertEquals(6, super.x += 5);
|
| - assertEquals(2, getCalled);
|
| - assertEquals(2, setCalled);
|
| -
|
| - super.newProperty = 15;
|
| - assertEquals(15, this.newProperty);
|
| - assertEquals(undefined, super.newProperty);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.testSetterStrict = function() {
|
| - 'use strict';
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - assertTrue(42 === this);
|
| -
|
| - assertEquals(1, super.x);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - assertEquals(5, super.x = 5);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(1, setCalled);
|
| -
|
| - assertEquals(6, super.x += 5);
|
| - assertEquals(2, getCalled);
|
| - assertEquals(2, setCalled);
|
| -
|
| - var ex;
|
| - try {
|
| + testSetter() {
|
| + setCalled = 0;
|
| + getCalled = 0;
|
| + assertEquals('object', typeof this);
|
| + assertTrue(this instanceof Number)
|
| + assertEquals(42, this.valueOf());
|
| + assertEquals(1, super.x);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(0, setCalled);
|
| +
|
| + assertEquals(5, super.x = 5);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(1, setCalled);
|
| +
|
| + assertEquals(6, super.x += 5);
|
| + assertEquals(2, getCalled);
|
| + assertEquals(2, setCalled);
|
| +
|
| super.newProperty = 15;
|
| - } catch (e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| - }.toMethod(Derived.prototype);
|
| + assertEquals(15, this.newProperty);
|
| + assertEquals(undefined, super.newProperty);
|
| + },
|
| + testSetterStrict() {
|
| + 'use strict';
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + assertTrue(42 === this);
|
| +
|
| + assertEquals(1, super.x);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(0, setCalled);
|
| +
|
| + assertEquals(5, super.x = 5);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(1, setCalled);
|
| +
|
| + assertEquals(6, super.x += 5);
|
| + assertEquals(2, getCalled);
|
| + assertEquals(2, setCalled);
|
| +
|
| + var ex;
|
| + try {
|
| + super.newProperty = 15;
|
| + } catch (e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| + }
|
| + }
|
|
|
| Derived.prototype.testSetter.call(42);
|
| Derived.prototype.testSetterStrict.call(42);
|
|
|
| function DerivedFromString() {}
|
| - DerivedFromString.prototype = Object.create(String.prototype);
|
| -
|
| - function f() {
|
| - 'use strict';
|
| - assertTrue(42 === this);
|
| - assertEquals(String.prototype.toString, super.toString);
|
| - var ex;
|
| - try {
|
| - super.toString();
|
| - } catch(e) { ex = e; }
|
| -
|
| - assertTrue(ex instanceof TypeError);
|
| - }
|
| - f.toMethod(DerivedFromString.prototype).call(42);
|
| + DerivedFromString.prototype = {
|
| + __proto__: String.prototype,
|
| + f() {
|
| + 'use strict';
|
| + assertTrue(42 === this);
|
| + assertEquals(String.prototype.toString, super.toString);
|
| + var ex;
|
| + try {
|
| + super.toString();
|
| + } catch(e) { ex = e; }
|
| +
|
| + assertTrue(ex instanceof TypeError);
|
| + }
|
| + };
|
| +
|
| + DerivedFromString.prototype.f.call(42);
|
| }());
|
|
|
|
|
| @@ -655,73 +678,73 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| - };
|
| - Derived.prototype.testSetter = function() {
|
| - setCalled = 0;
|
| - getCalled = 0;
|
| - assertEquals('object', typeof this);
|
| - assertTrue(this instanceof Number)
|
| - assertEquals(42, this.valueOf());
|
| - assertEquals(1, super[x]);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - assertEquals(5, super[x] = 5);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(1, setCalled);
|
| -
|
| - assertEquals(6, super[x] += 5);
|
| - assertEquals(2, getCalled);
|
| - assertEquals(2, setCalled);
|
| -
|
| - super[newProperty] = 15;
|
| - assertEquals(15, this[newProperty]);
|
| - assertEquals(undefined, super[newProperty]);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.testSetterStrict = function() {
|
| - 'use strict';
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - assertTrue(42 === this);
|
| -
|
| - assertEquals(1, super[x]);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - assertEquals(5, super[x] = 5);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(1, setCalled);
|
| -
|
| - assertEquals(6, super[x] += 5);
|
| - assertEquals(2, getCalled);
|
| - assertEquals(2, setCalled);
|
| -
|
| - var ex;
|
| - try {
|
| + testSetter() {
|
| + setCalled = 0;
|
| + getCalled = 0;
|
| + assertEquals('object', typeof this);
|
| + assertTrue(this instanceof Number)
|
| + assertEquals(42, this.valueOf());
|
| + assertEquals(1, super[x]);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(0, setCalled);
|
| +
|
| + assertEquals(5, super[x] = 5);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(1, setCalled);
|
| +
|
| + assertEquals(6, super[x] += 5);
|
| + assertEquals(2, getCalled);
|
| + assertEquals(2, setCalled);
|
| +
|
| super[newProperty] = 15;
|
| - } catch (e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| - }.toMethod(Derived.prototype);
|
| + assertEquals(15, this[newProperty]);
|
| + assertEquals(undefined, super[newProperty]);
|
| + },
|
| + testSetterStrict() {
|
| + 'use strict';
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + assertTrue(42 === this);
|
| +
|
| + assertEquals(1, super[x]);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(0, setCalled);
|
| +
|
| + assertEquals(5, super[x] = 5);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(1, setCalled);
|
| +
|
| + assertEquals(6, super[x] += 5);
|
| + assertEquals(2, getCalled);
|
| + assertEquals(2, setCalled);
|
| +
|
| + var ex;
|
| + try {
|
| + super[newProperty] = 15;
|
| + } catch (e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| + }
|
| + };
|
|
|
| Derived.prototype.testSetter.call(42);
|
| Derived.prototype.testSetterStrict.call(42);
|
|
|
| function DerivedFromString() {}
|
| - DerivedFromString.prototype = Object.create(String.prototype);
|
| -
|
| - function f() {
|
| - 'use strict';
|
| - assertTrue(42 === this);
|
| - assertEquals(String.prototype.toString, super[toString]);
|
| - var ex;
|
| - try {
|
| - super[toString]();
|
| - } catch(e) { ex = e; }
|
| -
|
| - assertTrue(ex instanceof TypeError);
|
| - }
|
| - f.toMethod(DerivedFromString.prototype).call(42);
|
| + DerivedFromString.prototype = {
|
| + __proto__: String.prototype,
|
| + f() {
|
| + 'use strict';
|
| + assertTrue(42 === this);
|
| + assertEquals(String.prototype.toString, super[toString]);
|
| + var ex;
|
| + try {
|
| + super[toString]();
|
| + } catch(e) { ex = e; }
|
| +
|
| + assertTrue(ex instanceof TypeError);
|
| + }
|
| + };
|
| + DerivedFromString.prototype.f.call(42);
|
| }());
|
|
|
|
|
| @@ -750,54 +773,53 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| - };
|
| - Derived.prototype.testSetter = function() {
|
| - setCalled = 0;
|
| - getCalled = 0;
|
| - assertEquals('object', typeof this);
|
| - assertTrue(this instanceof Number)
|
| - assertEquals(42, this.valueOf());
|
| - assertEquals(1, super[x]);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - assertEquals(5, super[x] = 5);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(1, setCalled);
|
| -
|
| - assertEquals(6, super[x] += 5);
|
| - assertEquals(2, getCalled);
|
| - assertEquals(2, setCalled);
|
| -
|
| - super[newProperty] = 15;
|
| - assertEquals(15, this[newProperty]);
|
| - assertEquals(undefined, super[newProperty]);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.testSetterStrict = function() {
|
| - 'use strict';
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - assertTrue(42 === this);
|
| -
|
| - assertEquals(1, super[x]);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - assertEquals(5, super[x] = 5);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(1, setCalled);
|
| -
|
| - assertEquals(6, super[x] += 5);
|
| - assertEquals(2, getCalled);
|
| - assertEquals(2, setCalled);
|
| -
|
| - var ex;
|
| - try {
|
| + testSetter() {
|
| + setCalled = 0;
|
| + getCalled = 0;
|
| + assertEquals('object', typeof this);
|
| + assertTrue(this instanceof Number)
|
| + assertEquals(42, this.valueOf());
|
| + assertEquals(1, super[x]);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(0, setCalled);
|
| +
|
| + assertEquals(5, super[x] = 5);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(1, setCalled);
|
| +
|
| + assertEquals(6, super[x] += 5);
|
| + assertEquals(2, getCalled);
|
| + assertEquals(2, setCalled);
|
| +
|
| super[newProperty] = 15;
|
| - } catch (e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| - }.toMethod(Derived.prototype);
|
| + assertEquals(15, this[newProperty]);
|
| + assertEquals(undefined, super[newProperty]);
|
| + },
|
| + testSetterStrict() {
|
| + 'use strict';
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + assertTrue(42 === this);
|
| +
|
| + assertEquals(1, super[x]);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(0, setCalled);
|
| +
|
| + assertEquals(5, super[x] = 5);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(1, setCalled);
|
| +
|
| + assertEquals(6, super[x] += 5);
|
| + assertEquals(2, getCalled);
|
| + assertEquals(2, setCalled);
|
| +
|
| + var ex;
|
| + try {
|
| + super[newProperty] = 15;
|
| + } catch (e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| + }
|
| + };
|
|
|
| Derived.prototype.testSetter.call(42);
|
| Derived.prototype.testSetterStrict.call(42);
|
| @@ -807,28 +829,28 @@
|
| (function TestKeyedNumericSetterOnExotics() {
|
| function Base() {}
|
| function Derived() {}
|
| - Derived.prototype = { __proto__: Base.prototype };
|
| -
|
| - Derived.prototype.callSetterOnArray = function() {
|
| - super[42] = 1;
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.callStrictSetterOnString = function() {
|
| - 'use strict';
|
| - assertEquals('string', typeof this);
|
| - assertTrue('abcdef' === this);
|
| - var ex = null;
|
| - try {
|
| - super[5] = 'q';
|
| - } catch(e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| -
|
| - ex = null;
|
| - try {
|
| - super[1024] = 'q';
|
| - } catch(e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| - }.toMethod(Derived.prototype);
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + callSetterOnArray() {
|
| + super[42] = 1;
|
| + },
|
| + callStrictSetterOnString() {
|
| + 'use strict';
|
| + assertEquals('string', typeof this);
|
| + assertTrue('abcdef' === this);
|
| + var ex = null;
|
| + try {
|
| + super[5] = 'q';
|
| + } catch(e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| +
|
| + ex = null;
|
| + try {
|
| + super[1024] = 'q';
|
| + } catch(e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| + }
|
| + };
|
|
|
| var x = [];
|
| assertEquals(0, x.length);
|
| @@ -844,23 +866,25 @@
|
| (function TestSetterUndefinedProperties() {
|
| function Base() {}
|
| function Derived() {}
|
| - Derived.prototype = { __proto__ : Base.prototype };
|
| - Derived.prototype.mSloppy = function () {
|
| - assertEquals(undefined, super.x);
|
| - assertEquals(undefined, this.x);
|
| - super.x = 10;
|
| - assertEquals(10, this.x);
|
| - assertEquals(undefined, super.x);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.mStrict = function () {
|
| - 'use strict';
|
| - assertEquals(undefined, super.x);
|
| - assertEquals(undefined, this.x);
|
| - super.x = 10;
|
| - assertEquals(10, this.x);
|
| - assertEquals(undefined, super.x);
|
| - }.toMethod(Derived.prototype);
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + mSloppy() {
|
| + assertEquals(undefined, super.x);
|
| + assertEquals(undefined, this.x);
|
| + super.x = 10;
|
| + assertEquals(10, this.x);
|
| + assertEquals(undefined, super.x);
|
| + },
|
| + mStrict() {
|
| + 'use strict';
|
| + assertEquals(undefined, super.x);
|
| + assertEquals(undefined, this.x);
|
| + super.x = 10;
|
| + assertEquals(10, this.x);
|
| + assertEquals(undefined, super.x);
|
| + }
|
| + };
|
| +
|
| var d = new Derived();
|
| d.mSloppy();
|
| assertEquals(10, d.x);
|
| @@ -874,23 +898,24 @@
|
| var x = 'x';
|
| function Base() {}
|
| function Derived() {}
|
| - Derived.prototype = { __proto__ : Base.prototype };
|
| - Derived.prototype.mSloppy = function () {
|
| - assertEquals(undefined, super[x]);
|
| - assertEquals(undefined, this[x]);
|
| - super[x] = 10;
|
| - assertEquals(10, this[x]);
|
| - assertEquals(undefined, super[x]);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.mStrict = function () {
|
| - 'use strict';
|
| - assertEquals(undefined, super[x]);
|
| - assertEquals(undefined, this[x]);
|
| - super[x] = 10;
|
| - assertEquals(10, this[x]);
|
| - assertEquals(undefined, super[x]);
|
| - }.toMethod(Derived.prototype);
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + mSloppy() {
|
| + assertEquals(undefined, super[x]);
|
| + assertEquals(undefined, this[x]);
|
| + super[x] = 10;
|
| + assertEquals(10, this[x]);
|
| + assertEquals(undefined, super[x]);
|
| + },
|
| + mStrict() {
|
| + 'use strict';
|
| + assertEquals(undefined, super[x]);
|
| + assertEquals(undefined, this[x]);
|
| + super[x] = 10;
|
| + assertEquals(10, this[x]);
|
| + assertEquals(undefined, super[x]);
|
| + }
|
| + };
|
| var d = new Derived();
|
| d.mSloppy();
|
| assertEquals(10, d.x);
|
| @@ -904,23 +929,24 @@
|
| var x = 42;
|
| function Base() {}
|
| function Derived() {}
|
| - Derived.prototype = { __proto__ : Base.prototype };
|
| - Derived.prototype.mSloppy = function () {
|
| - assertEquals(undefined, super[x]);
|
| - assertEquals(undefined, this[x]);
|
| - super[x] = 10;
|
| - assertEquals(10, this[x]);
|
| - assertEquals(undefined, super[x]);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.mStrict = function () {
|
| - 'use strict';
|
| - assertEquals(undefined, super[x]);
|
| - assertEquals(undefined, this[x]);
|
| - super[x] = 10;
|
| - assertEquals(10, this[x]);
|
| - assertEquals(undefined, super[x]);
|
| - }.toMethod(Derived.prototype);
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + mSloppy() {
|
| + assertEquals(undefined, super[x]);
|
| + assertEquals(undefined, this[x]);
|
| + super[x] = 10;
|
| + assertEquals(10, this[x]);
|
| + assertEquals(undefined, super[x]);
|
| + },
|
| + mStrict() {
|
| + 'use strict';
|
| + assertEquals(undefined, super[x]);
|
| + assertEquals(undefined, this[x]);
|
| + super[x] = 10;
|
| + assertEquals(10, this[x]);
|
| + assertEquals(undefined, super[x]);
|
| + }
|
| + };
|
| var d = new Derived();
|
| d.mSloppy();
|
| assertEquals(10, d[x]);
|
| @@ -931,47 +957,47 @@
|
|
|
|
|
| (function TestSetterCreatingOwnProperties() {
|
| + var setterCalled;
|
| function Base() {}
|
| function Derived() {}
|
| - Derived.prototype = { __proto__ : Base.prototype };
|
| - var setterCalled;
|
| -
|
| - Derived.prototype.mSloppy = function() {
|
| - assertEquals(42, this.ownReadOnly);
|
| - super.ownReadOnly = 55;
|
| - assertEquals(42, this.ownReadOnly);
|
| -
|
| - assertEquals(15, this.ownReadonlyAccessor);
|
| - super.ownReadonlyAccessor = 55;
|
| - assertEquals(15, this.ownReadonlyAccessor);
|
| -
|
| - setterCalled = 0;
|
| - super.ownSetter = 42;
|
| - assertEquals(1, setterCalled);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.mStrict = function() {
|
| - 'use strict';
|
| - assertEquals(42, this.ownReadOnly);
|
| - var ex;
|
| - try {
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + mSloppy() {
|
| + assertEquals(42, this.ownReadOnly);
|
| super.ownReadOnly = 55;
|
| - } catch(e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| - assertEquals(42, this.ownReadOnly);
|
| + assertEquals(42, this.ownReadOnly);
|
|
|
| - assertEquals(15, this.ownReadonlyAccessor);
|
| - ex = null;
|
| - try {
|
| + assertEquals(15, this.ownReadonlyAccessor);
|
| super.ownReadonlyAccessor = 55;
|
| - } catch(e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| - assertEquals(15, this.ownReadonlyAccessor);
|
| + assertEquals(15, this.ownReadonlyAccessor);
|
|
|
| - setterCalled = 0;
|
| - super.ownSetter = 42;
|
| - assertEquals(1, setterCalled);
|
| - }.toMethod(Derived.prototype);
|
| + setterCalled = 0;
|
| + super.ownSetter = 42;
|
| + assertEquals(1, setterCalled);
|
| + },
|
| + mStrict() {
|
| + 'use strict';
|
| + assertEquals(42, this.ownReadOnly);
|
| + var ex;
|
| + try {
|
| + super.ownReadOnly = 55;
|
| + } catch(e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| + assertEquals(42, this.ownReadOnly);
|
| +
|
| + assertEquals(15, this.ownReadonlyAccessor);
|
| + ex = null;
|
| + try {
|
| + super.ownReadonlyAccessor = 55;
|
| + } catch(e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| + assertEquals(15, this.ownReadonlyAccessor);
|
| +
|
| + setterCalled = 0;
|
| + super.ownSetter = 42;
|
| + assertEquals(1, setterCalled);
|
| + }
|
| + };
|
|
|
| var d = new Derived();
|
| Object.defineProperty(d, 'ownReadOnly', { value : 42, writable : false });
|
| @@ -1006,39 +1032,38 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| + testIter() {
|
| + setCalled = 0;
|
| + getCalled = 0;
|
| + for (super.x in [1,2,3]) {}
|
| + assertEquals(0, getCalled);
|
| + assertEquals(3, setCalled);
|
| + assertEquals(["0", "1", "2"], this.x_);
|
| + },
|
| + testIterKeyed() {
|
| + setCalled = 0;
|
| + getCalled = 0;
|
| + for (super[x] in [1,2,3]) {}
|
| + assertEquals(0, getCalled);
|
| + assertEquals(3, setCalled);
|
| + assertEquals(["0","1","2"], this.x_);
|
| +
|
| + this.x_ = [];
|
| + setCalled = 0;
|
| + getCalled = 0;
|
| + var toStringCalled = 0;
|
| + var o = {toString: function () { toStringCalled++; return x }};
|
| + for (super[o] in [1,2,3]) {}
|
| + assertEquals(0, getCalled);
|
| + assertEquals(3, setCalled);
|
| + assertEquals(3, toStringCalled);
|
| + assertEquals(["0","1","2"], this.x_);
|
| + }
|
| };
|
|
|
| - Derived.prototype.testIter = function() {
|
| - setCalled = 0;
|
| - getCalled = 0;
|
| - for (super.x in [1,2,3]) {}
|
| - assertEquals(0, getCalled);
|
| - assertEquals(3, setCalled);
|
| - assertEquals(["0","1","2"], this.x_);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| new Derived().testIter();
|
|
|
| var x = 'x';
|
| - Derived.prototype.testIterKeyed = function() {
|
| - setCalled = 0;
|
| - getCalled = 0;
|
| - for (super[x] in [1,2,3]) {}
|
| - assertEquals(0, getCalled);
|
| - assertEquals(3, setCalled);
|
| - assertEquals(["0","1","2"], this.x_);
|
| -
|
| - this.x_ = [];
|
| - setCalled = 0;
|
| - getCalled = 0;
|
| - var toStringCalled = 0;
|
| - var o = {toString: function () { toStringCalled++; return x }};
|
| - for (super[o] in [1,2,3]) {}
|
| - assertEquals(0, getCalled);
|
| - assertEquals(3, setCalled);
|
| - assertEquals(3, toStringCalled);
|
| - assertEquals(["0","1","2"], this.x_);
|
| - }.toMethod(Derived.prototype);
|
|
|
| new Derived().testIterKeyed();
|
| }());
|
| @@ -1048,47 +1073,47 @@
|
| var ownReadOnly = 'ownReadOnly';
|
| var ownReadonlyAccessor = 'ownReadonlyAccessor';
|
| var ownSetter = 'ownSetter';
|
| + var setterCalled;
|
| function Base() {}
|
| function Derived() {}
|
| - Derived.prototype = { __proto__ : Base.prototype };
|
| - var setterCalled;
|
| -
|
| - Derived.prototype.mSloppy = function() {
|
| - assertEquals(42, this[ownReadOnly]);
|
| - super[ownReadOnly] = 55;
|
| - assertEquals(42, this[ownReadOnly]);
|
| -
|
| - assertEquals(15, this[ownReadonlyAccessor]);
|
| - super[ownReadonlyAccessor] = 55;
|
| - assertEquals(15, this[ownReadonlyAccessor]);
|
| -
|
| - setterCalled = 0;
|
| - super[ownSetter] = 42;
|
| - assertEquals(1, setterCalled);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.mStrict = function() {
|
| - 'use strict';
|
| - assertEquals(42, this[ownReadOnly]);
|
| - var ex;
|
| - try {
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + mSloppy() {
|
| + assertEquals(42, this[ownReadOnly]);
|
| super[ownReadOnly] = 55;
|
| - } catch(e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| - assertEquals(42, this[ownReadOnly]);
|
| + assertEquals(42, this[ownReadOnly]);
|
|
|
| - assertEquals(15, this[ownReadonlyAccessor]);
|
| - ex = null;
|
| - try {
|
| + assertEquals(15, this[ownReadonlyAccessor]);
|
| super[ownReadonlyAccessor] = 55;
|
| - } catch(e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| - assertEquals(15, this[ownReadonlyAccessor]);
|
| + assertEquals(15, this[ownReadonlyAccessor]);
|
|
|
| - setterCalled = 0;
|
| - super[ownSetter] = 42;
|
| - assertEquals(1, setterCalled);
|
| - }.toMethod(Derived.prototype);
|
| + setterCalled = 0;
|
| + super[ownSetter] = 42;
|
| + assertEquals(1, setterCalled);
|
| + },
|
| + mStrict() {
|
| + 'use strict';
|
| + assertEquals(42, this[ownReadOnly]);
|
| + var ex;
|
| + try {
|
| + super[ownReadOnly] = 55;
|
| + } catch(e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| + assertEquals(42, this[ownReadOnly]);
|
| +
|
| + assertEquals(15, this[ownReadonlyAccessor]);
|
| + ex = null;
|
| + try {
|
| + super[ownReadonlyAccessor] = 55;
|
| + } catch(e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| + assertEquals(15, this[ownReadonlyAccessor]);
|
| +
|
| + setterCalled = 0;
|
| + super[ownSetter] = 42;
|
| + assertEquals(1, setterCalled);
|
| + }
|
| + };
|
|
|
| var d = new Derived();
|
| Object.defineProperty(d, 'ownReadOnly', { value : 42, writable : false });
|
| @@ -1105,47 +1130,47 @@
|
| var ownReadOnly = 42;
|
| var ownReadonlyAccessor = 43;
|
| var ownSetter = 44;
|
| + var setterCalled;
|
| function Base() {}
|
| function Derived() {}
|
| - Derived.prototype = { __proto__ : Base.prototype };
|
| - var setterCalled;
|
| -
|
| - Derived.prototype.mSloppy = function() {
|
| - assertEquals(42, this[ownReadOnly]);
|
| - super[ownReadOnly] = 55;
|
| - assertEquals(42, this[ownReadOnly]);
|
| -
|
| - assertEquals(15, this[ownReadonlyAccessor]);
|
| - super[ownReadonlyAccessor] = 55;
|
| - assertEquals(15, this[ownReadonlyAccessor]);
|
| -
|
| - setterCalled = 0;
|
| - super[ownSetter] = 42;
|
| - assertEquals(1, setterCalled);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.mStrict = function() {
|
| - 'use strict';
|
| - assertEquals(42, this[ownReadOnly]);
|
| - var ex;
|
| - try {
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + mSloppy() {
|
| + assertEquals(42, this[ownReadOnly]);
|
| super[ownReadOnly] = 55;
|
| - } catch(e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| - assertEquals(42, this[ownReadOnly]);
|
| + assertEquals(42, this[ownReadOnly]);
|
|
|
| - assertEquals(15, this[ownReadonlyAccessor]);
|
| - ex = null;
|
| - try {
|
| + assertEquals(15, this[ownReadonlyAccessor]);
|
| super[ownReadonlyAccessor] = 55;
|
| - } catch(e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| - assertEquals(15, this[ownReadonlyAccessor]);
|
| + assertEquals(15, this[ownReadonlyAccessor]);
|
|
|
| - setterCalled = 0;
|
| - super[ownSetter] = 42;
|
| - assertEquals(1, setterCalled);
|
| - }.toMethod(Derived.prototype);
|
| + setterCalled = 0;
|
| + super[ownSetter] = 42;
|
| + assertEquals(1, setterCalled);
|
| + },
|
| + mStrict() {
|
| + 'use strict';
|
| + assertEquals(42, this[ownReadOnly]);
|
| + var ex;
|
| + try {
|
| + super[ownReadOnly] = 55;
|
| + } catch(e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| + assertEquals(42, this[ownReadOnly]);
|
| +
|
| + assertEquals(15, this[ownReadonlyAccessor]);
|
| + ex = null;
|
| + try {
|
| + super[ownReadonlyAccessor] = 55;
|
| + } catch(e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| + assertEquals(15, this[ownReadonlyAccessor]);
|
| +
|
| + setterCalled = 0;
|
| + super[ownSetter] = 42;
|
| + assertEquals(1, setterCalled);
|
| + }
|
| + }
|
|
|
| var d = new Derived();
|
| Object.defineProperty(d, ownReadOnly, { value : 42, writable : false });
|
| @@ -1164,62 +1189,58 @@
|
| var getCalled;
|
| var setCalled;
|
| Derived.prototype = {
|
| - __proto__ : Base.prototype,
|
| + __proto__: Base.prototype,
|
| get x() { getCalled++; return 42; },
|
| - set x(v) { setCalled++; }
|
| + set x(v) { setCalled++; },
|
| + mSloppy() {
|
| + setCalled = 0;
|
| + getCalled = 0;
|
| + assertEquals(42, this.x);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(0, setCalled);
|
| +
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + this.x = 43;
|
| + assertEquals(0, getCalled);
|
| + assertEquals(1, setCalled);
|
| +
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + super.x = 15;
|
| + assertEquals(0, setCalled);
|
| + assertEquals(0, getCalled);
|
| +
|
| + assertEquals(15, this.x);
|
| + assertEquals(0, getCalled);
|
| + assertEquals(0, setCalled);
|
| + },
|
| + mStrict() {
|
| + 'use strict';
|
| + setCalled = 0;
|
| + getCalled = 0;
|
| + assertEquals(42, this.x);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(0, setCalled);
|
| +
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + this.x = 43;
|
| + assertEquals(0, getCalled);
|
| + assertEquals(1, setCalled);
|
| +
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + super.x = 15;
|
| + assertEquals(0, setCalled);
|
| + assertEquals(0, getCalled);
|
| +
|
| + assertEquals(15, this.x);
|
| + assertEquals(0, getCalled);
|
| + assertEquals(0, setCalled);
|
| + }
|
| };
|
|
|
| - Derived.prototype.mSloppy = function() {
|
| - setCalled = 0;
|
| - getCalled = 0;
|
| - assertEquals(42, this.x);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - this.x = 43;
|
| - assertEquals(0, getCalled);
|
| - assertEquals(1, setCalled);
|
| -
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - super.x = 15;
|
| - assertEquals(0, setCalled);
|
| - assertEquals(0, getCalled);
|
| -
|
| - assertEquals(15, this.x);
|
| - assertEquals(0, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.mStrict = function() {
|
| - 'use strict';
|
| - setCalled = 0;
|
| - getCalled = 0;
|
| - assertEquals(42, this.x);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - this.x = 43;
|
| - assertEquals(0, getCalled);
|
| - assertEquals(1, setCalled);
|
| -
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - super.x = 15;
|
| - assertEquals(0, setCalled);
|
| - assertEquals(0, getCalled);
|
| -
|
| - assertEquals(15, this.x);
|
| - assertEquals(0, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - }.toMethod(Derived.prototype);
|
| -
|
| new Derived().mSloppy();
|
| new Derived().mStrict();
|
| }());
|
| @@ -1232,62 +1253,58 @@
|
| var getCalled;
|
| var setCalled;
|
| Derived.prototype = {
|
| - __proto__ : Base.prototype,
|
| + __proto__: Base.prototype,
|
| get x() { getCalled++; return 42; },
|
| - set x(v) { setCalled++; }
|
| + set x(v) { setCalled++; },
|
| + mSloppy() {
|
| + setCalled = 0;
|
| + getCalled = 0;
|
| + assertEquals(42, this[x]);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(0, setCalled);
|
| +
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + this[x] = 43;
|
| + assertEquals(0, getCalled);
|
| + assertEquals(1, setCalled);
|
| +
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + super[x] = 15;
|
| + assertEquals(0, setCalled);
|
| + assertEquals(0, getCalled);
|
| +
|
| + assertEquals(15, this[x]);
|
| + assertEquals(0, getCalled);
|
| + assertEquals(0, setCalled);
|
| + },
|
| + mStrict() {
|
| + 'use strict';
|
| + setCalled = 0;
|
| + getCalled = 0;
|
| + assertEquals(42, this[x]);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(0, setCalled);
|
| +
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + this[x] = 43;
|
| + assertEquals(0, getCalled);
|
| + assertEquals(1, setCalled);
|
| +
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + super[x] = 15;
|
| + assertEquals(0, setCalled);
|
| + assertEquals(0, getCalled);
|
| +
|
| + assertEquals(15, this[x]);
|
| + assertEquals(0, getCalled);
|
| + assertEquals(0, setCalled);
|
| + }
|
| };
|
|
|
| - Derived.prototype.mSloppy = function() {
|
| - setCalled = 0;
|
| - getCalled = 0;
|
| - assertEquals(42, this[x]);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - this[x] = 43;
|
| - assertEquals(0, getCalled);
|
| - assertEquals(1, setCalled);
|
| -
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - super[x] = 15;
|
| - assertEquals(0, setCalled);
|
| - assertEquals(0, getCalled);
|
| -
|
| - assertEquals(15, this[x]);
|
| - assertEquals(0, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.mStrict = function() {
|
| - 'use strict';
|
| - setCalled = 0;
|
| - getCalled = 0;
|
| - assertEquals(42, this[x]);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - this[x] = 43;
|
| - assertEquals(0, getCalled);
|
| - assertEquals(1, setCalled);
|
| -
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - super[x] = 15;
|
| - assertEquals(0, setCalled);
|
| - assertEquals(0, getCalled);
|
| -
|
| - assertEquals(15, this[x]);
|
| - assertEquals(0, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - }.toMethod(Derived.prototype);
|
| -
|
| new Derived().mSloppy();
|
| new Derived().mStrict();
|
| }());
|
| @@ -1300,7 +1317,54 @@
|
| var getCalled;
|
| var setCalled;
|
| Derived.prototype = {
|
| - __proto__ : Base.prototype,
|
| + __proto__: Base.prototype,
|
| + mSloppy() {
|
| + setCalled = 0;
|
| + getCalled = 0;
|
| + assertEquals(42, this[x]);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(0, setCalled);
|
| +
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + this[x] = 43;
|
| + assertEquals(0, getCalled);
|
| + assertEquals(1, setCalled);
|
| +
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + super[x] = 15;
|
| + assertEquals(0, setCalled);
|
| + assertEquals(0, getCalled);
|
| +
|
| + assertEquals(15, this[x]);
|
| + assertEquals(0, getCalled);
|
| + assertEquals(0, setCalled);
|
| + },
|
| + mStrict() {
|
| + 'use strict';
|
| + setCalled = 0;
|
| + getCalled = 0;
|
| + assertEquals(42, this[x]);
|
| + assertEquals(1, getCalled);
|
| + assertEquals(0, setCalled);
|
| +
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + this[x] = 43;
|
| + assertEquals(0, getCalled);
|
| + assertEquals(1, setCalled);
|
| +
|
| + getCalled = 0;
|
| + setCalled = 0;
|
| + super[x] = 15;
|
| + assertEquals(0, setCalled);
|
| + assertEquals(0, getCalled);
|
| +
|
| + assertEquals(15, this[x]);
|
| + assertEquals(0, getCalled);
|
| + assertEquals(0, setCalled);
|
| + }
|
| };
|
|
|
| Object.defineProperty(Derived.prototype, x, {
|
| @@ -1308,57 +1372,6 @@
|
| set: function(v) { setCalled++; }
|
| });
|
|
|
| - Derived.prototype.mSloppy = function() {
|
| - setCalled = 0;
|
| - getCalled = 0;
|
| - assertEquals(42, this[x]);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - this[x] = 43;
|
| - assertEquals(0, getCalled);
|
| - assertEquals(1, setCalled);
|
| -
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - super[x] = 15;
|
| - assertEquals(0, setCalled);
|
| - assertEquals(0, getCalled);
|
| -
|
| - assertEquals(15, this[x]);
|
| - assertEquals(0, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.mStrict = function() {
|
| - 'use strict';
|
| - setCalled = 0;
|
| - getCalled = 0;
|
| - assertEquals(42, this[x]);
|
| - assertEquals(1, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - this[x] = 43;
|
| - assertEquals(0, getCalled);
|
| - assertEquals(1, setCalled);
|
| -
|
| - getCalled = 0;
|
| - setCalled = 0;
|
| - super[x] = 15;
|
| - assertEquals(0, setCalled);
|
| - assertEquals(0, getCalled);
|
| -
|
| - assertEquals(15, this[x]);
|
| - assertEquals(0, getCalled);
|
| - assertEquals(0, setCalled);
|
| -
|
| - }.toMethod(Derived.prototype);
|
| -
|
| new Derived().mSloppy();
|
| new Derived().mStrict();
|
| }());
|
| @@ -1367,35 +1380,36 @@
|
| (function TestSetterDoesNotReconfigure() {
|
| function Base() {}
|
| function Derived() {}
|
| -
|
| - Derived.prototype.mStrict = function (){
|
| - 'use strict';
|
| - super.nonEnumConfig = 5;
|
| - var d1 = Object.getOwnPropertyDescriptor(this, 'nonEnumConfig');
|
| - assertEquals(5, d1.value);
|
| - assertTrue(d1.configurable);
|
| - assertFalse(d1.enumerable);
|
| -
|
| - super.nonEnumNonConfig = 5;
|
| - var d1 = Object.getOwnPropertyDescriptor(this, 'nonEnumNonConfig');
|
| - assertEquals(5, d1.value);
|
| - assertFalse(d1.configurable);
|
| - assertFalse(d1.enumerable);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.mSloppy = function (){
|
| - super.nonEnumConfig = 42;
|
| - var d1 = Object.getOwnPropertyDescriptor(this, 'nonEnumConfig');
|
| - assertEquals(42, d1.value);
|
| - assertTrue(d1.configurable);
|
| - assertFalse(d1.enumerable);
|
| -
|
| - super.nonEnumNonConfig = 42;
|
| - var d1 = Object.getOwnPropertyDescriptor(this, 'nonEnumNonConfig');
|
| - assertEquals(42, d1.value);
|
| - assertFalse(d1.configurable);
|
| - assertFalse(d1.enumerable);
|
| - }.toMethod(Derived.prototype);
|
| + Derived.prototype = {
|
| + __proto__: Derived.prototype,
|
| + mStrict(){
|
| + 'use strict';
|
| + super.nonEnumConfig = 5;
|
| + var d1 = Object.getOwnPropertyDescriptor(this, 'nonEnumConfig');
|
| + assertEquals(5, d1.value);
|
| + assertTrue(d1.configurable);
|
| + assertFalse(d1.enumerable);
|
| +
|
| + super.nonEnumNonConfig = 5;
|
| + var d1 = Object.getOwnPropertyDescriptor(this, 'nonEnumNonConfig');
|
| + assertEquals(5, d1.value);
|
| + assertFalse(d1.configurable);
|
| + assertFalse(d1.enumerable);
|
| + },
|
| + mSloppy(){
|
| + super.nonEnumConfig = 42;
|
| + var d1 = Object.getOwnPropertyDescriptor(this, 'nonEnumConfig');
|
| + assertEquals(42, d1.value);
|
| + assertTrue(d1.configurable);
|
| + assertFalse(d1.enumerable);
|
| +
|
| + super.nonEnumNonConfig = 42;
|
| + var d1 = Object.getOwnPropertyDescriptor(this, 'nonEnumNonConfig');
|
| + assertEquals(42, d1.value);
|
| + assertFalse(d1.configurable);
|
| + assertFalse(d1.enumerable);
|
| + }
|
| + };
|
|
|
| var d = new Derived();
|
| Object.defineProperty(d, 'nonEnumConfig',
|
| @@ -1413,36 +1427,36 @@
|
| function Base() {}
|
| function Derived() {}
|
|
|
| - Derived.prototype = { __proto__: Base.prototype };
|
| -
|
| - Derived.prototype.mStrict = function (){
|
| - 'use strict';
|
| - super[nonEnumConfig] = 5;
|
| - var d1 = Object.getOwnPropertyDescriptor(this, nonEnumConfig);
|
| - assertEquals(5, d1.value);
|
| - assertTrue(d1.configurable);
|
| - assertFalse(d1.enumerable);
|
| -
|
| - super[nonEnumNonConfig] = 5;
|
| - var d1 = Object.getOwnPropertyDescriptor(this, nonEnumNonConfig);
|
| - assertEquals(5, d1.value);
|
| - assertFalse(d1.configurable);
|
| - assertFalse(d1.enumerable);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.mSloppy = function (){
|
| - super[nonEnumConfig] = 42;
|
| - var d1 = Object.getOwnPropertyDescriptor(this, nonEnumConfig);
|
| - assertEquals(42, d1.value);
|
| - assertTrue(d1.configurable);
|
| - assertFalse(d1.enumerable);
|
| -
|
| - super[nonEnumNonConfig] = 42;
|
| - var d1 = Object.getOwnPropertyDescriptor(this, nonEnumNonConfig);
|
| - assertEquals(42, d1.value);
|
| - assertFalse(d1.configurable);
|
| - assertFalse(d1.enumerable);
|
| - }.toMethod(Derived.prototype);
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + mStrict(){
|
| + 'use strict';
|
| + super[nonEnumConfig] = 5;
|
| + var d1 = Object.getOwnPropertyDescriptor(this, nonEnumConfig);
|
| + assertEquals(5, d1.value);
|
| + assertTrue(d1.configurable);
|
| + assertFalse(d1.enumerable);
|
| +
|
| + super[nonEnumNonConfig] = 5;
|
| + var d1 = Object.getOwnPropertyDescriptor(this, nonEnumNonConfig);
|
| + assertEquals(5, d1.value);
|
| + assertFalse(d1.configurable);
|
| + assertFalse(d1.enumerable);
|
| + },
|
| + mSloppy(){
|
| + super[nonEnumConfig] = 42;
|
| + var d1 = Object.getOwnPropertyDescriptor(this, nonEnumConfig);
|
| + assertEquals(42, d1.value);
|
| + assertTrue(d1.configurable);
|
| + assertFalse(d1.enumerable);
|
| +
|
| + super[nonEnumNonConfig] = 42;
|
| + var d1 = Object.getOwnPropertyDescriptor(this, nonEnumNonConfig);
|
| + assertEquals(42, d1.value);
|
| + assertFalse(d1.configurable);
|
| + assertFalse(d1.enumerable);
|
| + }
|
| + };
|
|
|
| var d = new Derived();
|
| Object.defineProperty(d, nonEnumConfig,
|
| @@ -1460,36 +1474,36 @@
|
| function Base() {}
|
| function Derived() {}
|
|
|
| - Derived.prototype = { __proto__: Base.prototype };
|
| -
|
| - Derived.prototype.mStrict = function (){
|
| - 'use strict';
|
| - super[nonEnumConfig] = 5;
|
| - var d1 = Object.getOwnPropertyDescriptor(this, nonEnumConfig);
|
| - assertEquals(5, d1.value);
|
| - assertTrue(d1.configurable);
|
| - assertFalse(d1.enumerable);
|
| -
|
| - super[nonEnumNonConfig] = 5;
|
| - var d1 = Object.getOwnPropertyDescriptor(this, nonEnumNonConfig);
|
| - assertEquals(5, d1.value);
|
| - assertFalse(d1.configurable);
|
| - assertFalse(d1.enumerable);
|
| - }.toMethod(Derived.prototype);
|
| -
|
| - Derived.prototype.mSloppy = function (){
|
| - super[nonEnumConfig] = 42;
|
| - var d1 = Object.getOwnPropertyDescriptor(this, nonEnumConfig);
|
| - assertEquals(42, d1.value);
|
| - assertTrue(d1.configurable);
|
| - assertFalse(d1.enumerable);
|
| -
|
| - super[nonEnumNonConfig] = 42;
|
| - var d1 = Object.getOwnPropertyDescriptor(this, nonEnumNonConfig);
|
| - assertEquals(42, d1.value);
|
| - assertFalse(d1.configurable);
|
| - assertFalse(d1.enumerable);
|
| - }.toMethod(Derived.prototype);
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + mStrict(){
|
| + 'use strict';
|
| + super[nonEnumConfig] = 5;
|
| + var d1 = Object.getOwnPropertyDescriptor(this, nonEnumConfig);
|
| + assertEquals(5, d1.value);
|
| + assertTrue(d1.configurable);
|
| + assertFalse(d1.enumerable);
|
| +
|
| + super[nonEnumNonConfig] = 5;
|
| + var d1 = Object.getOwnPropertyDescriptor(this, nonEnumNonConfig);
|
| + assertEquals(5, d1.value);
|
| + assertFalse(d1.configurable);
|
| + assertFalse(d1.enumerable);
|
| + },
|
| + mSloppy(){
|
| + super[nonEnumConfig] = 42;
|
| + var d1 = Object.getOwnPropertyDescriptor(this, nonEnumConfig);
|
| + assertEquals(42, d1.value);
|
| + assertTrue(d1.configurable);
|
| + assertFalse(d1.enumerable);
|
| +
|
| + super[nonEnumNonConfig] = 42;
|
| + var d1 = Object.getOwnPropertyDescriptor(this, nonEnumNonConfig);
|
| + assertEquals(42, d1.value);
|
| + assertFalse(d1.configurable);
|
| + assertFalse(d1.enumerable);
|
| + }
|
| + };
|
|
|
| var d = new Derived();
|
| Object.defineProperty(d, nonEnumConfig,
|
| @@ -1519,32 +1533,31 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| - _x: 2
|
| + _x: 2,
|
| + testCounts() {
|
| + assertEquals(2, this._x);
|
| + assertEquals(2, super.x);
|
| + super.x++;
|
| + assertEquals(3, super.x);
|
| + ++super.x;
|
| + assertEquals(4, super.x);
|
| + assertEquals(4, super.x++);
|
| + assertEquals(5, super.x);
|
| + assertEquals(6, ++super.x);
|
| + assertEquals(6, super.x);
|
| + assertEquals(6, this._x);
|
| +
|
| + super.x--;
|
| + assertEquals(5, super.x);
|
| + --super.x;
|
| + assertEquals(4, super.x);
|
| + assertEquals(4, super.x--);
|
| + assertEquals(3, super.x);
|
| + assertEquals(2, --super.x);
|
| + assertEquals(2, super.x);
|
| + assertEquals(2, this._x);
|
| + }
|
| };
|
| -
|
| - Derived.prototype.testCounts = function() {
|
| - assertEquals(2, this._x);
|
| - assertEquals(2, super.x);
|
| - super.x++;
|
| - assertEquals(3, super.x);
|
| - ++super.x;
|
| - assertEquals(4, super.x);
|
| - assertEquals(4, super.x++);
|
| - assertEquals(5, super.x);
|
| - assertEquals(6, ++super.x);
|
| - assertEquals(6, super.x);
|
| - assertEquals(6, this._x);
|
| -
|
| - super.x--;
|
| - assertEquals(5, super.x);
|
| - --super.x;
|
| - assertEquals(4, super.x);
|
| - assertEquals(4, super.x--);
|
| - assertEquals(3, super.x);
|
| - assertEquals(2, --super.x);
|
| - assertEquals(2, super.x);
|
| - assertEquals(2, this._x);
|
| - }.toMethod(Derived.prototype);
|
| new Derived().testCounts();
|
| }());
|
|
|
| @@ -1568,32 +1581,31 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| - _x: 2
|
| + _x: 2,
|
| + testCounts() {
|
| + assertEquals(2, this._x);
|
| + assertEquals(2, super[x]);
|
| + super[x]++;
|
| + assertEquals(3, super[x]);
|
| + ++super[x];
|
| + assertEquals(4, super[x]);
|
| + assertEquals(4, super[x]++);
|
| + assertEquals(5, super[x]);
|
| + assertEquals(6, ++super[x]);
|
| + assertEquals(6, super[x]);
|
| + assertEquals(6, this._x);
|
| +
|
| + super[x]--;
|
| + assertEquals(5, super[x]);
|
| + --super[x];
|
| + assertEquals(4, super[x]);
|
| + assertEquals(4, super[x]--);
|
| + assertEquals(3, super[x]);
|
| + assertEquals(2, --super[x]);
|
| + assertEquals(2, super[x]);
|
| + assertEquals(2, this._x);
|
| + }
|
| };
|
| -
|
| - Derived.prototype.testCounts = function() {
|
| - assertEquals(2, this._x);
|
| - assertEquals(2, super[x]);
|
| - super[x]++;
|
| - assertEquals(3, super[x]);
|
| - ++super[x];
|
| - assertEquals(4, super[x]);
|
| - assertEquals(4, super[x]++);
|
| - assertEquals(5, super[x]);
|
| - assertEquals(6, ++super[x]);
|
| - assertEquals(6, super[x]);
|
| - assertEquals(6, this._x);
|
| -
|
| - super[x]--;
|
| - assertEquals(5, super[x]);
|
| - --super[x];
|
| - assertEquals(4, super[x]);
|
| - assertEquals(4, super[x]--);
|
| - assertEquals(3, super[x]);
|
| - assertEquals(2, --super[x]);
|
| - assertEquals(2, super[x]);
|
| - assertEquals(2, this._x);
|
| - }.toMethod(Derived.prototype);
|
| new Derived().testCounts();
|
| }());
|
|
|
| @@ -1616,32 +1628,31 @@
|
| Derived.prototype = {
|
| __proto__: Base.prototype,
|
| constructor: Derived,
|
| - _x: 2
|
| + _x: 2,
|
| + testCounts() {
|
| + assertEquals(2, this._x);
|
| + assertEquals(2, super[x]);
|
| + super[x]++;
|
| + assertEquals(3, super[x]);
|
| + ++super[x];
|
| + assertEquals(4, super[x]);
|
| + assertEquals(4, super[x]++);
|
| + assertEquals(5, super[x]);
|
| + assertEquals(6, ++super[x]);
|
| + assertEquals(6, super[x]);
|
| + assertEquals(6, this._x);
|
| +
|
| + super[x]--;
|
| + assertEquals(5, super[x]);
|
| + --super[x];
|
| + assertEquals(4, super[x]);
|
| + assertEquals(4, super[x]--);
|
| + assertEquals(3, super[x]);
|
| + assertEquals(2, --super[x]);
|
| + assertEquals(2, super[x]);
|
| + assertEquals(2, this._x);
|
| + }
|
| };
|
| -
|
| - Derived.prototype.testCounts = function() {
|
| - assertEquals(2, this._x);
|
| - assertEquals(2, super[x]);
|
| - super[x]++;
|
| - assertEquals(3, super[x]);
|
| - ++super[x];
|
| - assertEquals(4, super[x]);
|
| - assertEquals(4, super[x]++);
|
| - assertEquals(5, super[x]);
|
| - assertEquals(6, ++super[x]);
|
| - assertEquals(6, super[x]);
|
| - assertEquals(6, this._x);
|
| -
|
| - super[x]--;
|
| - assertEquals(5, super[x]);
|
| - --super[x];
|
| - assertEquals(4, super[x]);
|
| - assertEquals(4, super[x]--);
|
| - assertEquals(3, super[x]);
|
| - assertEquals(2, --super[x]);
|
| - assertEquals(2, super[x]);
|
| - assertEquals(2, this._x);
|
| - }.toMethod(Derived.prototype);
|
| new Derived().testCounts();
|
| }());
|
|
|
| @@ -1650,26 +1661,27 @@
|
| function Base() {}
|
| Object.defineProperty(Base.prototype, 'x', { value : 27, writable: false });
|
| function Derived() {}
|
| -
|
| - Derived.prototype = { __proto__: Base.prototype, constructor: Derived };
|
| -
|
| - Derived.prototype.mSloppy = function() {
|
| - assertEquals(27, super.x);
|
| - assertEquals(27, this.x);
|
| - super.x = 10;
|
| - assertEquals(27, super.x);
|
| - assertEquals(27, this.x);
|
| - }.toMethod(Derived.prototype);
|
| - Derived.prototype.mStrict = function() {
|
| - 'use strict';
|
| - assertEquals(27, super.x);
|
| - assertEquals(27, this.x);
|
| - var ex = null;
|
| - try { super.x = 10; } catch(e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| - assertEquals(27, super.x);
|
| - assertEquals(27, this.x);
|
| - }.toMethod(Derived.prototype);
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + constructor: Derived,
|
| + mSloppy() {
|
| + assertEquals(27, super.x);
|
| + assertEquals(27, this.x);
|
| + super.x = 10;
|
| + assertEquals(27, super.x);
|
| + assertEquals(27, this.x);
|
| + },
|
| + mStrict() {
|
| + 'use strict';
|
| + assertEquals(27, super.x);
|
| + assertEquals(27, this.x);
|
| + var ex = null;
|
| + try { super.x = 10; } catch(e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| + assertEquals(27, super.x);
|
| + assertEquals(27, this.x);
|
| + }
|
| + };
|
| new Derived().mSloppy();
|
| new Derived().mStrict();
|
| }());
|
| @@ -1681,25 +1693,27 @@
|
| Object.defineProperty(Base.prototype, x, { value : 27, writable: false });
|
| function Derived() {}
|
|
|
| - Derived.prototype = { __proto__: Base.prototype, constructor: Derived };
|
| -
|
| - Derived.prototype.mSloppy = function() {
|
| - assertEquals(27, super[x]);
|
| - assertEquals(27, this[x]);
|
| - super[x] = 10;
|
| - assertEquals(27, super[x]);
|
| - assertEquals(27, this[x]);
|
| - }.toMethod(Derived.prototype);
|
| - Derived.prototype.mStrict = function() {
|
| - 'use strict';
|
| - assertEquals(27, super[x]);
|
| - assertEquals(27, this[x]);
|
| - var ex = null;
|
| - try { super[x] = 10; } catch(e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| - assertEquals(27, super[x]);
|
| - assertEquals(27, this[x]);
|
| - }.toMethod(Derived.prototype);
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + constructor: Derived,
|
| + mSloppy() {
|
| + assertEquals(27, super[x]);
|
| + assertEquals(27, this[x]);
|
| + super[x] = 10;
|
| + assertEquals(27, super[x]);
|
| + assertEquals(27, this[x]);
|
| + },
|
| + mStrict() {
|
| + 'use strict';
|
| + assertEquals(27, super[x]);
|
| + assertEquals(27, this[x]);
|
| + var ex = null;
|
| + try { super[x] = 10; } catch(e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| + assertEquals(27, super[x]);
|
| + assertEquals(27, this[x]);
|
| + }
|
| + };
|
| new Derived().mSloppy();
|
| new Derived().mStrict();
|
| }());
|
| @@ -1711,55 +1725,51 @@
|
| Object.defineProperty(Base.prototype, x, { value : 27, writable: false });
|
| function Derived() {}
|
|
|
| - Derived.prototype = { __proto__: Base.prototype, constructor: Derived };
|
| -
|
| - Derived.prototype.mSloppy = function() {
|
| - assertEquals(27, super[x]);
|
| - assertEquals(27, this[x]);
|
| - super[x] = 10;
|
| - assertEquals(27, super[x]);
|
| - assertEquals(27, this[x]);
|
| - }.toMethod(Derived.prototype);
|
| - Derived.prototype.mStrict = function() {
|
| - 'use strict';
|
| - assertEquals(27, super[x]);
|
| - assertEquals(27, this[x]);
|
| - var ex = null;
|
| - try { super[x] = 10; } catch(e) { ex = e; }
|
| - assertTrue(ex instanceof TypeError);
|
| - assertEquals(27, super[x]);
|
| - assertEquals(27, this[x]);
|
| - }.toMethod(Derived.prototype);
|
| + Derived.prototype = {
|
| + __proto__: Base.prototype,
|
| + constructor: Derived,
|
| + mSloppy() {
|
| + assertEquals(27, super[x]);
|
| + assertEquals(27, this[x]);
|
| + super[x] = 10;
|
| + assertEquals(27, super[x]);
|
| + assertEquals(27, this[x]);
|
| + },
|
| + mStrict() {
|
| + 'use strict';
|
| + assertEquals(27, super[x]);
|
| + assertEquals(27, this[x]);
|
| + var ex = null;
|
| + try { super[x] = 10; } catch(e) { ex = e; }
|
| + assertTrue(ex instanceof TypeError);
|
| + assertEquals(27, super[x]);
|
| + assertEquals(27, this[x]);
|
| + }
|
| + };
|
| new Derived().mSloppy();
|
| new Derived().mStrict();
|
| }());
|
|
|
|
|
| -function Subclass(base, constructor) {
|
| - var homeObject = {
|
| - __proto__: base.prototype,
|
| - constructor: constructor
|
| - };
|
| - constructor.__proto__ = base;
|
| - constructor.prototype = homeObject;
|
| - // not doing toMethod: home object is not required for
|
| - // super constructor calls.
|
| - return constructor;
|
| -}
|
| -
|
| (function TestSuperCall() {
|
| + 'use strict';
|
| +
|
| var baseCalled = 0;
|
| var derivedCalled = 0;
|
| var derivedDerivedCalled = 0;
|
|
|
| - function Base() {
|
| - baseCalled++;
|
| + class Base {
|
| + constructor() {
|
| + baseCalled++;
|
| + }
|
| }
|
|
|
| - var Derived = Subclass(Base, function () {
|
| - super();
|
| - derivedCalled++;
|
| - });
|
| + class Derived extends Base {
|
| + constructor() {
|
| + super();
|
| + derivedCalled++;
|
| + }
|
| + }
|
|
|
| assertEquals(Base, Base.prototype.constructor);
|
| assertEquals(Base.prototype, Derived.prototype.__proto__);
|
| @@ -1770,10 +1780,12 @@ function Subclass(base, constructor) {
|
| assertEquals(1, baseCalled);
|
| assertEquals(1, derivedCalled);
|
|
|
| - var DerivedDerived = Subclass(Derived, function () {
|
| - super();
|
| - derivedDerivedCalled++;
|
| - });
|
| + class DerivedDerived extends Derived {
|
| + constructor() {
|
| + super();
|
| + derivedDerivedCalled++;
|
| + }
|
| + }
|
|
|
| baseCalled = 0;
|
| derivedCalled = 0;
|
| @@ -1783,32 +1795,42 @@ function Subclass(base, constructor) {
|
| assertEquals(1, derivedCalled);
|
| assertEquals(1, derivedDerivedCalled);
|
|
|
| - function Base2(v) {
|
| - this.fromBase = v;
|
| + class Base2 {
|
| + constructor(v) {
|
| + this.fromBase = v;
|
| + }
|
| + }
|
| + class Derived2 extends Base2 {
|
| + constructor(v1, v2) {
|
| + super(v1);
|
| + this.fromDerived = v2;
|
| + }
|
| }
|
| - var Derived2 = Subclass(Base2, function (v1, v2) {
|
| - super(v1);
|
| - this.fromDerived = v2;
|
| - });
|
|
|
| var d = new Derived2("base", "derived");
|
| assertEquals("base", d.fromBase);
|
| assertEquals("derived", d.fromDerived);
|
|
|
| - function ImplicitSubclassOfFunction() {
|
| - super();
|
| - this.x = 123;
|
| + class ImplicitSubclassOfFunction {
|
| + constructor() {
|
| + super();
|
| + this.x = 123;
|
| + }
|
| }
|
|
|
| var o = new ImplicitSubclassOfFunction();
|
| assertEquals(123, o.x);
|
|
|
| var calls = 0;
|
| - function G() {
|
| - calls++;
|
| + class G {
|
| + constructor() {
|
| + calls++;
|
| + }
|
| }
|
| - function F() {
|
| - super();
|
| + class F {
|
| + constructor() {
|
| + super();
|
| + }
|
| }
|
| F.__proto__ = G;
|
| new F();
|
| @@ -1819,103 +1841,84 @@ function Subclass(base, constructor) {
|
| }());
|
|
|
|
|
| -(function TestNewSuper() {
|
| - var baseCalled = 0;
|
| - var derivedCalled = 0;
|
| -
|
| - function Base() {
|
| - baseCalled++;
|
| - this.x = 15;
|
| - }
|
| -
|
| -
|
| - var Derived = Subclass(Base, function() {
|
| - baseCalled = 0;
|
| - var b = new super();
|
| - assertEquals(1, baseCalled)
|
| - assertEquals(Base.prototype, b.__proto__);
|
| - assertEquals(15, b.x);
|
| - assertEquals(undefined, this.x);
|
| - derivedCalled++;
|
| - });
|
| -
|
| - derivedCalled = 0;
|
| - new Derived();
|
| - assertEquals(1, derivedCalled);
|
| -}());
|
| -
|
| -
|
| (function TestSuperCallErrorCases() {
|
| - function T() {
|
| - super();
|
| + 'use strict';
|
| + class T {
|
| + constructor() {
|
| + super();
|
| + }
|
| }
|
| +
|
| T.__proto__ = null;
|
| - // Spec says ReferenceError here, but for other IsCallable failures
|
| - // we throw TypeError.
|
| - // Filed https://bugs.ecmascript.org/show_bug.cgi?id=3282
|
| assertThrows(function() { new T(); }, TypeError);
|
| -
|
| - function T1() {
|
| - var b = new super();
|
| - }
|
| - T1.__proto = null;
|
| - assertThrows(function() { new T1(); }, TypeError);
|
| }());
|
|
|
|
|
| (function TestSuperCallSyntacticRestriction() {
|
| + 'use strict';
|
| assertThrows(function() {
|
| - function C() {
|
| - var y;
|
| - super();
|
| + class C {
|
| + constructor() {
|
| + super(this.x);
|
| + }
|
| }
|
| new C();
|
| }, TypeError);
|
| assertThrows(function() {
|
| - function C() {
|
| - super(this.x);
|
| + class C {
|
| + constructor() {
|
| + super(this);
|
| + }
|
| }
|
| new C();
|
| }, TypeError);
|
| assertThrows(function() {
|
| - function C() {
|
| - super(this);
|
| + class C {
|
| + constructor() {
|
| + super(1, 2, Object.getPrototypeOf(this));
|
| + }
|
| }
|
| new C();
|
| }, TypeError);
|
| assertThrows(function() {
|
| - function C() {
|
| - super(1, 2, Object.getPrototypeOf(this));
|
| + class C {
|
| + constructor() {
|
| + { super(1, 2); }
|
| + }
|
| }
|
| new C();
|
| }, TypeError);
|
| assertThrows(function() {
|
| - function C() {
|
| - { super(1, 2); }
|
| - }; new C();
|
| - }, TypeError);
|
| - assertThrows(function() {
|
| - function C() {
|
| - if (1) super();
|
| - }; new C();
|
| + class C {
|
| + constructor() {
|
| + if (1) super();
|
| + }
|
| + }
|
| + new C();
|
| }, TypeError);
|
|
|
| - function C1() {
|
| - 'use strict';
|
| - super();
|
| - };
|
| + class C1 {
|
| + constructor() {
|
| + 'use strict';
|
| + super();
|
| + }
|
| + }
|
| new C1();
|
|
|
| - function C2() {
|
| - ; 'use strict';;;;;
|
| - super();
|
| - };
|
| + class C2 {
|
| + constructor() {
|
| + ; 'use strict';;;;;
|
| + super();
|
| + }
|
| + }
|
| new C2();
|
|
|
| - function C3() {
|
| - ; 'use strict';;;;;
|
| - // This is a comment.
|
| - super();
|
| + class C3 {
|
| + constructor() {
|
| + ; 'use strict';;;;;
|
| + // This is a comment.
|
| + super();
|
| + }
|
| }
|
| new C3();
|
| }());
|
|
|