70 lines · 2.0 KB · TypeScript
RawDownload
import { describe, expect, it } from "@effect/vitest"; import { formatStdioArgs, formatStdioEnv, parseStdioArgs, parseStdioEnv } from "./stdio-fields"; describe("parseStdioArgs", () => {  it("splits on whitespace", () => {    expect(parseStdioArgs("-y chrome-devtools-mcp@latest")).toEqual([      "-y",      "chrome-devtools-mcp@latest",    ]);  });   it("keeps a double-quoted group intact", () => {    expect(parseStdioArgs('--dir "/Users/a b/mcp" --port 3000')).toEqual([      "--dir",      "/Users/a b/mcp",      "--port",      "3000",    ]);  });   it("returns nothing for a blank field", () => {    expect(parseStdioArgs("   ")).toEqual([]);  });}); describe("formatStdioArgs", () => {  it("re-quotes tokens containing whitespace so the round trip is lossless", () => {    const args = ["--dir", "/Users/a b/mcp", "--port", "3000"];    expect(parseStdioArgs(formatStdioArgs(args))).toEqual(args);  });   it("renders an absent list as an empty field", () => {    expect(formatStdioArgs(undefined)).toBe("");  });}); describe("parseStdioEnv", () => {  it("reads one KEY=value per line", () => {    expect(parseStdioEnv("LOG_LEVEL=debug\nREGION=eu-west-1")).toEqual({      LOG_LEVEL: "debug",      REGION: "eu-west-1",    });  });   it("splits on the first = only, so a value may contain =", () => {    expect(parseStdioEnv("DSN=postgres://u:p@host/db?a=b")).toEqual({      DSN: "postgres://u:p@host/db?a=b",    });  });   it("keeps a declared-but-empty value", () => {    expect(parseStdioEnv("NO_COLOR=")).toEqual({ NO_COLOR: "" });  });   it("drops blank lines, comments, and lines with no key", () => {    expect(parseStdioEnv("\n# a comment\n=orphan\nA=1\n")).toEqual({ A: "1" });  });}); describe("formatStdioEnv", () => {  it("round-trips a declared map", () => {    const env = { LOG_LEVEL: "debug", DSN: "postgres://u:p@host/db?a=b" };    expect(parseStdioEnv(formatStdioEnv(env))).toEqual(env);  });   it("renders an absent map as an empty field", () => {    expect(formatStdioEnv(undefined)).toBe("");  });});