test("basic functionality", () => { const A = class { constructor(x) { this.x = x; } getX() { return this.x * 2; } }; expect(new A(10).getX()).toBe(20); }); test("inline instantiation", () => { // prettier-ignore const a = new class { constructor() { this.x = 10; } getX() { return this.x * 2; } }; expect(a.getX()).toBe(20); }); test("inline instantiation with argument", () => { // prettier-ignore const a = new class { constructor(x) { this.x = x; } getX() { return this.x * 2; } }(10); expect(a.getX()).toBe(20); }); test("extending class expressions", () => { class A extends class { constructor(x) { this.x = x; } } { constructor(y) { super(y); this.y = y * 2; } } const a = new A(10); expect(a.x).toBe(10); expect(a.y).toBe(20); }); test("class expression name", () => { let A = class {}; expect(A.name).toBe("A"); let B = class C {}; expect(B.name).toBe("C"); });