fix: support concurrent game windows and prepare beta12 GitHub releases
This commit is contained in:
1 parent
91f483b960
commit
1cf67602d8
33 files changed
+681
-293
No files matched your search
@@ -0,0 +1,38 @@
|
||||
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')
|
||||
})
|
||||
Reference in new issue
Block a user