# tests/core/readers/document.reader.test.ts

> 74 lines of code and 0 definitions.

Tree: Coordination tree
Language: typescript
Canonical: https://banes-lab.com/anatomy/coordination#file-coordination-tests-core-readers-document-reader-test-ts
Source text: https://banes-lab.com/assets/sources/source.51cb93590a115831d0d66accb6ae8204b57f9922867b2f2dcd2e26e0a546e484.generated.txt

## Source

````typescript
import { describe, it } from "node:test";
import { readDocument, unfencedLines } from "../../../tools/core/readers/document.reader.ts";
import assert from "node:assert/strict";

const SOURCE = [
    "---",
    "name: sample",
    "---",
    "# Title",
    "",
    "- item with `code.ts`",
    "1. ordered",
    "| a | b |",
    "owner: tools/a",
    "```ts",
    "see: `inside.ts`",
    "```",
    "plain [link](docs/a.md)",
    "---",
].join("\n");

describe("unfencedLines", () => {
    it("drops fence lines and everything between them, keeping line numbers", () => {
        assert.deepEqual(unfencedLines("a\n```\nb\n```\nc"), [
            { number: 1, text: "a" },
            { number: 5, text: "c" },
        ]);
    });
});

describe("readDocument", () => {
    it("classifies every line and reads fields, headings and inlines outside fences", () => {
        const document = readDocument("doc.md", SOURCE);
        assert.deepEqual(
            document.segments.map((segment) => segment.kind),
            [
                "frontmatter-open",
                "frontmatter-field",
                "frontmatter-close",
                "heading",
                "blank",
                "list-item",
                "list-item",
                "table-row",
                "field",
                "fence-open",
                "fence-body",
                "fence-close",
                "text",
                "text",
            ],
        );
        assert.deepEqual(
            document.segments.flatMap((segment) => segment.inlines.map((inline) => inline.value)),
            ["code.ts", "docs/a.md"],
        );
        assert.deepEqual(
            document.segments
                .filter((segment) => segment.key !== undefined)
                .map((segment) => [segment.key, segment.value ?? ""]),
            [
                ["name", "sample"],
                ["Title", ""],
                ["owner", "tools/a"],
            ],
        );
    });

    it("keeps each segment's offsets on the source", () => {
        assert.deepEqual(
            readDocument("doc.md", "ab  \ncd").segments.map((segment) => [segment.start, segment.end]),
            [
                [0, 2],
                [5, 7],
            ],
        );
    });
});
````
