56 lines
2.7 KiB
TypeScript
56 lines
2.7 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { mkdir, mkdtemp, writeFile } from "node:fs/promises";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import test from "node:test";
|
|
|
|
import { auditCaseRunSources, renderCaseRunAuditText } from "../src/hwlab-caserun-audit.ts";
|
|
|
|
test("CaseRun static audit passes clean source modules", async () => {
|
|
const root = await mkdtemp(path.join(os.tmpdir(), "caserun-audit-clean-"));
|
|
const sourceDir = path.join(root, "tools", "src");
|
|
await mkdir(sourceDir, { recursive: true });
|
|
await writeFile(path.join(sourceDir, "hwlab-caserun-clean.ts"), "export const value: string = 'ok';\n", "utf8");
|
|
|
|
const report = await auditCaseRunSources({ root });
|
|
assert.equal(report.ok, true, renderCaseRunAuditText(report));
|
|
assert.equal(report.status, "passed");
|
|
assert.equal(report.findingCount, 0);
|
|
});
|
|
|
|
test("CaseRun static audit returns typed findings for representative source defects", async () => {
|
|
const root = await mkdtemp(path.join(os.tmpdir(), "caserun-audit-"));
|
|
const sourceDir = path.join(root, "tools", "src");
|
|
await mkdir(sourceDir, { recursive: true });
|
|
await writeFile(path.join(sourceDir, "hwlab-caserun-runtime.ts"), [
|
|
"import { helper } from './hwlab-caserun-helper.ts';",
|
|
"const first = 1; const second = 2;",
|
|
"export type MissingAlias = MissingCaseRunType;",
|
|
"export const incompatibleValue: string = first;",
|
|
"export const missingProperty = ({ value: first }).missing;",
|
|
"export const runtimeValue = helper(first + second);",
|
|
].join("\n"), "utf8");
|
|
await writeFile(path.join(sourceDir, "hwlab-caserun-helper.ts"), [
|
|
"import { runtimeValue } from './hwlab-caserun-runtime.ts';",
|
|
"function duplicate(value: string) { return String(value).trim(); }",
|
|
"export function helper(value: number) { return duplicate(runtimeValue + value); }",
|
|
].join("\n"), "utf8");
|
|
await writeFile(path.join(sourceDir, "hwlab-caserun-other.ts"), [
|
|
"function duplicate(value: string) { return String(value).trim(); }",
|
|
...Array.from({ length: 20 }, (_, index) => `export const line${index} = ${index};`),
|
|
].join("\n"), "utf8");
|
|
|
|
const report = await auditCaseRunSources({ root, maxLines: 10 });
|
|
const codes = new Set(report.findings.map((finding) => finding.code));
|
|
assert.equal(report.ok, false);
|
|
assert.equal(report.status, "failed");
|
|
assert.ok(codes.has("caserun_type_ts2304"));
|
|
assert.ok(codes.has("caserun_type_ts2322"));
|
|
assert.ok(codes.has("caserun_type_ts2339"));
|
|
assert.ok(codes.has("caserun_runtime_reverse_dependency"));
|
|
assert.ok(codes.has("caserun_dependency_cycle"));
|
|
assert.ok(codes.has("caserun_duplicate_pure_helper"));
|
|
assert.ok(codes.has("caserun_compressed_top_level_declaration"));
|
|
assert.ok(codes.has("caserun_source_line_limit_exceeded"));
|
|
});
|