43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { parseCmdScriptCommandLine, quoteCmdScriptArg } from "./cmd-argv.js";
|
|
|
|
describe("cmd argv helpers", () => {
|
|
it.each([
|
|
"plain",
|
|
"with space",
|
|
"safe&whoami",
|
|
"safe|whoami",
|
|
"safe<in",
|
|
"safe>out",
|
|
"safe^caret",
|
|
"%TEMP%",
|
|
"!token!",
|
|
'he said "hi"',
|
|
])("round-trips single arg: %p", (arg) => {
|
|
const encoded = quoteCmdScriptArg(arg);
|
|
expect(parseCmdScriptCommandLine(encoded)).toEqual([arg]);
|
|
});
|
|
|
|
it("round-trips mixed command lines", () => {
|
|
const args = [
|
|
"node",
|
|
"gateway.js",
|
|
"--display-name",
|
|
"safe&whoami",
|
|
"--percent",
|
|
"%TEMP%",
|
|
"--bang",
|
|
"!token!",
|
|
"--quoted",
|
|
'he said "hi"',
|
|
];
|
|
const encoded = args.map(quoteCmdScriptArg).join(" ");
|
|
expect(parseCmdScriptCommandLine(encoded)).toEqual(args);
|
|
});
|
|
|
|
it("rejects CR/LF in command arguments", () => {
|
|
expect(() => quoteCmdScriptArg("bad\narg")).toThrow(/Command argument cannot contain CR or LF/);
|
|
expect(() => quoteCmdScriptArg("bad\rarg")).toThrow(/Command argument cannot contain CR or LF/);
|
|
});
|
|
});
|