fix(maestro): align structured diff hunks
This commit is contained in:
@@ -78,6 +78,25 @@ describe("computeDiffLines", () => {
|
||||
]);
|
||||
});
|
||||
|
||||
it("marks an unchanged unterminated final context line", () => {
|
||||
expect(texts(computeDiffLines("a\nb\nc", "a\nX\nc"))).toEqual([
|
||||
["ctx", "a"],
|
||||
["del", "b"],
|
||||
["add", "X"],
|
||||
["ctx", "c"],
|
||||
["eof", "\\ No newline at end of file"],
|
||||
]);
|
||||
});
|
||||
|
||||
it("marks an unterminated new file only once", () => {
|
||||
const lines = computeDiffLines(null, "a");
|
||||
expect(texts(lines)).toEqual([
|
||||
["add", "a"],
|
||||
["eof", "\\ No newline at end of file"],
|
||||
]);
|
||||
expect(lines.filter((line) => line.kind === "eof")).toHaveLength(1);
|
||||
});
|
||||
|
||||
it("collapses a long unchanged interior run, keeping 3 lines of context each side", () => {
|
||||
const common = Array.from({ length: 20 }, (_, i) => `line${i}`);
|
||||
const oldText = [...common.slice(0, 10), "OLD", ...common.slice(10)].join("\n");
|
||||
@@ -111,9 +130,10 @@ describe("computeDiffLines", () => {
|
||||
["ctx", "lead0"],
|
||||
["ctx", "lead1"],
|
||||
]);
|
||||
expect(texts(lines).slice(-2)).toEqual([
|
||||
expect(texts(lines).slice(-3)).toEqual([
|
||||
["ctx", "trail0"],
|
||||
["ctx", "trail1"],
|
||||
["eof", "\\ No newline at end of file"],
|
||||
]);
|
||||
});
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ function hunk(ops: Op[]): DiffLine[] {
|
||||
const out: DiffLine[] = [];
|
||||
const push = (op: Op) => {
|
||||
out.push({ kind: op.kind, text: op.line.text });
|
||||
if (op.kind !== "ctx" && !op.line.terminated) {
|
||||
if (!op.line.terminated) {
|
||||
out.push({ kind: "eof", text: "\\ No newline at end of file" });
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user