返回 oh-my-ppt
write-serialization.test.ts
根目录 / tests / unit / presentation / write-serialization.test.ts
1 import { describe, expect, it } from 'vitest'
2 import { serializedWrite } from '../../../src/main/presentation/html/write-serialization'
3
4 describe('serializedWrite', () => {
5 it('orders writes for one resource and releases the next write after a failure', async () => {
6 const events: string[] = []
7 let releaseFirst: (() => void) | undefined
8 const firstGate = new Promise<void>((resolve) => {
9 releaseFirst = resolve
10 })
11
12 const first = serializedWrite('deck-a', async () => {
13 events.push('first:start')
14 await firstGate
15 events.push('first:fail')
16 throw new Error('expected')
17 })
18 const second = serializedWrite('deck-a', async () => {
19 events.push('second:start')
20 return 'second:done'
21 })
22
23 await Promise.resolve()
24 expect(events).toEqual(['first:start'])
25 releaseFirst?.()
26 await expect(first).rejects.toThrow('expected')
27 await expect(second).resolves.toBe('second:done')
28 expect(events).toEqual(['first:start', 'first:fail', 'second:start'])
29 })
30
31 it('does not serialize different presentation resources', async () => {
32 const events: string[] = []
33 await Promise.all([
34 serializedWrite('deck-a', async () => events.push('a')),
35 serializedWrite('deck-b', async () => events.push('b'))
36 ])
37 expect(events).toHaveLength(2)
38 })
39 })
40
40 lines TYPESCRIPT