test.rules/codemods/analyzers/literal.analyzer.test.ts
test.rules/codemods/analyzers/literal.analyzer.test.ts is a file in Codebase Testing. 50 lines of code and 0 definitions.
import { collectLiteralFindings, literalFindingsIn } from "@ssot/govlab/codemods/analyzers/literal.analyzer.ts";
import { describe, expect, it } from "vitest";
import { mkdirSync, mkdtempSync, rmSync } from "node:fs";
import { join } from "node:path";
import { tmpdir } from "node:os";
import { writeVerbatim } from "@govlab/canonical-write";
const PAIRS = [{ from: '"ai_governance"', to: '"model_governance"' }];
const MATCHING = '{"force": ["ai_governance"]}';
describe("literalFindingsIn", () => {
it("finds every exact occurrence with its line", () => {
const content = '{\n "force": ["ai_governance"],\n "scope": ["ai_governance"]\n}';
const findings = literalFindingsIn("probe.json", content, PAIRS);
expect(findings.map((finding) => finding.line)).toEqual([2, 3]);
expect(findings.every((finding) => finding.reason === null)).toBe(true);
});
it("matches only the exact text, not a longer token that contains it", () => {
const content = '{"force": ["ai_governance_extra"]}';
expect(literalFindingsIn("probe.json", content, PAIRS)).toEqual([]);
});
it("blocks every match in a JSON file whose rewrite would not parse", () => {
const findings = literalFindingsIn("probe.json", '{"a": 1}', [{ from: "1", to: "1," }]);
expect(findings).toHaveLength(1);
expect(findings[0]?.reason).toContain("unparsable as JSON");
});
it("does not parse-check a file that is not JSON", () => {
const findings = literalFindingsIn("probe.md", "a { b", [{ from: "b", to: "}" }]);
expect(findings[0]?.reason).toBeNull();
});
});
describe("collectLiteralFindings", () => {
it("walks a root, skips every path the master exclusion list names, and keeps only the wanted extensions", () => {
const root = mkdtempSync(join(tmpdir(), "codemod-literal-"));
try {
mkdirSync(join(root, "node_modules"));
writeVerbatim(join(root, "kept.json"), MATCHING);
writeVerbatim(join(root, "kept.md"), MATCHING);
writeVerbatim(join(root, "probe.generated.json"), MATCHING);
writeVerbatim(join(root, "node_modules", "dependency.json"), MATCHING);
const everyFile = collectLiteralFindings([root], PAIRS, []);
expect(everyFile.map((finding) => finding.fileName).toSorted()).toStrictEqual([
join(root, "kept.json"),
join(root, "kept.md"),
]);
const jsonOnly = collectLiteralFindings([root], PAIRS, [".json"]);
expect(jsonOnly.map((finding) => finding.fileName)).toStrictEqual([join(root, "kept.json")]);
} finally {
rmSync(root, { force: true, recursive: true });
}
});
});