// @vitest-environment happy-dom import { defaultExportConfig } from "@md-to-pdf/core"; import { describe, expect, it } from "vitest"; import { fitOversizedEChartsToPage } from "../src/echarts-page-fit.js"; describe("ECharts 单页高度适配", () => { it("将超高 SVG 和宿主同步缩放到单页内容区", () => { const root = document.createElement("div"); root.innerHTML = `

大型图表

`; const figure = root.querySelector(".md-echarts"); const title = root.querySelector("h2"); const host = root.querySelector( ".md-echarts-host" ); const svg = root.querySelector("svg"); if (title) { title.getBoundingClientRect = () => ({ x: 0, y: 0, top: 0, left: 0, right: 700, bottom: 40, width: 700, height: 40, toJSON: () => ({}) }); } fitOversizedEChartsToPage(root, defaultExportConfig); expect(figure?.dataset.pageHeightFitted).toBe("true"); expect(title?.style.breakAfter).toBe("avoid-page"); expect(figure?.style.breakAfter).toBe("page"); expect(figure?.style.pageBreakAfter).toBe("always"); expect(figure?.nextElementSibling).toHaveProperty( "dataset.mediaPageBreak", "true" ); expect(Number.parseFloat(host?.style.height ?? "0")).toBeCloseTo( 960.5748, 3 ); expect(host?.style.aspectRatio).toBe(""); expect(svg?.getAttribute("viewBox")).toBe("0 0 1000 2000"); expect(Number.parseFloat(svg?.style.height ?? "0")).toBeCloseTo( 960.5748, 3 ); }); it("普通高度图表不改变作者设置的宿主高度", () => { const root = document.createElement("div"); root.innerHTML = `
`; fitOversizedEChartsToPage(root, defaultExportConfig); const figure = root.querySelector(".md-echarts"); const host = root.querySelector( ".md-echarts-host" ); expect(figure?.dataset.pageHeightFitted).toBeUndefined(); expect(host?.style.height).toBe("300px"); }); });