# test.build/core/converters/surface.converter.test.ts

> 79 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-build-core-converters-surface-converter-test-ts
Source text: https://banes-lab.com/source/testing/test.build/core/converters/surface.converter.test.ts.txt

Listed in [test.build/core/converters](https://banes-lab.com/api/source/testing/test.build/core/converters.md), after [test.build/core/converters/style.converter.test.ts](https://banes-lab.com/source/testing/test.build/core/converters/style.converter.test.ts.md) and before [test.build/core/converters/tab.converter.test.ts](https://banes-lab.com/source/testing/test.build/core/converters/tab.converter.test.ts.md).

## Contained in

- [test.build/core/converters](https://banes-lab.com/anatomy/testing/folder-testing-test-build-core-converters.md)

## Source

```typescript
import {
    CODE_FENCE,
    RECORD_CLOSE,
    RECORD_OPEN,
    ROSTER_LINES,
    SECTION_BANNER,
} from "@banes-lab/build-scripts/configuration/constants/surface.constants.ts";
import {
    appendLine,
    changedRegion,
    commandLine,
    markedLines,
    recordingsOf,
    venueView,
} from "@banes-lab/build-scripts/core/converters/surface.converter.ts";
import { describe, expect, it } from "vitest";
import type { FigureFrame } from "@banes-lab/build-scripts/types/surface.types.ts";

const ROSTER = `${ROSTER_LINES[0] ?? ""} B`;

const frameOf = function frameOf(command: string): FigureFrame["frame"] {
    return { command, lines: [], output: "", surface: "" };
};
const OPEN_A = `${RECORD_OPEN}A`;
const CLOSE_A = `${RECORD_CLOSE}A`;
const TAIL = `${SECTION_BANNER} POSITIONS`;

describe("changedRegion", () => {
    it("names the lines that differ between the prefix and suffix both versions share", () => {
        expect(changedRegion(["a", "b", "c"], ["a", "x", "y", "c"])).toStrictEqual({ from: 1, to: 3 });
        expect(changedRegion(["a", "b"], ["a"])).toStrictEqual({ from: 1, to: 1 });
        expect(changedRegion(["a"], ["a"])).toBeNull();
    });
});

describe("venueView", () => {
    it("keeps the roster lines, the unfenced records and everything from the last section banner on", () => {
        const lines = [
            "# Venue",
            "intro prose",
            ROSTER,
            CODE_FENCE,
            ROSTER,
            `${RECORD_OPEN}SPECIMEN`,
            CODE_FENCE,
            OPEN_A,
            "  status: working",
            CLOSE_A,
            "",
            "prose between",
            `${SECTION_BANNER} OLD`,
            "old entry",
            TAIL,
            "entry one",
        ];
        expect(venueView(lines)).toStrictEqual([ROSTER, OPEN_A, "  status: working", CLOSE_A, "", TAIL, "entry one"]);
    });
});

describe("markedLines and commandLine", () => {
    it("marks the lines inside the region, and quotes an argument that holds a space", () => {
        expect(markedLines(["a", "b", "c"], { from: 1, to: 2 }).map((line) => line.changed)).toStrictEqual([
            false,
            true,
            false,
        ]);
        expect(markedLines(["a"], null)).toStrictEqual([{ changed: false, text: "a" }]);
        expect(commandLine("await", ["--post", "two words"])).toBe('npm run await -- --post "two words"');
        expect(appendLine("a note", "venue.md")).toBe('echo "a note" >> venue.md');
    });
});

describe("recordingsOf", () => {
    it("groups the frames by figure in order, opening each on the view before its first frame", () => {
        const frames: FigureFrame[] = [
            { before: ["first"], figure: "venue", frame: frameOf("one") },
            { before: ["other"], figure: "wait", frame: frameOf("two") },
            { before: ["later"], figure: "venue", frame: frameOf("three") },
        ];
        const recordings = recordingsOf(frames, "digest");
        expect(recordings.get("venue")?.frames.map((entry) => entry.command)).toStrictEqual(["one", "three"]);
        expect(recordings.get("venue")?.opening).toStrictEqual(["first"]);
        expect(recordings.get("wait")?.inputs).toBe("digest");
    });
});
```
