mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-13 11:00:50 +00:00
Merged via squash.
Prepared head SHA: cc12097851
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
108 lines
3.4 KiB
TypeScript
108 lines
3.4 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { DEFAULT_DIFFS_TOOL_DEFAULTS, resolveDiffImageRenderOptions } from "./config.js";
|
|
import { renderDiffDocument } from "./render.js";
|
|
|
|
describe("renderDiffDocument", () => {
|
|
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("/plugins/diffs/assets/viewer.js");
|
|
expect(rendered.imageHtml).not.toContain("/plugins/diffs/assets/viewer.js");
|
|
expect(rendered.imageHtml).toContain('data-openclaw-diffs-ready="true"');
|
|
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("renders multi-file patch input", async () => {
|
|
const patch = [
|
|
"diff --git a/a.ts b/a.ts",
|
|
"--- a/a.ts",
|
|
"+++ b/a.ts",
|
|
"@@ -1 +1 @@",
|
|
"-const a = 1;",
|
|
"+const a = 2;",
|
|
"diff --git a/b.ts b/b.ts",
|
|
"--- a/b.ts",
|
|
"+++ b/b.ts",
|
|
"@@ -1 +1 @@",
|
|
"-const b = 1;",
|
|
"+const b = 2;",
|
|
].join("\n");
|
|
|
|
const rendered = await renderDiffDocument(
|
|
{
|
|
kind: "patch",
|
|
patch,
|
|
title: "Workspace patch",
|
|
},
|
|
{
|
|
presentation: {
|
|
...DEFAULT_DIFFS_TOOL_DEFAULTS,
|
|
layout: "split",
|
|
theme: "dark",
|
|
},
|
|
image: resolveDiffImageRenderOptions({
|
|
defaults: DEFAULT_DIFFS_TOOL_DEFAULTS,
|
|
fileQuality: "hq",
|
|
fileMaxWidth: 1180,
|
|
}),
|
|
expandUnchanged: true,
|
|
},
|
|
);
|
|
|
|
expect(rendered.title).toBe("Workspace patch");
|
|
expect(rendered.fileCount).toBe(2);
|
|
expect(rendered.html).toContain("Workspace patch");
|
|
expect(rendered.imageHtml).toContain("max-width: 1180px;");
|
|
});
|
|
|
|
it("rejects patches that exceed file-count limits", async () => {
|
|
const patch = Array.from({ length: 129 }, (_, i) => {
|
|
return [
|
|
`diff --git a/f${i}.ts b/f${i}.ts`,
|
|
`--- a/f${i}.ts`,
|
|
`+++ b/f${i}.ts`,
|
|
"@@ -1 +1 @@",
|
|
"-const x = 1;",
|
|
"+const x = 2;",
|
|
].join("\n");
|
|
}).join("\n");
|
|
|
|
await expect(
|
|
renderDiffDocument(
|
|
{
|
|
kind: "patch",
|
|
patch,
|
|
},
|
|
{
|
|
presentation: DEFAULT_DIFFS_TOOL_DEFAULTS,
|
|
image: resolveDiffImageRenderOptions({ defaults: DEFAULT_DIFFS_TOOL_DEFAULTS }),
|
|
expandUnchanged: false,
|
|
},
|
|
),
|
|
).rejects.toThrow("too many files");
|
|
});
|
|
});
|