1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-29 17:35:06 +00:00

LibJS: Don't update names of resulting functions in object expression

The only cases where the name should be set is if the function comes
from a direct anonymous function expression.
This commit is contained in:
davidot 2022-12-13 01:30:32 +01:00 committed by Linus Groh
parent 897c7f7cc2
commit 2bbea62176
4 changed files with 63 additions and 10 deletions

View file

@ -215,3 +215,42 @@ describe("errors", () => {
expect("({ ...foo: bar })").not.toEval();
});
});
describe("naming of anon functions", () => {
test("method has name", () => {
expect({ func() {} }.func.name).toBe("func");
});
test("getter has name", () => {
expect(Object.getOwnPropertyDescriptor({ get func() {} }, "func").get.name).toBe(
"get func"
);
});
test("setter has name", () => {
expect(Object.getOwnPropertyDescriptor({ set func(v) {} }, "func").set.name).toBe(
"set func"
);
});
test("anon function property", () => {
expect({ func: function () {} }.func.name).toBe("func");
});
test("anon function from within parenthesis", () => {
expect({ func: function () {} }.func.name).toBe("func");
});
test("anon function from indirect expression", () => {
expect({ func: (0, function () {}) }.func.name).toBe("");
});
test("function from function call does not get named", () => {
function f() {
return function () {};
}
expect(f().name).toBe("");
expect({ func: f() }.func.name).toBe("");
});
});