chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
import { test } from "node:test";
|
||||
import assert from "node:assert";
|
||||
import {
|
||||
countCognitiveViolations,
|
||||
evaluateCognitiveComplexity,
|
||||
} from "../../scripts/check/check-cognitive-complexity.mjs";
|
||||
|
||||
// The .mjs module has no .d.ts; type the exported functions locally.
|
||||
type EslintReport = Array<{ messages: Array<{ ruleId: string }> }>;
|
||||
type CogComplexityVerdict = { regressed: boolean; improved: boolean };
|
||||
|
||||
const count = countCognitiveViolations as (report: EslintReport) => number;
|
||||
const evaluate = evaluateCognitiveComplexity as (
|
||||
current: number,
|
||||
baseline: number
|
||||
) => CogComplexityVerdict;
|
||||
|
||||
// --- countCognitiveViolations tests ---
|
||||
|
||||
test("countCognitiveViolations: empty report returns 0", () => {
|
||||
assert.equal(count([]), 0);
|
||||
});
|
||||
|
||||
test("countCognitiveViolations: counts sonarjs/cognitive-complexity messages", () => {
|
||||
const report: EslintReport = [
|
||||
{
|
||||
messages: [
|
||||
{ ruleId: "sonarjs/cognitive-complexity" },
|
||||
{ ruleId: "no-unused-vars" }, // should not count
|
||||
],
|
||||
},
|
||||
{
|
||||
messages: [
|
||||
{ ruleId: "sonarjs/cognitive-complexity" },
|
||||
{ ruleId: "sonarjs/cognitive-complexity" },
|
||||
],
|
||||
},
|
||||
];
|
||||
assert.equal(count(report), 3);
|
||||
});
|
||||
|
||||
test("countCognitiveViolations: no matching rules returns 0", () => {
|
||||
const report: EslintReport = [{ messages: [{ ruleId: "no-eval" }, { ruleId: "no-console" }] }];
|
||||
assert.equal(count(report), 0);
|
||||
});
|
||||
|
||||
// --- evaluateCognitiveComplexity tests ---
|
||||
|
||||
const FROZEN = 738;
|
||||
|
||||
test("evaluateCognitiveComplexity: equal to baseline passes", () => {
|
||||
const r = evaluate(FROZEN, FROZEN);
|
||||
assert.equal(r.regressed, false);
|
||||
assert.equal(r.improved, false);
|
||||
});
|
||||
|
||||
test("evaluateCognitiveComplexity: one more violation is a regression", () => {
|
||||
const r = evaluate(FROZEN + 1, FROZEN);
|
||||
assert.equal(r.regressed, true);
|
||||
assert.equal(r.improved, false);
|
||||
});
|
||||
|
||||
test("evaluateCognitiveComplexity: fewer violations is an improvement", () => {
|
||||
const r = evaluate(FROZEN - 1, FROZEN);
|
||||
assert.equal(r.regressed, false);
|
||||
assert.equal(r.improved, true);
|
||||
});
|
||||
|
||||
test("evaluateCognitiveComplexity: zero violations is maximum improvement", () => {
|
||||
const r = evaluate(0, FROZEN);
|
||||
assert.equal(r.regressed, false);
|
||||
assert.equal(r.improved, true);
|
||||
});
|
||||
|
||||
test("evaluateCognitiveComplexity: strict integer comparison", () => {
|
||||
assert.equal(evaluate(11, 10).regressed, true);
|
||||
assert.equal(evaluate(10, 10).regressed, false);
|
||||
assert.equal(evaluate(9, 10).regressed, false);
|
||||
});
|
||||
Reference in New Issue
Block a user