Native surfaces migration — evolve the extension onto VS Code's native review surfaces (9-task plan, spec v0.2.1) (#72)
This commit was merged in pull request #72.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { describe, it, test, expect } from "vitest";
|
||||
import MarkdownIt from "markdown-it";
|
||||
import { splitBlocks, splitBlocksWithRanges, diffBlocks, diffToHunks, diffToBlockHunks, renderTrackChanges, colorByAuthor, authorAt, wordDiffByAuthor, type AuthorSpan } from "../src/trackChangesModel";
|
||||
import { splitBlocks, splitBlocksWithRanges, diffBlocks, diffToHunks, diffToBlockHunks, renderTrackChanges, colorByAuthor, authorAt, wordDiffByAuthor, countLineHunks, type AuthorSpan } from "../src/trackChangesModel";
|
||||
const md = new MarkdownIt({ html: true, linkify: false, breaks: false });
|
||||
|
||||
describe("splitBlocks", () => {
|
||||
@@ -440,9 +440,9 @@ describe("renderReview", () => {
|
||||
expect(html).toContain('data-proposal-id="p1"'); // proposal still shows (it is an action)
|
||||
expect(html).toContain("Person");
|
||||
});
|
||||
test("renderReview: zero diff (e.g. machine-landing accept) renders unchanged blocks plain (Task 2 behavior)", () => {
|
||||
test("renderReview: zero diff (baseline == current) renders unchanged blocks plain (Task 2 behavior)", () => {
|
||||
// Task 2: unchanged blocks always render plain — color means "changed since baseline".
|
||||
// After accepting a Claude edit the text is the new baseline; no diff → no coloring.
|
||||
// When baseline == current (e.g. right after a fresh snapshot) there's no diff → no coloring.
|
||||
const doc = "Human wrote this.\n\nClaude wrote that.";
|
||||
const spans: AuthorSpan[] = [{ start: 19, end: doc.length, author: "claude" }];
|
||||
const html = renderReview(doc, doc, spans, []); // no pinned flag
|
||||
@@ -825,3 +825,19 @@ describe("F11 data-src emission (INV-36)", () => {
|
||||
expect(renderReview(doc, doc, [], [])).not.toContain('href="https://example.com/spec"');
|
||||
});
|
||||
});
|
||||
|
||||
describe("countLineHunks", () => {
|
||||
it("0 for identical text", () => {
|
||||
expect(countLineHunks("a\nb\n", "a\nb\n")).toBe(0);
|
||||
});
|
||||
it("1 for one contiguous change", () => {
|
||||
expect(countLineHunks("a\nb\nc\n", "a\nX\nc\n")).toBe(1);
|
||||
});
|
||||
it("2 for two separated changes", () => {
|
||||
expect(countLineHunks("a\nb\nc\nd\ne\n", "a\nX\nc\nd\nY\n")).toBe(2);
|
||||
});
|
||||
it("counts pure insertions and deletions", () => {
|
||||
expect(countLineHunks("a\n", "a\nb\n")).toBe(1);
|
||||
expect(countLineHunks("a\nb\n", "a\n")).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user