diff --git a/src/cli/program/helpers.test.ts b/src/cli/program/helpers.test.ts new file mode 100644 index 00000000000..0c475d3a613 --- /dev/null +++ b/src/cli/program/helpers.test.ts @@ -0,0 +1,41 @@ +import { Command } from "commander"; +import { describe, expect, it } from "vitest"; +import { collectOption, parsePositiveIntOrUndefined, resolveActionArgs } from "./helpers.js"; + +describe("program helpers", () => { + it("collectOption appends values in order", () => { + expect(collectOption("a")).toEqual(["a"]); + expect(collectOption("b", ["a"])).toEqual(["a", "b"]); + }); + + it.each([ + { value: undefined, expected: undefined }, + { value: null, expected: undefined }, + { value: "", expected: undefined }, + { value: 5, expected: 5 }, + { value: 5.9, expected: 5 }, + { value: 0, expected: undefined }, + { value: -1, expected: undefined }, + { value: Number.NaN, expected: undefined }, + { value: "10", expected: 10 }, + { value: "10ms", expected: 10 }, + { value: "0", expected: undefined }, + { value: "nope", expected: undefined }, + { value: true, expected: undefined }, + ])("parsePositiveIntOrUndefined(%j)", ({ value, expected }) => { + expect(parsePositiveIntOrUndefined(value)).toBe(expected); + }); + + it("resolveActionArgs returns args when command has arg array", () => { + const command = new Command(); + (command as Command & { args?: string[] }).args = ["one", "two"]; + expect(resolveActionArgs(command)).toEqual(["one", "two"]); + }); + + it("resolveActionArgs returns empty array for missing/invalid args", () => { + const command = new Command(); + (command as Command & { args?: unknown }).args = "not-an-array"; + expect(resolveActionArgs(command)).toEqual([]); + expect(resolveActionArgs(undefined)).toEqual([]); + }); +});