ladybird/Libraries/LibJS/Tests/classes/class-static-initializers.js
devgianlu 08cfd5ff1b LibJS: Set empty function parameters on ClassStaticInit scope
This prevents the variables declared inside a class static initializer
to escape to the nearest containing function causing all sorts of memory
corruptions.
2025-04-05 18:20:36 +01:00

91 lines
1.7 KiB
JavaScript

test("basic functionality", () => {
var called = false;
class A {
static {
expect(called).toBeFalse();
expect(this.name).toBe("A");
called = true;
}
}
expect(called).toBeTrue();
new A();
expect(called).toBeTrue();
});
test("called in order", () => {
var i = 0;
class A {
static {
expect(i).toBe(0);
i++;
}
static method() {
return 2;
}
static {
expect(i).toBe(1);
i++;
}
}
expect(i).toBe(2);
new A();
expect(i).toBe(2);
});
test("correct this", () => {
var thisValue = null;
class A {
static {
thisValue = this;
}
}
expect(thisValue).toBe(A);
});
describe("class like constructs can be used inside", () => {
test("can use new.target", () => {
let value = 1;
class C {
static {
value = new.target;
}
}
expect(value).toBeUndefined();
});
test("can use super property lookup", () => {
function parent() {}
parent.val = 3;
let hit = false;
class C extends parent {
static {
hit = true;
expect(super.val).toBe(3);
}
}
expect(hit).toBeTrue();
});
});
// https://github.com/LadybirdBrowser/ladybird/pull/4226
test("declaring variables", () => {
class A {
static {
const a = 1;
let b = 2;
var c = 3;
function d() {}
expect(a).toBe(1);
expect(b).toBe(2);
expect(c).toBe(3);
expect(typeof d).toBe("function");
}
}
});