# test.coordination/core/transformers/segment.transformer.test.ts

> 40 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-coordination-core-transformers-segment-transformer-test-ts
Source text: https://banes-lab.com/source/testing/test.coordination/core/transformers/segment.transformer.test.ts.txt

Listed in [test.coordination/core/transformers](https://banes-lab.com/api/source/testing/test.coordination/core/transformers.md), after [test.coordination/core/transformers/scope.transformer.test.ts](https://banes-lab.com/source/testing/test.coordination/core/transformers/scope.transformer.test.ts.md) and before [test.coordination/core/transformers/venue.transformer.test.ts](https://banes-lab.com/source/testing/test.coordination/core/transformers/venue.transformer.test.ts.md).

## Contained in

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

## Source

```typescript
import {
    applyEdits,
    editsFromFieldPrefixes,
    editsFromFieldValues,
    editsFromInlinePrefixes,
    editsFromInlines,
} from "coordination-surface/tools/core/transformers/segment.transformer.ts";
import { describe, it } from "vitest";
import assert from "node:assert/strict";
import { readDocument } from "coordination-surface/tools/core/readers/document.reader.ts";

type Edit = Parameters<typeof applyEdits>[1][number];

const edit = function edit(start: number, end: number, replacement: string): Edit {
    return { end, path: "doc.md", reason: "", replacement, start };
};

const SOURCE = "see: old.md\nsee: old.md#part\nuse `old.md` and [x](old.md#a)\n";
const MAP = { "old.md": "new.md" };
const DOCUMENT = readDocument("doc.md", SOURCE);

describe("the edit builders", () => {
    it("rename a field value and an inline that equal an old name, and the prefix of one that continues it", () => {
        const values = editsFromFieldValues(DOCUMENT, "see", MAP);
        const prefixes = editsFromFieldPrefixes(DOCUMENT, ["see"], MAP);
        const inlines = editsFromInlines(DOCUMENT, MAP, ["inline-code", "link-target"]);
        const inlinePrefixes = editsFromInlinePrefixes(DOCUMENT, MAP, ["link-target"]);
        assert.deepEqual(
            [values, prefixes, inlines, inlinePrefixes].map((edits) => edits.length),
            [1, 1, 1, 1],
        );
        const { rejected, text } = applyEdits(SOURCE, [...values, ...prefixes, ...inlines, ...inlinePrefixes]);
        assert.deepEqual(rejected, []);
        assert.equal(text, "see: new.md\nsee: new.md#part\nuse `new.md` and [x](new.md#a)\n");
    });
});

describe("applyEdits", () => {
    it("applies edits from the end backwards, and rejects an overlapping or malformed one", () => {
        const result = applyEdits("abcdef", [edit(0, 2, "X"), edit(1, 3, "Y"), edit(4, 9, "Z")]);
        assert.equal(result.text, "aYdef");
        assert.equal(result.applied.length, 1);
        assert.equal(result.rejected.length, 2);
    });
});
```
