test.govlab/context/core/analyzers/template.analyzer.test.ts
test.govlab/context/core/analyzers/template.analyzer.test.ts is a file in Codebase Testing. 82 lines of code and 0 definitions.
import { templateRefsOf, unresolvedTemplateRefsOf } from "@govlab/context/core/analyzers/template.analyzer.ts";
import assert from "node:assert/strict";
import { test } from "vitest";
const TEMPLATE = [
"# node layer axis mathType yields",
"# ---------- ----------- -------------- -------------------- ------------------",
"# orient epistemic ontology set-theory baseline",
"# commit evaluative representation information-theory registry regen",
"# verify evaluative verification logic + probability proof",
"",
'SET substrate_cycle = ["existence", "difference"]',
"SET genesis_grammar = [",
' {stage: "existence", mathType: "set-theory", yields: "set"},',
"]",
"SET ontological_dimensions = [",
' {id: "behavior", asks: "what does it do?", mathType: "dynamical-systems"},',
"]",
"SET analytical_lenses = [",
' {id: "structure", asks: "how is it arranged?", mathType: "algebra"},',
"]",
"SET teleology_nodes = [",
' {id: "tel-priority", asks: "worth it?", yields: "boolean"},',
"]",
"SET relevant_docs = [",
' {id: "readme", path: "{project.root}/README.md"},',
"]",
"# NODE 1 — ORIENT [epistemic · ontology · set-theory · yields: baseline]",
' {id: "{slot}", mathType: "<chosen>"}',
].join("\n");
const MEMBERS: ReadonlyMap<string, ReadonlySet<string>> = new Map([
["axis", new Set(["ontology", "representation", "verification"])],
["dimension", new Set(["behavior"])],
["layer", new Set(["epistemic", "evaluative"])],
["lens", new Set(["structure"])],
[
"math-type",
new Set(["set-theory", "information-theory", "logic", "probability", "dynamical-systems", "algebra"]),
],
["node", new Set(["tel-priority"])],
["substrate-node", new Set(["existence", "difference"])],
]);
const keysOf = (text: string): string[] =>
templateRefsOf(text).map((ref) => `${ref.kind}:${ref.id}@${String(ref.line)}`);
test("templateRefsOf reads every reference form a template uses, and skips placeholders and local arrays", () => {
assert.deepEqual(keysOf(TEMPLATE), [
"layer:epistemic@3",
"axis:ontology@3",
"math-type:set-theory@3",
"layer:evaluative@4",
"axis:representation@4",
"math-type:information-theory@4",
"layer:evaluative@5",
"axis:verification@5",
"math-type:logic@5",
"math-type:probability@5",
"substrate-node:existence@7",
"substrate-node:difference@7",
"substrate-node:existence@9",
"math-type:set-theory@9",
"dimension:behavior@12",
"math-type:dynamical-systems@12",
"lens:structure@15",
"math-type:algebra@15",
"node:tel-priority@18",
"layer:epistemic@23",
"axis:ontology@23",
"math-type:set-theory@23",
]);
});
test("unresolvedTemplateRefsOf passes a template whose ids all resolve", () => {
assert.deepEqual(unresolvedTemplateRefsOf(TEMPLATE, MEMBERS), []);
});
test("unresolvedTemplateRefsOf reports a renamed id with its line and kind", () => {
const stale = TEMPLATE.replace('{id: "structure"', '{id: "structural"').replace(
'mathType: "dynamical-systems"',
'mathType: "dynamical"',
);
assert.deepEqual(unresolvedTemplateRefsOf(stale, MEMBERS), [
{ id: "dynamical", kind: "math-type", line: 12 },
{ id: "structural", kind: "lens", line: 15 },
]);
});