test.govlab/quality/core/parsers/tool.perlcritic.parser.test.ts
test.govlab/quality/core/parsers/tool.perlcritic.parser.test.ts is a file in Codebase Testing. 44 lines of code and 0 definitions.
import { describe, expect, it } from "vitest";
import { parsePerlcriticOutput } from "@govlab/quality/core/parsers/tool.perlcritic.parser.ts";
const EXPECTED_COUNT = 2;
const DELIM = "~|~";
const RECORDED = [
[
"govlab-governance/polyglot/perl/Bad.pm",
"5",
"1",
"3",
"Subroutines::ProhibitManyArgs",
"Too many arguments",
].join(DELIM),
["x.pm", "9", "5", "4", "BuiltinFunctions::ProhibitStringyEval", `String "a~|~b" in eval`].join(DELIM),
"",
].join("\n");
describe("parsePerlcriticOutput", () => {
it("maps each delimited record to a gating (advisory:false) finding keyed by policy, message tail re-joined", () => {
const findings = parsePerlcriticOutput(RECORDED, "perl");
expect(findings).toHaveLength(EXPECTED_COUNT);
expect(findings[0]).toMatchObject({
advisory: false,
column: 1,
ecosystem: "perl",
file: "govlab-governance/polyglot/perl/Bad.pm",
line: 5,
message: "Too many arguments",
ruleId: "Subroutines::ProhibitManyArgs",
severity: "error",
tool: "perlcritic",
});
expect(findings[1]).toMatchObject({
advisory: false,
line: 9,
message: 'String "a~|~b" in eval',
ruleId: "BuiltinFunctions::ProhibitStringyEval",
});
});
it("returns [] on empty output or lines with too few fields", () => {
expect(parsePerlcriticOutput("", "perl")).toEqual([]);
expect(parsePerlcriticOutput("some non-delimited banner line", "perl")).toEqual([]);
expect(parsePerlcriticOutput("a~|~b~|~c", "perl")).toEqual([]);
});
});