diff --git a/scripts/android-release-signing.mjs b/scripts/android-release-signing.mjs index 6624896bbe8..044e1bf030d 100644 --- a/scripts/android-release-signing.mjs +++ b/scripts/android-release-signing.mjs @@ -83,7 +83,7 @@ function parseArgs(argv) { function readOptionValue(argv, index, option) { const value = argv[index + 1] ?? ""; - if (!value || value.startsWith("--")) { + if (!value || value.startsWith("-")) { throw new Error(`Missing value for ${option}.`); } return value; diff --git a/scripts/check-docs-mdx.mjs b/scripts/check-docs-mdx.mjs index a4817113789..42d87da28fb 100644 --- a/scripts/check-docs-mdx.mjs +++ b/scripts/check-docs-mdx.mjs @@ -94,7 +94,7 @@ function parsePositiveIntegerArg(raw, label) { function readRequiredValue(argv, index, label) { const value = argv[index + 1]; - if (!value || value.startsWith("--")) { + if (!value || value.startsWith("-")) { throw new Error(`${label} requires a value`); } return value; @@ -116,7 +116,10 @@ export function parseArgs(argv) { continue; } if (part === "--max-errors") { - maxErrors = parsePositiveIntegerArg(argv[index + 1], "--max-errors"); + maxErrors = parsePositiveIntegerArg( + readRequiredValue(argv, index, "--max-errors"), + "--max-errors", + ); index += 1; continue; } diff --git a/scripts/ios-release-signing.mjs b/scripts/ios-release-signing.mjs index 0f9d8bc7864..42f980e7bf7 100755 --- a/scripts/ios-release-signing.mjs +++ b/scripts/ios-release-signing.mjs @@ -59,7 +59,7 @@ function parseArgs(argv) { function readOptionValue(argv, index, option) { const value = argv[index + 1] ?? ""; - if (!value || value.startsWith("--")) { + if (!value || value.startsWith("-")) { throw new Error(`Missing value for ${option}.`); } return value; diff --git a/test/scripts/android-release-signing.test.ts b/test/scripts/android-release-signing.test.ts index c7fa24dc9ff..2109a541a52 100644 --- a/test/scripts/android-release-signing.test.ts +++ b/test/scripts/android-release-signing.test.ts @@ -30,12 +30,19 @@ function runNode(args: string[], env: NodeJS.ProcessEnv = {}) { const e = error as { stdout?: unknown; stderr?: unknown }; return { ok: false, - stdout: Buffer.isBuffer(e.stdout) ? e.stdout.toString("utf8") : String(e.stdout ?? ""), - stderr: Buffer.isBuffer(e.stderr) ? e.stderr.toString("utf8") : String(e.stderr ?? ""), + stdout: formatProcessOutput(e.stdout), + stderr: formatProcessOutput(e.stderr), }; } } +function formatProcessOutput(value: unknown): string { + if (Buffer.isBuffer(value)) { + return value.toString("utf8"); + } + return typeof value === "string" ? value : ""; +} + function runGit(args: string[], cwd?: string, env: NodeJS.ProcessEnv = {}) { execFileSync("git", args, { cwd, @@ -127,11 +134,17 @@ describe("scripts/android-release-signing.mjs", () => { it.each([ ["--mode"], ["--mode", "--manifest"], + ["--mode", "-h"], ["--manifest"], + ["--manifest", "-h"], ["--workspace", "--mode"], + ["--workspace", "-h"], ["--materialized-dir", "--mode"], + ["--materialized-dir", "-h"], ["--keystore", "--mode"], + ["--keystore", "-h"], ["--properties", "--mode"], + ["--properties", "-h"], ])("rejects missing values for %s before release signing work", (...args) => { const result = runNode(args); diff --git a/test/scripts/check-docs-mdx.test.ts b/test/scripts/check-docs-mdx.test.ts index 12572122f15..602296fc765 100644 --- a/test/scripts/check-docs-mdx.test.ts +++ b/test/scripts/check-docs-mdx.test.ts @@ -20,11 +20,13 @@ describe("scripts/check-docs-mdx", () => { expect(() => parseArgs(["--max-errors", "0"])).toThrow( "--max-errors must be a positive integer", ); - expect(() => parseArgs(["--max-errors"])).toThrow("--max-errors must be a positive integer"); + expect(() => parseArgs(["--max-errors"])).toThrow("--max-errors requires a value"); + expect(() => parseArgs(["--max-errors", "-h"])).toThrow("--max-errors requires a value"); }); it("rejects missing JSON report output paths", () => { expect(() => parseArgs(["--json-out"])).toThrow("--json-out requires a value"); + expect(() => parseArgs(["--json-out", "-h"])).toThrow("--json-out requires a value"); expect(() => parseArgs(["--json-out", "--max-errors", "3"])).toThrow( "--json-out requires a value", ); diff --git a/test/scripts/ios-release-signing.test.ts b/test/scripts/ios-release-signing.test.ts index aaa0e436ea6..11762a32b3f 100644 --- a/test/scripts/ios-release-signing.test.ts +++ b/test/scripts/ios-release-signing.test.ts @@ -16,12 +16,19 @@ function runSigningResult(args: string[]): { ok: boolean; stdout: string; stderr const e = error as { stdout?: unknown; stderr?: unknown }; return { ok: false, - stdout: Buffer.isBuffer(e.stdout) ? e.stdout.toString("utf8") : String(e.stdout ?? ""), - stderr: Buffer.isBuffer(e.stderr) ? e.stderr.toString("utf8") : String(e.stderr ?? ""), + stdout: formatProcessOutput(e.stdout), + stderr: formatProcessOutput(e.stderr), }; } } +function formatProcessOutput(value: unknown): string { + if (Buffer.isBuffer(value)) { + return value.toString("utf8"); + } + return typeof value === "string" ? value : ""; +} + function runSigning(mode: string): string { return execFileSync(process.execPath, [SCRIPT, "--mode", mode], { encoding: "utf8", @@ -33,7 +40,9 @@ describe("scripts/ios-release-signing.mjs", () => { it.each([ ["--mode"], ["--mode", "--manifest"], + ["--mode", "-h"], ["--manifest"], + ["--manifest", "-h"], ])("rejects missing values for %s before reading signing manifests", (...args) => { const result = runSigningResult(args);