| Index: test/mjsunit/harmony/classes.js
|
| diff --git a/test/mjsunit/harmony/classes.js b/test/mjsunit/harmony/classes.js
|
| index a83d483bd9a20945d383f1bda233875fb87b748c..3a22fd9b5427dcf74873f541744fcd65c42a7978 100644
|
| --- a/test/mjsunit/harmony/classes.js
|
| +++ b/test/mjsunit/harmony/classes.js
|
| @@ -153,6 +153,240 @@
|
|
|
| })();
|
|
|
| +
|
| +(function TestToString() {
|
| + class C {}
|
| + assertEquals('class C {}', C.toString());
|
| +
|
| + class D { constructor() { 42; } }
|
| + assertEquals('class D { constructor() { 42; } }', D.toString());
|
| +
|
| + class E { x() { 42; } }
|
| + assertEquals('class E { x() { 42; } }', E.toString());
|
| +})();
|
| +
|
| +
|
| +function assertMethodDescriptor(object, name) {
|
| + var descr = Object.getOwnPropertyDescriptor(object, name);
|
| + assertTrue(descr.configurable);
|
| + assertTrue(descr.enumerable);
|
| + assertTrue(descr.writable);
|
| + assertEquals('function', typeof descr.value);
|
| +}
|
| +
|
| +function assertGetterDescriptor(object, name) {
|
| + var descr = Object.getOwnPropertyDescriptor(object, name);
|
| + assertTrue(descr.configurable);
|
| + assertTrue(descr.enumerable);
|
| + assertEquals('function', typeof descr.get);
|
| + assertEquals(undefined, descr.set);
|
| +}
|
| +
|
| +
|
| +function assertSetterDescriptor(object, name) {
|
| + var descr = Object.getOwnPropertyDescriptor(object, name);
|
| + assertTrue(descr.configurable);
|
| + assertTrue(descr.enumerable);
|
| + assertEquals(undefined, descr.get);
|
| + assertEquals('function', typeof descr.set);
|
| +}
|
| +
|
| +
|
| +function assertAccessorDescriptor(object, name) {
|
| + var descr = Object.getOwnPropertyDescriptor(object, name);
|
| + assertTrue(descr.configurable);
|
| + assertTrue(descr.enumerable);
|
| + assertEquals('function', typeof descr.get);
|
| + assertEquals('function', typeof descr.set);
|
| +}
|
| +
|
| +
|
| +(function TestMethods() {
|
| + class C {
|
| + method() { return 1; }
|
| + static staticMethod() { return 2; }
|
| + method2() { return 3; }
|
| + static staticMethod2() { return 4; }
|
| + }
|
| +
|
| + assertMethodDescriptor(C.prototype, 'method');
|
| + assertMethodDescriptor(C.prototype, 'method2');
|
| + assertMethodDescriptor(C, 'staticMethod');
|
| + assertMethodDescriptor(C, 'staticMethod2');
|
| +
|
| + assertEquals(1, new C().method());
|
| + assertEquals(2, C.staticMethod());
|
| + assertEquals(3, new C().method2());
|
| + assertEquals(4, C.staticMethod2());
|
| +})();
|
| +
|
| +
|
| +(function TestGetters() {
|
| + class C {
|
| + get x() { return 1; }
|
| + static get staticX() { return 2; }
|
| + get y() { return 3; }
|
| + static get staticY() { return 4; }
|
| + }
|
| +
|
| + assertGetterDescriptor(C.prototype, 'x');
|
| + assertGetterDescriptor(C.prototype, 'y');
|
| + assertGetterDescriptor(C, 'staticX');
|
| + assertGetterDescriptor(C, 'staticY');
|
| +
|
| + assertEquals(1, new C().x);
|
| + assertEquals(2, C.staticX);
|
| + assertEquals(3, new C().y);
|
| + assertEquals(4, C.staticY);
|
| +})();
|
| +
|
| +
|
| +
|
| +(function TestSetters() {
|
| + var x, staticX, y, staticY;
|
| + class C {
|
| + set x(v) { x = v; }
|
| + static set staticX(v) { staticX = v; }
|
| + set y(v) { y = v; }
|
| + static set staticY(v) { staticY = v; }
|
| + }
|
| +
|
| + assertSetterDescriptor(C.prototype, 'x');
|
| + assertSetterDescriptor(C.prototype, 'y');
|
| + assertSetterDescriptor(C, 'staticX');
|
| + assertSetterDescriptor(C, 'staticY');
|
| +
|
| + assertEquals(1, new C().x = 1);
|
| + assertEquals(1, x);
|
| + assertEquals(2, C.staticX = 2);
|
| + assertEquals(2, staticX);
|
| + assertEquals(3, new C().y = 3);
|
| + assertEquals(3, y);
|
| + assertEquals(4, C.staticY = 4);
|
| + assertEquals(4, staticY);
|
| +})();
|
| +
|
| +
|
| +(function TestSideEffectsInPropertyDefine() {
|
| + function B() {}
|
| + B.prototype = {
|
| + constructor: B,
|
| + set m(v) {
|
| + throw Error();
|
| + }
|
| + };
|
| +
|
| + class C extends B {
|
| + m() { return 1; }
|
| + }
|
| +
|
| + assertEquals(1, new C().m());
|
| +})();
|
| +
|
| +
|
| +(function TestAccessors() {
|
| + class C {
|
| + constructor(x) {
|
| + this._x = x;
|
| + }
|
| +
|
| + get x() { return this._x; }
|
| + set x(v) { this._x = v; }
|
| +
|
| + static get staticX() { return this._x; }
|
| + static set staticX(v) { this._x = v; }
|
| + }
|
| +
|
| + assertAccessorDescriptor(C.prototype, 'x');
|
| + assertAccessorDescriptor(C, 'staticX');
|
| +
|
| + var c = new C(1);
|
| + c._x = 1;
|
| + assertEquals(1, c.x);
|
| + c.x = 2;
|
| + assertEquals(2, c._x);
|
| +
|
| + C._x = 3;
|
| + assertEquals(3, C.staticX);
|
| + C._x = 4;
|
| + assertEquals(4, C.staticX );
|
| +})();
|
| +
|
| +
|
| +(function TestProto() {
|
| + class C {
|
| + __proto__() { return 1; }
|
| + }
|
| + assertMethodDescriptor(C.prototype, '__proto__');
|
| + assertEquals(1, new C().__proto__());
|
| +})();
|
| +
|
| +
|
| +(function TestProtoStatic() {
|
| + class C {
|
| + static __proto__() { return 1; }
|
| + }
|
| + assertMethodDescriptor(C, '__proto__');
|
| + assertEquals(1, C.__proto__());
|
| +})();
|
| +
|
| +
|
| +(function TestProtoAccessor() {
|
| + class C {
|
| + get __proto__() { return this._p; }
|
| + set __proto__(v) { this._p = v; }
|
| + }
|
| + assertAccessorDescriptor(C.prototype, '__proto__');
|
| + var c = new C();
|
| + c._p = 1;
|
| + assertEquals(1, c.__proto__);
|
| + c.__proto__ = 2;
|
| + assertEquals(2, c.__proto__);
|
| +})();
|
| +
|
| +
|
| +(function TestStaticProtoAccessor() {
|
| + class C {
|
| + static get __proto__() { return this._p; }
|
| + static set __proto__(v) { this._p = v; }
|
| + }
|
| + assertAccessorDescriptor(C, '__proto__');
|
| + C._p = 1;
|
| + assertEquals(1, C.__proto__);
|
| + C.__proto__ = 2;
|
| + assertEquals(2, C.__proto__);
|
| +})();
|
| +
|
| +
|
| +(function TestSettersOnProto() {
|
| + function Base() {}
|
| + Base.prototype = {
|
| + set constructor(_) {
|
| + assertUnreachable();
|
| + },
|
| + set m(_) {
|
| + assertUnreachable();
|
| + }
|
| + };
|
| + Object.defineProperty(Base, 'staticM', {
|
| + set: function() {
|
| + assertUnreachable();
|
| + }
|
| + });
|
| +
|
| + class C extends Base {
|
| + m() {
|
| + return 1;
|
| + }
|
| + static staticM() {
|
| + return 2;
|
| + }
|
| + }
|
| +
|
| + assertEquals(1, new C().m());
|
| + assertEquals(2, C.staticM());
|
| +})();
|
| +
|
| /* TODO(arv): Implement
|
| (function TestNameBindingInConstructor() {
|
| class C {
|
| @@ -165,15 +399,3 @@
|
| new C();
|
| })();
|
| */
|
| -
|
| -
|
| -(function TestToString() {
|
| - class C {}
|
| - assertEquals('class C {}', C.toString());
|
| -
|
| - class D { constructor() { 42; } }
|
| - assertEquals('class D { constructor() { 42; } }', D.toString());
|
| -
|
| - class E { x() { 42; } }
|
| - assertEquals('class E { x() { 42; } }', E.toString());
|
| -})();
|
|
|