- 新增可复用的 markdown-echarts 工作区,支持安全的 YAML 围栏、默认值、语义校验、错误占位和 SVG 渲染 - 将 ECharts 接入统一 Markdown、快速预览、精确预览与 PDF 链路,并复用 Mermaid 的不可跨页和超高图单页适配策略 - 默认示例加入 ECharts,增加源文本折叠、顶部文档状态、页码输入跳转与滚动同步 - 快速预览改用外层容器滚动,使滚动条与精确预览统一贴在预览区域右侧,并兼容显示缩放 - 完善 Docker 工作区复制、可配置 Compose 镜像、测试覆盖和进度文档
83 lines
2.1 KiB
TypeScript
83 lines
2.1 KiB
TypeScript
import MarkdownIt from "markdown-it";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
import {
|
|
markdownItECharts
|
|
} from "../src/index.js";
|
|
|
|
describe("markdownItECharts", () => {
|
|
it("将 echarts 围栏转换为安全占位 DOM", () => {
|
|
const markdown = new MarkdownIt().use(markdownItECharts);
|
|
const html = markdown.render(`
|
|
\`\`\`echarts
|
|
version: 1
|
|
height: 80mm
|
|
caption: 年度收入
|
|
option:
|
|
xAxis:
|
|
type: category
|
|
data: [2023, 2024]
|
|
yAxis:
|
|
type: value
|
|
series:
|
|
- type: bar
|
|
data: [120, 180]
|
|
\`\`\`
|
|
`);
|
|
|
|
expect(html).toContain('class="md-echarts"');
|
|
expect(html).toContain('data-echarts-pending="true"');
|
|
expect(html).toContain('class="md-echarts-host"');
|
|
expect(html).toContain(
|
|
'class="md-echarts-definition" hidden="hidden"'
|
|
);
|
|
expect(html).toContain("<figcaption>年度收入</figcaption>");
|
|
expect(html).toContain(""type":"bar"");
|
|
});
|
|
|
|
it("保留其他代码围栏的默认行为", () => {
|
|
const markdown = new MarkdownIt().use(markdownItECharts);
|
|
expect(markdown.render("```ts\nconst answer = 42;\n```")).toContain(
|
|
'<code class="language-ts">'
|
|
);
|
|
});
|
|
|
|
it("错误配置产生安全错误节点并通知宿主", () => {
|
|
const onError = vi.fn();
|
|
const markdown = new MarkdownIt().use(markdownItECharts, {
|
|
onError
|
|
});
|
|
const environment = { requestId: "render-1" };
|
|
const html = markdown.render(`
|
|
\`\`\`echarts
|
|
version: 1
|
|
height: 80mm
|
|
option:
|
|
series:
|
|
- type: custom
|
|
\`\`\`
|
|
`, environment);
|
|
|
|
expect(html).toContain('class="md-echarts-error"');
|
|
expect(html).not.toContain("<script");
|
|
expect(onError).toHaveBeenCalledWith(
|
|
expect.any(Error),
|
|
expect.objectContaining({ environment })
|
|
);
|
|
});
|
|
|
|
it("缺少数据时输出包含配置路径的局部错误", () => {
|
|
const markdown = new MarkdownIt().use(markdownItECharts);
|
|
const html = markdown.render(`
|
|
\`\`\`echarts
|
|
option:
|
|
series:
|
|
- type: bar
|
|
\`\`\`
|
|
`);
|
|
|
|
expect(html).toContain('class="md-echarts-error"');
|
|
expect(html).toContain("option.series.0.data");
|
|
expect(html).not.toContain("data-echarts-pending");
|
|
});
|
|
});
|