- 新增可复用的 markdown-echarts 工作区,支持安全的 YAML 围栏、默认值、语义校验、错误占位和 SVG 渲染 - 将 ECharts 接入统一 Markdown、快速预览、精确预览与 PDF 链路,并复用 Mermaid 的不可跨页和超高图单页适配策略 - 默认示例加入 ECharts,增加源文本折叠、顶部文档状态、页码输入跳转与滚动同步 - 快速预览改用外层容器滚动,使滚动条与精确预览统一贴在预览区域右侧,并兼容显示缩放 - 完善 Docker 工作区复制、可配置 Compose 镜像、测试覆盖和进度文档
113 lines
1.9 KiB
TypeScript
113 lines
1.9 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
EChartsFenceError,
|
|
parseEChartsFence
|
|
} from "../src/index.js";
|
|
|
|
const validSource = `
|
|
version: 1
|
|
height: 90mm
|
|
theme: document
|
|
caption: 年度趋势
|
|
option:
|
|
dataset:
|
|
source:
|
|
- [year, sales]
|
|
- [2023, 120]
|
|
- [2024, 180]
|
|
xAxis:
|
|
type: category
|
|
yAxis:
|
|
type: value
|
|
series:
|
|
- type: line
|
|
encode:
|
|
x: year
|
|
y: sales
|
|
`;
|
|
|
|
describe("parseEChartsFence", () => {
|
|
it("解析并规范化有效协议", () => {
|
|
expect(parseEChartsFence(validSource)).toEqual({
|
|
version: 1,
|
|
height: "90mm",
|
|
theme: "document",
|
|
caption: "年度趋势",
|
|
option: {
|
|
dataset: {
|
|
source: [
|
|
["year", "sales"],
|
|
[2023, 120],
|
|
[2024, 180]
|
|
]
|
|
},
|
|
xAxis: {
|
|
type: "category"
|
|
},
|
|
yAxis: {
|
|
type: "value"
|
|
},
|
|
series: [
|
|
{
|
|
type: "line",
|
|
encode: {
|
|
x: "year",
|
|
y: "sales"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
});
|
|
});
|
|
|
|
it("补充协议版本、尺寸和直角坐标轴默认值", () => {
|
|
expect(
|
|
parseEChartsFence(`
|
|
option:
|
|
series:
|
|
- type: line
|
|
data: [12, 18, 26]
|
|
`)
|
|
).toEqual({
|
|
version: 1,
|
|
height: "80mm",
|
|
theme: "document",
|
|
option: {
|
|
xAxis: {},
|
|
yAxis: {},
|
|
series: [
|
|
{
|
|
type: "line",
|
|
data: [12, 18, 26]
|
|
}
|
|
]
|
|
}
|
|
});
|
|
});
|
|
|
|
it("拒绝 YAML 锚点和别名", () => {
|
|
expect(() =>
|
|
parseEChartsFence(`
|
|
version: 1
|
|
height: 80mm
|
|
option:
|
|
series: &series
|
|
- type: line
|
|
color: *series
|
|
`)
|
|
).toThrow(EChartsFenceError);
|
|
});
|
|
|
|
it("拒绝显式 YAML 标签", () => {
|
|
expect(() =>
|
|
parseEChartsFence(`
|
|
version: 1
|
|
height: 80mm
|
|
option:
|
|
series:
|
|
- type: !!str line
|
|
`)
|
|
).toThrow(/不允许使用显式标签/u);
|
|
});
|
|
});
|