From 3c6b4baa2aeeb00cd72511ed80d77d20ff36e079 Mon Sep 17 00:00:00 2001 From: WeiCHEN Date: Tue, 8 Sep 2026 20:25:33 +0800 Subject: [PATCH] =?UTF-8?q?test(engine):=20=E5=A2=9E=E5=8A=A0=20cleanSvgFo?= =?UTF-8?q?rCanvas=20=E5=87=80=E5=8C=96=E4=B8=8E=E9=98=B2=E6=B1=A1?= =?UTF-8?q?=E6=9F=93=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- web/src/engine/renderers.test.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/web/src/engine/renderers.test.ts b/web/src/engine/renderers.test.ts index 6e45eb21..849cff49 100644 --- a/web/src/engine/renderers.test.ts +++ b/web/src/engine/renderers.test.ts @@ -7,6 +7,7 @@ import { parseInlineContent, latexToOmml, sanitizeMermaidCode, + cleanSvgForCanvas, } from './docxRenderer'; import { buildXlsxWorkbook, exportDocumentToXlsx } from './xlsxRenderer'; import { Packer, ImportedXmlComponent } from 'docx'; @@ -71,6 +72,15 @@ test('DOCX 渲染器 Mermaid 语法净化与容错测试 (sanitizeMermaidCode)', assert.ok(sanitized.includes('Display["4K医用级超低延迟监视器 (延时 < 35ms)"]')); }); +test('DOCX 渲染器 SVG 净化防 Canvas 污染测试 (cleanSvgForCanvas)', () => { + const dirtySvg = `
双CMOS分光棱镜
`; + const cleaned = cleanSvgForCanvas(dirtySvg); + + assert.ok(!cleaned.includes('@import'), '应彻底剥离 @import 外部网络字体'); + assert.ok(!cleaned.includes(',杜绝 Tainted Canvas'); + assert.ok(cleaned.includes('双CMOS分光棱镜'), '必须保留节点文本内容'); +}); + test('DOCX 渲染器全量编译测试 (buildDocxModel & exportDocumentToDocx)', async () => { const ast = markdownToBlockAST(SAMPLE_MD, { docId: 'doc_docx_test_001',