返回 oh-my-ppt
page-duplicate-html.test.ts
根目录 / tests / unit / main / utils / page-duplicate-html.test.ts
1 import { describe, expect, it } from 'vitest'
2 import { buildDuplicatePageHtmlFromSource } from '../../../../src/main/session/page-html-builders'
3
4 const SOURCE_HTML = `<!DOCTYPE html>
5 <html>
6 <head><title>原标题</title></head>
7 <body data-page-id="page-source123">
8 <div class="ppt-page-content" data-page-id="page-source123">
9 <h1 data-block-id="blk-1">主标题文字</h1>
10 <p data-block-id="blk-2">正文内容 ABC</p>
11 <input value="输入框里的值" placeholder="占位" />
12 </div>
13 </body>
14 </html>`
15
16 describe('buildDuplicatePageHtmlFromSource', () => {
17 it('保留全部可见文字与输入框值(区别于空白页清空),并重写 pageId 身份和标题', () => {
18 const result = buildDuplicatePageHtmlFromSource({
19 html: SOURCE_HTML,
20 oldPageId: 'page-source123',
21 nextPageId: 'page-copy456',
22 title: '[副本]原标题'
23 })
24
25 // 可见文字保留(空白页流程会清空这些)
26 expect(result).toContain('主标题文字')
27 expect(result).toContain('正文内容 ABC')
28 // 输入框 value/placeholder 保留
29 expect(result).toContain('输入框里的值')
30 expect(result).toContain('占位')
31 // block-id 不重写(跨页不冲突),原样保留
32 expect(result).toContain('data-block-id="blk-1"')
33
34 // 旧 pageId 已全部替换为新 pageId,无残留
35 expect(result).not.toContain('page-source123')
36 expect(result).toContain('data-page-id="page-copy456"')
37
38 // body 上的 data-page-id 换成新 id
39 expect(result).toMatch(/<body data-page-id="page-copy456">/)
40
41 // 标题已改为带 [副本] 前缀
42 expect(result).toContain('<title>[副本]原标题</title>')
43 })
44
45 it('oldPageId 等于 nextPageId 时原样返回(不误伤内容)', () => {
46 const result = buildDuplicatePageHtmlFromSource({
47 html: SOURCE_HTML,
48 oldPageId: 'page-same',
49 nextPageId: 'page-same',
50 title: '新标题'
51 })
52 // 内容不被破坏,标题仍被设置
53 expect(result).toContain('主标题文字')
54 expect(result).toContain('<title>新标题</title>')
55 })
56 })
57
57 lines TYPESCRIPT