Files
Starlight_Lancher/apps/app-frontend/src/helpers/instance-launch-state.test.ts
T
Disy d2a319a4d5
Axolotl desktop CI / guardrails (push) Has been cancelled
Axolotl desktop CI / desktop (macos-latest) (push) Has been cancelled
Axolotl desktop CI / desktop (ubuntu-latest) (push) Has been cancelled
Axolotl desktop CI / desktop (windows-latest) (push) Has been cancelled
Axolotl desktop CI / website (push) Has been cancelled
Repository checks / typos (push) Has been cancelled
Repository checks / tombi (push) Has been cancelled
Rust checks / shear (push) Has been cancelled
Sync source to CNB / Sync Git ref (push) Has been cancelled
fix: 启用启动器更新并修复初始化竞态
2026-09-26 13:06:51 +08:00

40 lines
1.3 KiB
TypeScript

import assert from 'node:assert/strict'
import { test } from 'node:test'
import { isInstanceLaunching, launchOnce } from './instance-launch-state.ts'
test('launches different instances concurrently and coalesces repeated pending clicks', async () => {
let finishA!: (value: string) => void
let starts = 0
const first = launchOnce('a', () => {
starts++
return new Promise<string>((resolve) => {
finishA = resolve
})
})
assert.equal(
launchOnce('a', async () => 'unexpected duplicate'),
first,
)
assert.equal(isInstanceLaunching('a'), true)
assert.equal(isInstanceLaunching('b'), false)
assert.equal(await launchOnce('b', async () => 'b started'), 'b started')
assert.equal(isInstanceLaunching('a'), true)
finishA('a started')
assert.equal(await first, 'a started')
assert.equal(starts, 1)
assert.equal(isInstanceLaunching('a'), false)
assert.equal(await launchOnce('a', async () => 'second window'), 'second window')
})
test('failed launch releases only its own pending state and can retry', async () => {
await assert.rejects(
launchOnce('failed', async () => {
throw new Error('launch failed')
}),
/launch failed/,
)
assert.equal(isInstanceLaunching('failed'), false)
assert.equal(await launchOnce('failed', async () => 'retry'), 'retry')
})