import { describe, expect, it } from 'vitest'; import { parseXml } from '../src/parser/XmlParser'; import { parseShapeNode } from '../src/model/nodes/ShapeNode'; import { renderShape } from '../src/serializer/shapeSerializer'; import { minimalCtx } from './helpers'; const NS = 'xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" ' + 'xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"'; function shapeXml(spPrInner: string, styleInner = ''): string { return ` ${spPrInner} ${styleInner ? `${styleInner}` : ''} `; } function customShapeXml(spPrInner: string): string { return ` ${spPrInner} `; } describe('shapeSerializer · grpFill 继承父 group 填充', () => { it('父 group 有 solidFill 时,子 shape 的 grpFill 继承父填充色', async () => { const groupFillNode = parseXml(` `); const el = await renderShape( parseShapeNode(parseXml(shapeXml(''))), minimalCtx({ groupFillNode }), 0, ); expect(el.fill).toEqual({ type: 'color', value: '#6124C3' }); }); it('没有父 group 填充时,grpFill 不回退到 fillRef', async () => { const el = await renderShape( parseShapeNode( parseXml( shapeXml('', ''), ), ), minimalCtx({ theme: { ...minimalCtx().theme, fillStyles: [parseXml(``)], }, }), 0, ); expect(el.fill).toEqual({ type: 'color', value: 'transparent' }); }); }); describe('shapeSerializer · filled customGeometry 不应被误判为线段', () => { it('局部高度很小但有显式渐变填充的 customGeometry 保留面积填充', async () => { const el = await renderShape( parseShapeNode( parseXml( customShapeXml(` `), ), ), minimalCtx(), 0, ); expect(el.fill.type).toBe('gradient'); }); });