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", "safeout", "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/); }); });