testMergeLinesMarksConflicts
tcmts.cli.merge.testMergeLinesMarksConflicts · #4t4s47zs · term
import { conflictMarkers, mergeLines } from "#codebase/tcmts/cli/merge";
import assert from "node:assert/strict";
export const testMergeLinesMarksConflicts = () => {
const base = ["a", "b", "c", "d"];
const clean = mergeLines(base, ["a", "B", "c", "d"], ["a", "b", "c", "D"]);
assert.deepEqual(clean.lines, ["a", "B", "c", "D"]);
assert.equal(clean.conflicts, 0);
assert.deepEqual(clean.stretches, [
{ by: "ours", at: 1, lines: 1 },
{ by: "theirs", at: 3, lines: 1 },
]);
assert.deepEqual(clean.changed, {
ours: { added: 1, removed: 1 },
theirs: { added: 1, removed: 1 },
});
const r = mergeLines(base, ["a", "b1", "c", "d"], ["a", "b2", "c", "D"], {
ours: "ours (session/x)",
base: "base",
theirs: "theirs (main)",
});
assert.equal(r.conflicts, 1);
assert.deepEqual(r.lines, [
"a",
"<<<<<<< ours (session/x)",
"b1",
"||||||| base",
"b",
"=======",
"b2",
">>>>>>> theirs (main)",
"c",
"D",
]);
assert.deepEqual(r.stretches, [
{ by: "both", at: 1, lines: 7, conflict: true },
{ by: "theirs", at: 9, lines: 1 },
]);
assert.deepEqual(
mergeLines(base, ["a", "B", "c", "d"], ["a", "B", "c", "d"]).stretches,
[{ by: "both", at: 1, lines: 1 }],
"both changing it alike isn't a conflict",
);
assert.equal(conflictMarkers(r.lines.join("\n")), 2);
assert.equal(
conflictMarkers("a\n=======\nb"),
undefined,
"a Markdown heading's underline isn't one",
);
}
uses