Files
openclaw/test/scripts/run-with-env.test.ts
2026-05-30 13:00:32 +02:00

82 lines
2.1 KiB
TypeScript

import { spawnSync } from "node:child_process";
import { describe, expect, it } from "vitest";
import {
isRunWithEnvHelpRequest,
parseRunWithEnvArgs,
resolveSpawnCommand,
} from "../../scripts/run-with-env.mjs";
describe("run-with-env", () => {
it("parses leading env assignments before the command separator", () => {
expect(
parseRunWithEnvArgs([
"OPENCLAW_GATEWAY_PROJECT_SHARDS=1",
"EMPTY=",
"--",
"node",
"scripts/run-vitest.mjs",
"run",
]),
).toEqual({
env: {
OPENCLAW_GATEWAY_PROJECT_SHARDS: "1",
EMPTY: "",
},
command: "node",
args: ["scripts/run-vitest.mjs", "run"],
});
});
it("rejects missing command separators", () => {
expect(() => parseRunWithEnvArgs(["OPENCLAW_GATEWAY_PROJECT_SHARDS=1", "node"])).toThrow(
/Usage:/u,
);
});
it("prints wrapper help without spawning a command", () => {
const result = spawnSync(process.execPath, ["scripts/run-with-env.mjs", "--help"], {
cwd: process.cwd(),
encoding: "utf8",
});
expect(result.status).toBe(0);
expect(result.stdout).toContain("Usage: node scripts/run-with-env.mjs");
expect(result.stderr).toBe("");
});
it("keeps command help passthrough after the separator", () => {
expect(
isRunWithEnvHelpRequest(["OPENCLAW_GATEWAY_PROJECT_SHARDS=1", "--", "node", "--help"]),
).toBe(false);
});
it("rejects malformed assignments before spawning", () => {
const result = spawnSync(
process.execPath,
[
"scripts/run-with-env.mjs",
"1INVALID=value",
"--",
"node",
"-e",
"process.stdout.write('spawned')",
],
{
cwd: process.cwd(),
encoding: "utf8",
},
);
expect(result.status).toBe(2);
expect(result.stdout).toBe("");
expect(result.stderr).toContain("invalid environment assignment");
});
it("uses the current Node executable for node commands", () => {
expect(resolveSpawnCommand("node", ["scripts/run-vitest.mjs"], "node.exe")).toEqual({
command: "node.exe",
args: ["scripts/run-vitest.mjs"],
});
});
});