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