diff options
Diffstat (limited to 'Libraries/LibJS/Tests/classes/class-static-setters.js')
-rw-r--r-- | Libraries/LibJS/Tests/classes/class-static-setters.js | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/Libraries/LibJS/Tests/classes/class-static-setters.js b/Libraries/LibJS/Tests/classes/class-static-setters.js new file mode 100644 index 0000000000..41d867a7e5 --- /dev/null +++ b/Libraries/LibJS/Tests/classes/class-static-setters.js @@ -0,0 +1,104 @@ +describe("correct behavior", () => { + test("basic functionality", () => { + class A { + static get x() { + return this._x; + } + + static set x(value) { + this._x = value * 2; + } + } + + expect(A.x).toBeUndefined(); + expect(A).not.toHaveProperty("_x"); + A.x = 3; + expect(A.x).toBe(6); + expect(A).toHaveProperty("_x", 6); + }); + + test("name", () => { + class A { + static set x(v) {} + } + + const d = Object.getOwnPropertyDescriptor(A, "x"); + expect(d.set.name).toBe("set x"); + }); + + test("extended name syntax", () => { + class A { + static set "method with space"(value) { + this.a = value; + } + + static set 12(value) { + this.b = value; + } + + static set [`he${"llo"}`](value) { + this.c = value; + } + } + + A["method with space"] = 1; + A[12] = 2; + A.hello = 3; + expect(A.a).toBe(1); + expect(A.b).toBe(2); + expect(A.c).toBe(3); + }); + + test("inherited static setter", () => { + class Parent { + static get x() { + return this._x; + } + + static set x(value) { + this._x = value * 2; + } + } + + class Child extends Parent {} + + expect(Child.x).toBeUndefined(); + Child.x = 10; + expect(Child.x).toBe(20); + }); + + test("inherited static setter overriding", () => { + class Parent { + static get x() { + return this._x; + } + + static set x(value) { + this._x = value * 2; + } + } + + class Child extends Parent { + static get x() { + return this._x; + } + + static set x(value) { + this._x = value * 3; + } + } + + expect(Child.x).toBeUndefined(); + Child.x = 10; + expect(Child.x).toBe(30); + }); +}); + +describe("errors", () => { + test('"set static" is a syntax error', () => { + expect(` + class A { + set static foo(value) {} + }`).not.toEval(); + }); +}); |