test.coordination/core/analyzers/binding.analyzer.test.ts

test.coordination/core/analyzers/binding.analyzer.test.ts is a file in Codebase Testing. 40 lines of code and 0 definitions.

import { describe, it } from "vitest";
import {
    enumeratesVocabulary,
    slotStates,
    slotsIn,
} from "coordination-surface/tools/core/analyzers/binding.analyzer.ts";
import { RESOLUTION_STATES } from "coordination-surface/tools/core/constants/binding.constants.ts";
import assert from "node:assert/strict";

describe("slotsIn", () => {
    it("finds each slot with its line, and skips empty braces and braces holding other characters", () => {
        const source =
            "uses {project.root} and {convention.mode}\n{}\n{not a slot}\n{execution_command}\n{{nested}} {open{inner}";
        assert.deepEqual(slotsIn(source), [
            { line: 1, name: "{project.root}" },
            { line: 1, name: "{convention.mode}" },
            { line: 4, name: "{execution_command}" },
            { line: 5, name: "{nested}" },
            { line: 5, name: "{inner}" },
        ]);
    });
});

describe("slotStates", () => {
    it("binds each slot to the earliest resolution word on its line and keeps the first binding", () => {
        const source =
            "{project.root} RESOLVED, not ABSENT\n{limits.max} DEFERRED\n{project.root} ABSENT\nno word {plain}";
        const states = slotStates(source);
        assert.equal(states.get("{project.root}"), "RESOLVED");
        assert.equal(states.get("{limits.max}"), "DEFERRED");
        assert.equal(states.has("{plain}"), false);
    });

    it("declares exactly the three resolution states a slot can hold", () => {
        assert.deepEqual([...RESOLUTION_STATES], ["RESOLVED", "ABSENT", "DEFERRED"]);
    });
});

describe("enumeratesVocabulary", () => {
    it("recognizes a line that enumerates a vocabulary through a wildcard slot", () => {
        assert.equal(enumeratesVocabulary("{convention.*}"), true);
        assert.equal(enumeratesVocabulary("{convention.mode}"), false);
    });
});