Files
MorphDoc/apps/web/tests/preview-page.test.ts
SkyJourney f5a46f79f1 feat: 增加 ECharts 渲染与预览交互增强
- 新增可复用的 markdown-echarts 工作区,支持安全的 YAML 围栏、默认值、语义校验、错误占位和 SVG 渲染
- 将 ECharts 接入统一 Markdown、快速预览、精确预览与 PDF 链路,并复用 Mermaid 的不可跨页和超高图单页适配策略
- 默认示例加入 ECharts,增加源文本折叠、顶部文档状态、页码输入跳转与滚动同步
- 快速预览改用外层容器滚动,使滚动条与精确预览统一贴在预览区域右侧,并兼容显示缩放
- 完善 Docker 工作区复制、可配置 Compose 镜像、测试覆盖和进度文档
2026-07-27 16:05:14 +08:00

61 lines
1.8 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
getNearestPageNumber,
getPreviewPageScrollTop,
normalizePreviewPageNumber
} from "../src/preview-page";
const pages = [
{ top: 0, bottom: 100 },
{ top: 124, bottom: 224 },
{ top: 248, bottom: 348 }
];
describe("getNearestPageNumber", () => {
it("返回视口中心所在的页面", () => {
expect(getNearestPageNumber(180, pages)).toBe(2);
});
it("在页间空隙中返回距离最近的页面", () => {
expect(getNearestPageNumber(110, pages)).toBe(1);
expect(getNearestPageNumber(116, pages)).toBe(2);
});
it("没有页面或中心坐标无效时返回 0", () => {
expect(getNearestPageNumber(20, [])).toBe(0);
expect(getNearestPageNumber(Number.NaN, pages)).toBe(0);
});
});
describe("normalizePreviewPageNumber", () => {
it("保留有效的整数页码", () => {
expect(normalizePreviewPageNumber("12", 3, 65)).toBe(12);
});
it("将越界页码限制在有效范围", () => {
expect(normalizePreviewPageNumber("0", 3, 65)).toBe(1);
expect(normalizePreviewPageNumber("99", 3, 65)).toBe(65);
});
it("无效输入恢复当前页", () => {
expect(normalizePreviewPageNumber("", 7, 65)).toBe(7);
expect(normalizePreviewPageNumber("3.5", 7, 65)).toBe(7);
expect(normalizePreviewPageNumber("abc", 7, 65)).toBe(7);
});
it("没有可用页面时返回 0", () => {
expect(normalizePreviewPageNumber("1", 0, 0)).toBe(0);
});
});
describe("getPreviewPageScrollTop", () => {
it("按目标页相对滚动容器的位置计算滚动量", () => {
expect(getPreviewPageScrollTop(200, 900, 120)).toBe(980);
});
it("避免返回负数或无效滚动量", () => {
expect(getPreviewPageScrollTop(20, 10, 100)).toBe(0);
expect(getPreviewPageScrollTop(Number.NaN, 10, 0)).toBe(0);
});
});