mirror of
https://github.com/morluto/rea
synced 2026-10-26 14:25:49 -04:00
2612e474b6
Reuse semantic module provenance for aliases and keep property path segments intact through Electron matching. Reject shadowed names and nested or dotted lookalikes. Reassigned and conditionally initialized module origins remain ambiguous, with their source origins retained. Add a compiled CLI/stdio MCP regression for windows, preloads, context bridges, IPC operations, pairing, and source ranges. Validate 771 JavaScript domain tests, seven composition tests, the public acceptance workflow, build, and check:fast. Fixes #1656
85 lines
3.1 KiB
TypeScript
85 lines
3.1 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { analyzeJavaScriptStaticSource } from "./javascriptStaticAnalysis.js";
|
|
|
|
describe("Electron option evidence", () => {
|
|
it("keeps the final explicit preload and service name with unrelated keys", () => {
|
|
const analysis = analyzeJavaScriptStaticSource(`
|
|
const { BrowserWindow, utilityProcess } = require("electron");
|
|
new BrowserWindow({ webPreferences: { preload: "./kept.js", sandbox: true }, title: "App" });
|
|
utilityProcess.fork("./worker.js", [], { serviceName: "kept", cwd: "/app" });
|
|
`);
|
|
|
|
expect(analysis.parse_status).toBe("complete");
|
|
expect(analysis.electron.browser_windows[0]).toMatchObject({
|
|
preload_path: "./kept.js",
|
|
preload_resolution_context: "module-specifier",
|
|
web_preferences: [
|
|
{ name: "preload", value: { status: "literal", value: "./kept.js" } },
|
|
{ name: "sandbox", value: { status: "literal", value: true } },
|
|
],
|
|
});
|
|
expect(analysis.electron.utility_processes[0]).toMatchObject({
|
|
module_path: "./worker.js",
|
|
service_name: "kept",
|
|
});
|
|
});
|
|
|
|
it("does not read an audio or video preload attribute as a preload script", () => {
|
|
const analysis = analyzeJavaScriptStaticSource(`
|
|
jsx("audio", { controls: true, preload: "metadata", src });
|
|
(0, React.createElement)(\`video\`, { preload: "auto" });
|
|
jsx("webview", { preload: "./guest.js" });
|
|
const options = { preload: "./preload.js" };
|
|
`);
|
|
|
|
expect(analysis.role_paths.map(({ path }) => path)).toEqual([
|
|
"./guest.js",
|
|
"./preload.js",
|
|
]);
|
|
});
|
|
|
|
it("keeps values unknown when a later computed key can override them", () => {
|
|
const analysis = analyzeJavaScriptStaticSource(`
|
|
const { BrowserWindow, utilityProcess } = require("electron");
|
|
new BrowserWindow({ webPreferences: { preload: "./maybe.js" }, [key]: null });
|
|
utilityProcess.fork("./worker.js", [], { serviceName: "maybe", [key]: null });
|
|
`);
|
|
|
|
expect(analysis.parse_status).toBe("partial");
|
|
expect(analysis.parse_error_count).toBe(0);
|
|
expect(analysis.limitations.join(" ")).toContain("remain unknown");
|
|
expect(analysis.electron.browser_windows[0]).toMatchObject({
|
|
preload_path: null,
|
|
preload_resolution_context: null,
|
|
web_preferences_status: "dynamic",
|
|
web_preferences: [],
|
|
});
|
|
expect(analysis.electron.utility_processes[0]).toMatchObject({
|
|
module_path: "./worker.js",
|
|
service_name: null,
|
|
});
|
|
});
|
|
|
|
it("keeps recovered templates with invalid escapes dynamic", () => {
|
|
const source = [
|
|
'const { BrowserWindow } = require("electron");',
|
|
"new BrowserWindow({ webPreferences: { sandbox: `",
|
|
String.raw`\unicode`,
|
|
"` } });",
|
|
].join("");
|
|
const analysis = analyzeJavaScriptStaticSource(source);
|
|
|
|
expect(analysis.parse_status).toBe("partial");
|
|
expect(analysis.parse_error_count).toBe(1);
|
|
expect(
|
|
analysis.electron.browser_windows[0]?.web_preferences,
|
|
).toContainEqual(
|
|
expect.objectContaining({
|
|
name: "sandbox",
|
|
value: expect.objectContaining({ status: "dynamic", value: null }),
|
|
}),
|
|
);
|
|
});
|
|
});
|