ladybird/Tests/LibJS/Runtime/classes/class-basic.js

50 lines
1.5 KiB
JavaScript
Raw Permalink Normal View History

test("class properties", () => {
class A {}
expect(A.name).toBe("A");
expect(A).toHaveLength(0);
});
test("class constructor prototype property descriptor", () => {
class A {}
const descriptor = Object.getOwnPropertyDescriptor(A, "prototype");
expect(descriptor.value).toBe(A.prototype);
expect(descriptor.writable).toBeFalse();
expect(descriptor.enumerable).toBeFalse();
expect(descriptor.configurable).toBeFalse();
const constructorDescriptor = Object.getOwnPropertyDescriptor(A.prototype, "constructor");
expect(constructorDescriptor.value).toBe(A);
expect(constructorDescriptor.writable).toBeTrue();
expect(constructorDescriptor.enumerable).toBeFalse();
expect(constructorDescriptor.configurable).toBeTrue();
});
test("class heritage and computed property names are strict mode code", () => {
expect(() => {
class A {
[(Object.preventExtensions({}).prop = 1)]() {}
}
}).toThrow(TypeError);
expect(() => {
const A = class {
[(Object.preventExtensions({}).prop = 1)]() {}
};
}).toThrow(TypeError);
expect(() => {
class A {
[(Object.preventExtensions({}).prop = 1)];
}
}).toThrow(TypeError);
expect(() => {
class A extends (Object.preventExtensions({}).prop = 1) {}
}).toThrow(TypeError);
expect(() => {
const A = class extends (Object.preventExtensions({}).prop = 1) {};
}).toThrow(TypeError);
});