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': ' ',
});
});
});