| // Do the things we write in classes actually appear as they are supposed to? |
| |
| var methodCalled; |
| var getterCalled; |
| var setterCalled; |
| var constructorCalled; |
| var staticMethodCalled; |
| var staticGetterCalled; |
| var staticSetterCalled; |
| class testClass { |
| constructor() { constructorCalled = true; } |
| __proto__() { methodCalled = true } |
| get getter() { getterCalled = true; } |
| set setter(x) { setterCalled = true; } |
| static staticMethod() { staticMethodCalled = true; } |
| static get staticGetter() { staticGetterCalled = true; } |
| static set staticSetter(x) { staticSetterCalled = true; } |
| *[Symbol.iterator]() { yield "cow"; yield "pig"; } |
| } |
| |
| for (let a of [testClass, |
| class { |
| constructor() { constructorCalled = true; } |
| __proto__() { methodCalled = true } |
| get getter() { getterCalled = true; } |
| set setter(x) { setterCalled = true; } |
| static staticMethod() { staticMethodCalled = true; } |
| static get staticGetter() { staticGetterCalled = true; } |
| static set staticSetter(x) { staticSetterCalled = true; } |
| *[Symbol.iterator]() { yield "cow"; yield "pig"; } |
| }]) { |
| |
| methodCalled = false; |
| getterCalled = false; |
| setterCalled = false; |
| constructorCalled = false; |
| staticMethodCalled = false; |
| staticGetterCalled = false; |
| staticSetterCalled = false; |
| |
| var aConstDesc = Object.getOwnPropertyDescriptor(a.prototype, "constructor"); |
| assertEq(aConstDesc.writable, true); |
| assertEq(aConstDesc.configurable, true); |
| assertEq(aConstDesc.enumerable, false); |
| new aConstDesc.value(); |
| assertEq(constructorCalled, true); |
| |
| // __proto__ is just an identifier for classes. No prototype changes are made. |
| assertEq(Object.getPrototypeOf(a.prototype), Object.prototype); |
| var aMethDesc = Object.getOwnPropertyDescriptor(a.prototype, "__proto__"); |
| assertEq(aMethDesc.writable, true); |
| assertEq(aMethDesc.configurable, true); |
| assertEq(aMethDesc.enumerable, false); |
| aMethDesc.value(); |
| assertEq(methodCalled, true); |
| |
| var aGetDesc = Object.getOwnPropertyDescriptor(a.prototype, "getter"); |
| assertEq(aGetDesc.configurable, true); |
| assertEq(aGetDesc.enumerable, false); |
| aGetDesc.get(); |
| assertThrowsInstanceOf(() => new aGetDesc.get, TypeError); |
| assertEq(getterCalled, true); |
| |
| var aSetDesc = Object.getOwnPropertyDescriptor(a.prototype, "setter"); |
| assertEq(aSetDesc.configurable, true); |
| assertEq(aSetDesc.enumerable, false); |
| aSetDesc.set(); |
| assertThrowsInstanceOf(() => new aSetDesc.set, TypeError); |
| assertEq(setterCalled, true); |
| assertDeepEq(aSetDesc, Object.getOwnPropertyDescriptor(a.prototype, "setter")); |
| |
| assertEq(Object.getOwnPropertyDescriptor(new a(), "staticMethod"), undefined); |
| var aStaticMethDesc = Object.getOwnPropertyDescriptor(a, "staticMethod"); |
| assertEq(aStaticMethDesc.configurable, true); |
| assertEq(aStaticMethDesc.enumerable, false); |
| assertEq(aStaticMethDesc.writable, true); |
| aStaticMethDesc.value(); |
| assertThrowsInstanceOf(() => new aStaticMethDesc.value, TypeError); |
| assertEq(staticMethodCalled, true); |
| |
| assertEq(Object.getOwnPropertyDescriptor(new a(), "staticGetter"), undefined); |
| var aStaticGetDesc = Object.getOwnPropertyDescriptor(a, "staticGetter"); |
| assertEq(aStaticGetDesc.configurable, true); |
| assertEq(aStaticGetDesc.enumerable, false); |
| aStaticGetDesc.get(); |
| assertThrowsInstanceOf(() => new aStaticGetDesc.get, TypeError); |
| assertEq(staticGetterCalled, true); |
| |
| assertEq(Object.getOwnPropertyDescriptor(new a(), "staticSetter"), undefined); |
| var aStaticSetDesc = Object.getOwnPropertyDescriptor(a, "staticSetter"); |
| assertEq(aStaticSetDesc.configurable, true); |
| assertEq(aStaticSetDesc.enumerable, false); |
| aStaticSetDesc.set(); |
| assertThrowsInstanceOf(() => new aStaticSetDesc.set, TypeError); |
| assertEq(staticSetterCalled, true); |
| |
| assertEq([...new a()].join(), "cow,pig"); |
| } |
| |
| if (typeof reportCompare === "function") |
| reportCompare(0, 0, "OK"); |