Files
u-ppt/tests/sanitize-contrast.test.ts

69 lines
3.2 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* =====================================================================
* sanitize-contrast.test.ts — 对比度治理测试
* 保护对象:normSlides 内的 sanitizeContrast(深底小字 accent 降级、
* 透明/近背景色空装饰形状丢弃)
* ===================================================================== */
import { describe, it, expect } from 'vitest'
import { normSlides } from '../src/core/ai'
import type { SlideElement } from '../src/core/types'
/* ---------- 测试数据工厂 ---------- */
function textEl(id: string, over: Partial<SlideElement> = {}): SlideElement {
return { id, type: 'text', x: 10, y: 30, w: 60, h: 20, content: '正文', style: { color: 'accent', fontSize: 20 }, ...over }
}
function shapeEl(id: string, over: Partial<SlideElement> = {}): SlideElement {
return { id, type: 'shape', x: 70, y: 80, w: 10, h: 10, content: '', style: { shapeType: 'circle' }, ...over }
}
function norm(background: string, elements: SlideElement[]): SlideElement[] {
return normSlides([{ background, elements }])[0].elements
}
describe('sanitizeContrast 深底小字 accent 降级', () => {
it('深底页 text color=accent fontSize=20 → 降为 muted', () => {
const els = norm('g-primary', [textEl('t')])
expect((els[0].style as any).color).toBe('muted')
})
it('深底页 stat 大数字 color=accent fontSize=72 → 保留 accent', () => {
const els = norm('g-deep', [textEl('st', { type: 'stat', content: '65%', style: { color: 'accent', fontSize: 72 } })])
expect((els[0].style as any).color).toBe('accent')
})
it('浅底页(bgtext color=accent → 不动', () => {
const els = norm('bg', [textEl('t')])
expect((els[0].style as any).color).toBe('accent')
})
it('深底页 text color=accent fontSize=32 → 不动(大字合法)', () => {
const els = norm('primary', [textEl('t', { style: { color: 'accent', fontSize: 32 } })])
expect((els[0].style as any).color).toBe('accent')
})
it('深底页 quote color=muted → 不动(已是 muted', () => {
const els = norm('g-primary', [textEl('q', { type: 'quote', style: { color: 'muted', fontSize: 40 } })])
expect((els[0].style as any).color).toBe('muted')
})
})
describe('sanitizeContrast 空装饰形状丢弃', () => {
it('空装饰形状无 fill(透明)→ 丢弃', () => {
const els = norm('bg', [shapeEl('s1', { style: { shapeType: 'circle' } })])
expect(els.find(e => e.id === 's1')).toBeUndefined()
})
it('空装饰形状 fill=primary 放 g-primary 背景 → 丢弃(同色隐形)', () => {
const els = norm('g-primary', [shapeEl('s1', { style: { shapeType: 'circle', fill: 'primary' } })])
expect(els.find(e => e.id === 's1')).toBeUndefined()
})
it('空装饰形状 fill=accent 放 g-primary 背景 → 保留(不同色)', () => {
const els = norm('g-primary', [shapeEl('s1', { style: { shapeType: 'circle', fill: 'accent' } })])
expect(els.find(e => e.id === 's1')).toBeDefined()
})
it('带内容形状 fill 同背景色 → 保留', () => {
const els = norm('g-primary', [shapeEl('s1', { content: '标签', style: { shapeType: 'bubble', fill: 'primary' } })])
expect(els.find(e => e.id === 's1')).toBeDefined()
})
})