Files
ladybird/Tests/LibJS/Runtime/function-constructor.js
Andreas Kling fdd7809bd1 Tests/LibJS: Add a big pile of AST, bytecode, and runtime tests
Created these while experimenting with LibJS. Might as well bring them
into the tree and increase our coverage.
2026-02-17 20:44:57 +01:00

37 lines
1.4 KiB
JavaScript

test("dynamic function can access global variables", () => {
globalThis.__calls = 0;
var f = new Function("__calls += 1; return __calls;");
expect(f()).toBe(1);
expect(f()).toBe(2);
expect(globalThis.__calls).toBe(2);
delete globalThis.__calls;
});
test("dynamic function uses GetBinding not GetGlobal", () => {
// Dynamic functions must use GetBinding (scope chain traversal) rather
// than GetGlobal (realm's global object) because a dynamic function's
// realm() can differ from its environment's realm when created via
// cross-realm Reflect.construct. This test verifies the basic case
// works: globals are accessed correctly via the scope chain.
globalThis.__x = 42;
var f = new Function("return __x;");
expect(f()).toBe(42);
delete globalThis.__x;
});
test("dynamic function with arguments object", () => {
var f = new Function("a", "b", "return arguments.length;");
expect(f(1, 2, 3)).toBe(3);
});
test("dynamic generator function can access global variables", () => {
globalThis.__genCalls = 0;
var GeneratorFunction = function* () {}.constructor;
var g = new GeneratorFunction("__genCalls += 1; yield __genCalls; __genCalls += 1; yield __genCalls;");
var iter = g();
expect(iter.next().value).toBe(1);
expect(iter.next().value).toBe(2);
expect(globalThis.__genCalls).toBe(2);
delete globalThis.__genCalls;
});