mirror of
https://github.com/morluto/rea
synced 2026-10-26 22:28:27 -04:00
bdf865252c
Use the parsed semantic property key instead of treating all bracketed keys as dynamic. Preserve empty and numeric literal keys; unresolved computed expressions remain unknown. Validation: exact named preference and dynamic coverage regressions pass. Fixes #2521. Based on #3105. Co-authored-by: ShuaixinHuang <1836656514@qq.com>
56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { analyzeJavaScriptStaticSource } from "./javascriptStaticAnalysis.js";
|
|
|
|
describe("computed Electron web preference keys", () => {
|
|
it("retains exact string, numeric, and empty literal keys", () => {
|
|
const analysis = analyzeJavaScriptStaticSource(`
|
|
const { BrowserWindow } = require("electron");
|
|
new BrowserWindow({ webPreferences: {
|
|
["sandbox"]: true,
|
|
["preload"]: "./preload.js",
|
|
[1]: "numeric",
|
|
[""]: false
|
|
} });
|
|
`);
|
|
|
|
expect(analysis.parse_status).toBe("complete");
|
|
expect(analysis.electron.browser_windows[0]).toMatchObject({
|
|
preload_path: "./preload.js",
|
|
web_preferences: [
|
|
{ name: "", value: { status: "literal", value: false } },
|
|
{ name: "1", value: { status: "literal", value: "numeric" } },
|
|
{
|
|
name: "preload",
|
|
value: { status: "literal", value: "./preload.js" },
|
|
},
|
|
{ name: "sandbox", value: { status: "literal", value: true } },
|
|
],
|
|
});
|
|
});
|
|
|
|
it("keeps genuinely dynamic computed keys unknown", () => {
|
|
const analysis = analyzeJavaScriptStaticSource(`
|
|
const { BrowserWindow } = require("electron");
|
|
new BrowserWindow({ webPreferences: {
|
|
[getKey()]: true,
|
|
["sandbox"]: true
|
|
} });
|
|
`);
|
|
|
|
expect(analysis.parse_status).toBe("partial");
|
|
expect(analysis.electron.browser_windows[0]?.web_preferences).toEqual(
|
|
expect.arrayContaining([
|
|
expect.objectContaining({
|
|
name: expect.stringMatching(/^\[dynamic@/u),
|
|
value: expect.objectContaining({ status: "dynamic" }),
|
|
}),
|
|
{
|
|
name: "sandbox",
|
|
value: { status: "literal", value: true, expression: null },
|
|
},
|
|
]),
|
|
);
|
|
});
|
|
});
|