From bd0642e0a4b3cb6fb3a178620463803dce045eb9 Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Mon, 9 Nov 2026 14:58:35 +0800 Subject: [PATCH] test(javascript): give loader fixtures explicit source context --- .../applications/javascriptFactoryCompletion.test.ts | 2 ++ .../applications/javascriptWindowOptionsCli.test.ts | 1 + .../javascriptApplicationEmptyLiterals.test.ts | 8 ++++++-- .../javascriptFileUrlPaths.test.ts | 10 +++++++--- .../filesystem/javascriptApplicationWorkflows.test.ts | 1 + 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/tests/acceptance/applications/javascriptFactoryCompletion.test.ts b/tests/acceptance/applications/javascriptFactoryCompletion.test.ts index 3aa44d3d7f..fb348085ab 100644 --- a/tests/acceptance/applications/javascriptFactoryCompletion.test.ts +++ b/tests/acceptance/applications/javascriptFactoryCompletion.test.ts @@ -360,6 +360,7 @@ cliTest( const source = factorySource(scenario); const directory = join(root, scenario.name); await mkdir(directory); + await writeFile(join(directory, "package.json"), '{"type":"commonjs"}'); await writeFile(join(directory, "main.js"), source); const runtime = [false, true].map((flag) => runtimeChannels(source, flag), @@ -455,6 +456,7 @@ cliTest( expect(channels.length, name).toBe(expected); const directory = join(root, name); await mkdir(directory); + await writeFile(join(directory, "package.json"), '{"type":"commonjs"}'); await writeFile(join(directory, "main.js"), source); const response = await call("analyze_javascript_application", { input_path: directory, diff --git a/tests/acceptance/applications/javascriptWindowOptionsCli.test.ts b/tests/acceptance/applications/javascriptWindowOptionsCli.test.ts index 43a85f22ff..2024250681 100644 --- a/tests/acceptance/applications/javascriptWindowOptionsCli.test.ts +++ b/tests/acceptance/applications/javascriptWindowOptionsCli.test.ts @@ -12,6 +12,7 @@ cliTest( async ({ cli }) => { const root = await createTestTempDirectory("rea-window-options-"); await writeFixtureFiles(root, { + "package.json": '{"type":"commonjs"}', "main.js": [ 'throw new Error("Static input must never execute");', 'const { BrowserWindow } = require("electron");', diff --git a/tests/boundary/filesystem/javascript-applications/javascriptApplicationEmptyLiterals.test.ts b/tests/boundary/filesystem/javascript-applications/javascriptApplicationEmptyLiterals.test.ts index 36cc81bb18..738742d096 100644 --- a/tests/boundary/filesystem/javascript-applications/javascriptApplicationEmptyLiterals.test.ts +++ b/tests/boundary/filesystem/javascript-applications/javascriptApplicationEmptyLiterals.test.ts @@ -40,7 +40,6 @@ it("retains empty literal evidence across the application boundary surfaces", as "new WebSocket('');", "navigator.serviceWorker.register('');", "new Worker('');", - "const x = require('');", "import y from ''; y();", "import('');", "localStorage.getItem('');", @@ -50,13 +49,18 @@ it("retains empty literal evidence across the application boundary surfaces", as "win.loadURL('');", "app.get('', handler);", "process.on('', () => 1);", + ]; + const commonJsSources = [ + "const x = require('');", "const { EventEmitter } = require('events'); new EventEmitter().on('', () => 1);", "const { spawn } = require('child_process'); spawn('/bin/x').on('', () => 1);", "const { ipcMain } = require('electron'); ipcMain.handle('', () => 1);", "const { ipcRenderer } = require('electron'); ipcRenderer.invoke('');", "const { contextBridge } = require('electron'); contextBridge.exposeInMainWorld('', {});", ]; - const output = await analyzeSource(sources.join("\n")); + const output = await analyzeSource(sources.join("\n"), { + "commonjs.cjs": commonJsSources.join("\n"), + }); expect(output.graph.nodes).toEqual( expect.arrayContaining([ expect.objectContaining({ kind: "endpoint" }), diff --git a/tests/boundary/filesystem/javascript-applications/javascriptFileUrlPaths.test.ts b/tests/boundary/filesystem/javascript-applications/javascriptFileUrlPaths.test.ts index e2cf14aa05..d0959c26a2 100644 --- a/tests/boundary/filesystem/javascript-applications/javascriptFileUrlPaths.test.ts +++ b/tests/boundary/filesystem/javascript-applications/javascriptFileUrlPaths.test.ts @@ -7,8 +7,9 @@ import { describe, expect, it } from "vitest"; import { createTestTempDirectory } from "../../../fixtures/temporaryDirectory.js"; import { javascriptApplicationAnalysisResultSchema } from "../../../../src/domain/javascript/javascriptApplicationAnalysis.js"; +import { parseJavaScriptSource } from "../../../../src/domain/javascript/javascriptSourceParser.js"; import { staticPath } from "../../../../src/domain/javascript/javascriptStaticAnalysisHelpers.js"; -import { analyzeJavaScriptStaticSource } from "../../../../src/domain/javascript/javascriptStaticAnalysis.js"; +import { analyzeParsedJavaScriptStaticSource } from "../../../../src/domain/javascript/javascriptStaticAnalysis.js"; import { analyzeJavaScriptApplication } from "../../../support/javascriptApplicationScope.js"; const urlCases = [ @@ -130,11 +131,14 @@ describe("JavaScript file URL paths", () => { }); it("does not URL-decode literal filesystem punctuation", () => { - const analysis = analyzeJavaScriptStaticSource(` + const source = ` const path = require('node:path'); const {BrowserWindow} = require('electron'); new BrowserWindow({webPreferences:{preload:path.join(__dirname,"preload%20?#.cjs")}}); - `); + `; + const parsed = parseJavaScriptSource(source, "main.cjs"); + if (parsed === null) throw new Error("Expected authored CommonJS source"); + const analysis = analyzeParsedJavaScriptStaticSource(source, parsed); expect(analysis.parse_error_count).toBe(0); expect(analysis.electron.browser_windows).toHaveLength(1); expect(analysis.electron.browser_windows[0]?.preload_path).toBe( diff --git a/tests/boundary/filesystem/javascriptApplicationWorkflows.test.ts b/tests/boundary/filesystem/javascriptApplicationWorkflows.test.ts index c62b2a5c31..89a0e3e3dd 100644 --- a/tests/boundary/filesystem/javascriptApplicationWorkflows.test.ts +++ b/tests/boundary/filesystem/javascriptApplicationWorkflows.test.ts @@ -228,6 +228,7 @@ describe("historical native comparison projections", () => { "rea-historical-native-members-", ); temporary.push(root); + await writeFile(join(root, "package.json"), '{"type":"commonjs"}'); await writeFile( join(root, "main.js"), 'const { open } = require("./addon.node"); open();',