import { describe, expect, it } from 'vitest'; import type { ChartNodeData } from '../src/model/nodes/ChartNode'; import { parseXml, SafeXmlNode } from '../src/parser/XmlParser'; import { chartToElement } from '../src/serializer/chartSerializer'; import { minimalCtx } from './helpers'; const NS = 'xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" ' + 'xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"'; function chartNode(): ChartNodeData { return { id: 'chart', name: 'chart', nodeType: 'chart', chartPath: 'ppt/charts/chart1.xml', position: { x: 0, y: 0 }, size: { w: 640, h: 360 }, rotation: 0, flipH: false, flipV: false, source: new SafeXmlNode(null), xmlOrder: 1, }; } describe('chartSerializer', () => { it('line+area 组合图保留面积图类型,并按 numFmt 格式化日期横轴', () => { const chartXml = ` 辅助列 m"月"d"日";@4609846112 16504107753 全站历史累计用户总数(人) m"月"d"日";@4609846112 16504107753 `; const el = chartToElement( chartNode(), minimalCtx({ presentation: { charts: new Map([['ppt/charts/chart1.xml', parseXml(chartXml)]]), } as unknown as ReturnType['presentation'], }), 0, ); expect(el.chartType).toBe('areaChart'); const data = el.data as Exclude; expect(data[0].key).toBe('全站历史累计用户总数(人)'); expect(data[0].xlabels).toEqual({ '0': '3月17日', '1': '3月31日', }); expect(el.colors[0]).toBe('#6124C3'); }); it('keeps blank date-formatted category labels blank', () => { const chartXml = ` 累计用户 m"月"d"日";@46098 16504107753 `; const el = chartToElement( chartNode(), minimalCtx({ presentation: { charts: new Map([['ppt/charts/chart1.xml', parseXml(chartXml)]]), } as unknown as ReturnType['presentation'], }), 0, ); const data = el.data as Exclude; expect(data[0].xlabels).toEqual({ '0': '3月17日', '1': ' ', }); }); });