diff --git a/scripts/__tests__/coverage-script-help.test.mjs b/scripts/__tests__/coverage-script-help.test.mjs new file mode 100644 index 000000000..09cb64dc9 --- /dev/null +++ b/scripts/__tests__/coverage-script-help.test.mjs @@ -0,0 +1,41 @@ +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { test } from 'node:test'; + +const HERE = dirname(fileURLToPath(import.meta.url)); +const SCRIPTS = resolve(HERE, '..'); + +function run(scriptName, args) { + return spawnSync(process.execPath, [resolve(SCRIPTS, scriptName), ...args], { + encoding: 'utf8', + }); +} + +test('coverage helper scripts print help without running checks', () => { + for (const [scriptName, usage] of [ + ['check-coverage-matrix.mjs', 'Usage: node scripts/check-coverage-matrix.mjs'], + ['check-domain-e2e-coverage.mjs', 'Usage: node scripts/check-domain-e2e-coverage.mjs'], + ]) { + for (const helpFlag of ['--help', '-h']) { + const result = run(scriptName, [helpFlag]); + + assert.equal(result.status, 0, result.stderr); + assert.equal(result.stdout.trim(), usage); + assert.equal(result.stderr, ''); + } + } +}); + +test('coverage helper scripts reject unknown arguments', () => { + for (const [scriptName, error] of [ + ['check-coverage-matrix.mjs', /check-coverage-matrix: unknown argument: --bogus/], + ['check-domain-e2e-coverage.mjs', /check-domain-e2e-coverage: unknown argument: --bogus/], + ]) { + const result = run(scriptName, ['--bogus']); + + assert.equal(result.status, 2, result.stdout); + assert.match(result.stderr, error); + } +}); diff --git a/scripts/check-coverage-matrix.mjs b/scripts/check-coverage-matrix.mjs index 88b6c079d..6670bc748 100644 --- a/scripts/check-coverage-matrix.mjs +++ b/scripts/check-coverage-matrix.mjs @@ -7,6 +7,20 @@ import { parseMatrix, validateAgainstCatalog } from './lib/coverage-matrix-parse const here = dirname(fileURLToPath(import.meta.url)); const repoRoot = join(here, '..'); +function usage() { + return 'Usage: node scripts/check-coverage-matrix.mjs'; +} + +for (const arg of process.argv.slice(2)) { + if (arg === '--help' || arg === '-h') { + console.log(usage()); + process.exit(0); + } + console.error(`check-coverage-matrix: unknown argument: ${arg}`); + console.error(usage()); + process.exit(2); +} + let matrixMd; let catalog; try { diff --git a/scripts/check-domain-e2e-coverage.mjs b/scripts/check-domain-e2e-coverage.mjs index 69ce83098..29d3dd837 100644 --- a/scripts/check-domain-e2e-coverage.mjs +++ b/scripts/check-domain-e2e-coverage.mjs @@ -3,6 +3,21 @@ import fs from 'node:fs'; import path from 'node:path'; const ROOT = process.cwd(); + +function usage() { + return 'Usage: node scripts/check-domain-e2e-coverage.mjs'; +} + +for (const arg of process.argv.slice(2)) { + if (arg === '--help' || arg === '-h') { + console.log(usage()); + process.exit(0); + } + console.error(`check-domain-e2e-coverage: unknown argument: ${arg}`); + console.error(usage()); + process.exit(2); +} + const rawThreshold = process.env.DOMAIN_E2E_COVERAGE_THRESHOLD ?? '90'; const THRESHOLD = Number(rawThreshold); if (!Number.isFinite(THRESHOLD) || THRESHOLD < 0 || THRESHOLD > 100) {