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("年度收入");
expect(html).toContain(""type":"bar"");
});
it("保留其他代码围栏的默认行为", () => {
const markdown = new MarkdownIt().use(markdownItECharts);
expect(markdown.render("```ts\nconst answer = 42;\n```")).toContain(
''
);
});
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("