import { disposeHighlighter, RegisteredCustomThemes, ResolvedThemes, ResolvingThemes, } from "@pierre/diffs"; import { afterEach, describe, expect, it } from "vitest"; import { DEFAULT_DIFFS_TOOL_DEFAULTS, resolveDiffImageRenderOptions } from "./config.js"; import { renderDiffDocument } from "./render.js"; import { parseViewerPayloadJson } from "./viewer-payload.js"; describe("renderDiffDocument", () => { afterEach(async () => { await disposeHighlighter(); }); it("renders before/after input into a complete viewer document", async () => { const rendered = await renderDiffDocument( { kind: "before_after", before: "const value = 1;\n", after: "const value = 2;\n", path: "src/example.ts", }, { presentation: DEFAULT_DIFFS_TOOL_DEFAULTS, image: resolveDiffImageRenderOptions({ defaults: DEFAULT_DIFFS_TOOL_DEFAULTS }), expandUnchanged: false, }, ); expect(rendered.title).toBe("src/example.ts"); expect(rendered.fileCount).toBe(1); expect(rendered.html).toContain("data-openclaw-diff-root"); expect(rendered.html).toContain("src/example.ts"); expect(rendered.html).toContain("../../assets/viewer.js"); expect(rendered.imageHtml).toContain("../../assets/viewer.js"); expect(rendered.imageHtml).toContain("max-width: 960px;"); expect(rendered.imageHtml).toContain("--diffs-font-size: 16px;"); expect(rendered.html).toContain("min-height: 100vh;"); expect(rendered.html).toContain('"diffIndicators":"bars"'); expect(rendered.html).toContain('"disableLineNumbers":false'); expect(rendered.html).toContain("--diffs-line-height: 24px;"); expect(rendered.html).toContain("--diffs-font-size: 15px;"); expect(rendered.html).not.toContain("fonts.googleapis.com"); }); it("resolves viewer assets under an optional base path", async () => { const rendered = await renderDiffDocument( { kind: "before_after", before: "const value = 1;\n", after: "const value = 2;\n", }, { presentation: DEFAULT_DIFFS_TOOL_DEFAULTS, image: resolveDiffImageRenderOptions({ defaults: DEFAULT_DIFFS_TOOL_DEFAULTS }), expandUnchanged: false, }, ); const html = rendered.html ?? ""; const loaderSrc = html.match(/