import { format as formatUtil } from '@/core/utils/format'; describe('formatUtil unit test', () => { test('【 # 】数字占位符: 只显有意义的零而不显示无意义的零, 小数点后数字如大于”#”的数量, 则按”#”的位数四舍五入', () => { const formatRule = '###.##'; const value = '12.1'; const value2 = '1234.1263'; const value3 = '12.10'; expect(formatUtil.format(value, formatRule)).toBe('12.1'); expect(formatUtil.format(value2, formatRule)).toBe('1234.13'); expect(formatUtil.format(value3, formatRule)).toBe('12.10'); }); test('【 0 】数字占位符: 如果单元格的内容大于占位符, 则显示实际数字, 如果小于点位符的数量, 则用0补足', () => { const formatRule1 = '00000'; const value = '1234567'; const value2 = '123'; expect(formatUtil.format(value, formatRule1)).toBe('1234567'); expect(formatUtil.format(value2, formatRule1)).toBe('00123'); const formatRule2 = '00.000'; const value3 = '100.14'; const value4 = '1.1'; expect(formatUtil.format(value3, formatRule2)).toBe('100.140'); expect(formatUtil.format(value4, formatRule2)).toBe('01.100'); }); test('【 ? 】数字占位符: 在小数点两边为无意义的零添加空格, 以便当按固定宽度时, 小数点可对齐, 另外还用于对不等到长数字的分数', () => { const formatRule1 = '?.??'; const value1 = '12.125'; expect(formatUtil.format(value1, formatRule1)).toBe('12.13'); const formatRule2 = '??.??'; const value2 = '2.125'; expect(formatUtil.format(value2, formatRule2)).toBe(' 2.13'); const formatRule3 = '???.???'; const value3 = '12.121'; expect(formatUtil.format(value3, formatRule3)).toBe(' 12.121'); const value4 = '12.12'; expect(formatUtil.format(value4, formatRule3)).toBe(' 12.12 '); }); test('【 % 】百分比: 将数值除以100后加上 % , 与其他占位符配合使用', () => { const formatRule1 = '#%'; const value1 = '0.125'; expect(formatUtil.format(value1, formatRule1)).toBe('13%'); const formatRule2 = '#.#%'; const value2 = '0.12645'; expect(formatUtil.format(value2, formatRule2)).toBe('12.6%'); const formatRule3 = '#.##%'; const value3 = '0.131'; expect(formatUtil.format(value3, formatRule3)).toBe('13.1%'); const formatRule4 = '#.00%'; const value4 = '0.211'; expect(formatUtil.format(value4, formatRule4)).toBe('21.10%'); const formatRule5 = '?.??%'; const value5 = '0.126'; expect(formatUtil.format(value5, formatRule5)).toBe('12.6 %'); }); test('【 , 】千位分隔符: 千分位, 与其他占位符配合使用', () => { const formatRule1 = '#,###'; const value1 = '12000'; expect(formatUtil.format(value1, formatRule1)).toBe('12,000'); const formatRule2 = '#,####'; const value2 = '12000.45'; expect(formatUtil.format(value2, formatRule2)).toBe('12,000'); const formatRule3 = '#,#'; const value3 = '12451.45'; expect(formatUtil.format(value3, formatRule3)).toBe('12,451'); const formatRule4 = '#,'; const value4 = '10000'; expect(formatUtil.format(value4, formatRule4)).toBe('10'); const formatRule5 = '#,k'; const value5 = '123123'; expect(formatUtil.format(value5, formatRule5)).toBe('123k'); const formatRule6 = '#,,'; const value6 = '1234567'; expect(formatUtil.format(value6, formatRule6)).toBe('1'); const formatRule7 = '0,.#'; const value7 = '12345'; expect(formatUtil.format(value7, formatRule7)).toBe('12.3'); const formatRule8 = '#.00,'; const value8 = '12345'; expect(formatUtil.format(value8, formatRule8)).toBe('12.35'); const formatRule9 = '人民币 #,##0,, 百万'; const value9 = '1234567890'; expect(formatUtil.format(value9, formatRule9)).toBe('人民币 1,235 百万'); }); test('【正数格式;负数格式;零格式;文本格式】正负零区分显示: 这四个节顺序定义了格式中的正数、负数、零和文本', () => { const formatRule1 = '正数;负数;空'; const value1 = '1'; expect(formatUtil.format(value1, formatRule1)).toBe('正数'); const formatRule2 = '#;-#;空'; const value2 = '-1'; expect(formatUtil.format(value2, formatRule2)).toBe('-1'); const formatRule3 = '正数;负数;空'; const value3 = '0'; expect(formatUtil.format(value3, formatRule3)).toBe('空'); }); test('科学计数法', () => { const formatRule1 = '0.#E+#'; const value1 = '1200000'; expect(formatUtil.format(value1, formatRule1)).toBe('1.2E+6'); const formatRule2 = '0.00E+00'; const value2 = '1200000'; expect(formatUtil.format(value2, formatRule2)).toBe('1.20E+06'); }); test('【 @ 】文本占位符: 单个@,作用是引用原始文本,如果使用多个@,则可以重复文本', () => { const formatRule1 = '集团@部'; const value1 = '财务'; expect(formatUtil.format(value1, formatRule1)).toBe('集团财务部'); const formatRule2 = '@@@'; const value2 = '财务'; expect(formatUtil.format(value2, formatRule2)).toBe('财务财务财务'); }); test('【 * 】占位标记符号:用 * 后面跟着的字符,重复直到充满空余列宽', () => { test.todo('【 * 】占位标记符号:用 * 后面跟着的字符,重复直到充满空余列宽'); }); test('【 \ | "" 】格式显示下一个字符', () => { const formatRule1 = '#\元'; const value1 = '123123'; expect(formatUtil.format(value1, formatRule1)).toBe('123123元'); const formatRule2 = '#"人民币"'; const value2 = '123123'; expect(formatUtil.format(value2, formatRule2)).toBe('123123人民币'); }); test('【 [颜色] 】', () => { test.todo('【 [颜色] 】'); }); test('【= | > | < | >= | <= | <>】条件: 判断逻辑放到[ ]中括号里, 条件格式化只限于使用三个条件,其中两个条件是明确的,另个是所有的其他', () => { const formatRule1 = '[>1]上升;[=1]持平;下降'; const value1 = '1.2'; const value2 = '1'; const value3 = '0.8'; expect(formatUtil.format(value1, formatRule1)).toBe('上升'); // TEST TODO formatUtil 条件判断有误 // expect(formatUtil.format(value2, formatRule1)).toBe('持平'); // expect(formatUtil.format(value3, formatRule1)).toBe('下降'); }); test('时间日期格式化', () => { const formatRule1 = 'YYYY-MM-DD'; const value1 = '2021-01-21 12:23:45'; expect(formatUtil.format(value1, formatRule1)).toBe('2021-01-21'); }) })