Files
openclaw/src/plugin-sdk/windows-spawn.test.ts
2026-04-06 05:25:04 +01:00

53 lines
1.7 KiB
TypeScript

import { writeFile } from "node:fs/promises";
import path from "node:path";
import { describe, expect, it } from "vitest";
import { createPluginSdkTestHarness } from "./test-helpers.js";
import { materializeWindowsSpawnProgram, resolveWindowsSpawnProgram } from "./windows-spawn.js";
const { createTempDir } = createPluginSdkTestHarness({
cleanup: {
maxRetries: 8,
retryDelay: 8,
},
});
describe("resolveWindowsSpawnProgram", () => {
it("fails closed by default for unresolved windows wrappers", async () => {
const dir = await createTempDir("openclaw-windows-spawn-test-");
const shimPath = path.join(dir, "wrapper.cmd");
await writeFile(shimPath, "@ECHO off\r\necho wrapper\r\n", "utf8");
expect(() =>
resolveWindowsSpawnProgram({
command: shimPath,
platform: "win32",
env: { PATH: dir, PATHEXT: ".CMD;.EXE;.BAT" },
execPath: "C:\\node\\node.exe",
}),
).toThrow(/without shell execution/);
});
it("only returns shell fallback when explicitly opted in", async () => {
const dir = await createTempDir("openclaw-windows-spawn-test-");
const shimPath = path.join(dir, "wrapper.cmd");
await writeFile(shimPath, "@ECHO off\r\necho wrapper\r\n", "utf8");
const resolved = resolveWindowsSpawnProgram({
command: shimPath,
platform: "win32",
env: { PATH: dir, PATHEXT: ".CMD;.EXE;.BAT" },
execPath: "C:\\node\\node.exe",
allowShellFallback: true,
});
const invocation = materializeWindowsSpawnProgram(resolved, ["--cwd", "C:\\safe & calc.exe"]);
expect(invocation).toEqual({
command: shimPath,
argv: ["--cwd", "C:\\safe & calc.exe"],
resolution: "shell-fallback",
shell: true,
windowsHide: undefined,
});
});
});