Files
u-ppt/tests/shape-render.test.ts

58 lines
2.5 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.
/* shape-render.test.ts — 形状元素渲染回归(细条/装饰形状不被文字层污染) */
import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
import ElementView from '../src/components/editor/ElementView.vue'
import { store } from '../src/core/store'
import type { SlideElement } from '../src/core/types'
/** 目录页 t2:标题下方的细横条(rect 128×11.5px */
const t2: SlideElement = {
id: 't2', type: 'shape', x: 8, y: 23, w: 10, h: 1.6, content: '',
style: { shapeType: 'rect', fill: 'accent', radius: 4, anim: 'fade-up' }
}
/** 步骤页 st4:步骤间的小三角 */
const st4: SlideElement = {
id: 'st4', type: 'shape', x: 27.5, y: 40, w: 5, h: 0.8, content: '',
style: { shapeType: 'triangle', fill: 'accent', anim: 'fade' }
}
describe('装饰形状渲染', () => {
it('细横条 rect:编辑态渲染图形 div + 空 contenteditable 文字层,无占位文字', () => {
const w = mount(ElementView, { props: { el: t2, bg: 'bg', edit: true }, attachTo: document.body })
const shape = w.find('.el-shape')
expect(shape.exists()).toBe(true)
expect(shape.attributes('style')).toContain('border-radius: 4px')
const text = w.find('.el-shape-text')
expect(text.exists()).toBe(true) // 编辑态保留可点击输入
expect(text.text()).toBe('') // 无占位文字
// 根节点暴露 data-shape 供 CSS 区分满幅/多边形安全区
expect(w.find('.el').attributes('data-shape')).toBe('rect')
w.unmount()
})
it('小三角 triangle:走 clip-path 分支,非正比框渲染', () => {
const w = mount(ElementView, { props: { el: st4, bg: 'bg', edit: true }, attachTo: document.body })
const shape = w.find('.el-shape')
expect(shape.attributes('style') || '').toContain('clip-path')
w.unmount()
})
it('非编辑态(模板预览):空 content 不渲染文字层', () => {
const w = mount(ElementView, { props: { el: t2, bg: 'bg' }, attachTo: document.body })
expect(w.find('.el-shape-text').exists()).toBe(false)
w.unmount()
})
it('有文字的形状:非编辑态渲染 md 文字层且默认白字', () => {
void store
const el = { ...t2, h: 10, content: '**加粗**文字' }
const w = mount(ElementView, { props: { el, bg: 'bg' }, attachTo: document.body })
const text = w.find('.el-shape-text')
expect(text.exists()).toBe(true)
expect(text.html()).toContain('<strong>加粗</strong>')
expect(text.attributes('style') || '').toContain('rgb(255, 255, 255)')
w.unmount()
})
})