fix(app): keep diff rows aligned for blank lines
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { buildSplitDiffRows } from "./diff-layout";
|
||||
import { buildSplitDiffRows, buildUnifiedDiffLines } from "./diff-layout";
|
||||
import type { ParsedDiffFile } from "@/hooks/use-checkout-diff-query";
|
||||
|
||||
function makeFile(lines: ParsedDiffFile["hunks"][number]["lines"]): ParsedDiffFile {
|
||||
@@ -79,3 +79,76 @@ describe("buildSplitDiffRows", () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("buildUnifiedDiffLines", () => {
|
||||
it("computes line numbers per line type within a hunk", () => {
|
||||
const lines = buildUnifiedDiffLines(
|
||||
makeFile([
|
||||
{ type: "header", content: "@@ -10,3 +10,4 @@" },
|
||||
{ type: "context", content: "before" },
|
||||
{ type: "add", content: "inserted" },
|
||||
{ type: "remove", content: "removed" },
|
||||
{ type: "context", content: "after" },
|
||||
]),
|
||||
);
|
||||
|
||||
expect(
|
||||
lines.map(({ line, lineNumber }) => ({
|
||||
type: line.type,
|
||||
lineNumber,
|
||||
content: line.content,
|
||||
})),
|
||||
).toEqual([
|
||||
{ type: "header", lineNumber: null, content: "@@ -10,3 +10,4 @@" },
|
||||
{ type: "context", lineNumber: 10, content: "before" },
|
||||
{ type: "add", lineNumber: 11, content: "inserted" },
|
||||
{ type: "remove", lineNumber: 11, content: "removed" },
|
||||
{ type: "context", lineNumber: 12, content: "after" },
|
||||
]);
|
||||
});
|
||||
|
||||
it("restarts numbering at each hunk boundary", () => {
|
||||
const file: ParsedDiffFile = {
|
||||
path: "example.ts",
|
||||
isNew: false,
|
||||
isDeleted: false,
|
||||
additions: 1,
|
||||
deletions: 0,
|
||||
status: "ok",
|
||||
hunks: [
|
||||
{
|
||||
oldStart: 75,
|
||||
oldCount: 2,
|
||||
newStart: 75,
|
||||
newCount: 3,
|
||||
lines: [
|
||||
{ type: "header", content: "@@ -75,2 +75,3 @@" },
|
||||
{ type: "context", content: "first" },
|
||||
{ type: "add", content: "inserted" },
|
||||
{ type: "context", content: "second" },
|
||||
],
|
||||
},
|
||||
{
|
||||
oldStart: 165,
|
||||
oldCount: 2,
|
||||
newStart: 166,
|
||||
newCount: 2,
|
||||
lines: [
|
||||
{ type: "header", content: "@@ -165,2 +166,2 @@" },
|
||||
{ type: "context", content: "third" },
|
||||
{ type: "context", content: "fourth" },
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const lines = buildUnifiedDiffLines(file);
|
||||
|
||||
expect(lines[0]?.lineNumber).toBeNull();
|
||||
expect(lines[1]?.lineNumber).toBe(75);
|
||||
expect(lines[3]?.lineNumber).toBe(77);
|
||||
expect(lines[4]?.lineNumber).toBeNull();
|
||||
expect(lines[5]?.lineNumber).toBe(166);
|
||||
expect(lines[6]?.lineNumber).toBe(167);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user