Files
hermes-agent/apps/desktop/electron/quit-finalization.test.ts
hermes-seaeye[bot] bc655bfb40 fmt(js): npm run fix on merge (#118250)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-21 14:41:52 +00:00

64 lines
1.7 KiB
TypeScript

import assert from 'node:assert/strict'
import { test, vi } from 'vitest'
import { createQuitFinalization } from './quit-finalization'
/**
* #116376: on Windows, closing the last window ran the whole JS quit path
* (window-all-closed → app.quit → before-quit teardown → will-quit) and the
* process still stayed resident with 0 windows. The fallback must force the
* exit once, only on Windows, and only if Electron never reports `quit`.
*/
test('forces a single Windows exit once the admitted quit exceeds its deadline; never arms off Windows', () => {
let onTimeout: (() => void) | undefined
const hardExit = vi.fn()
const finalization = createQuitFinalization({
isWindows: true,
schedule: callback => {
onTimeout = callback
return 'timer'
},
hardExit
})
finalization.arm()
finalization.arm()
assert.ok(onTimeout)
onTimeout()
onTimeout()
assert.deepEqual(hardExit.mock.calls, [[0]])
const schedule = vi.fn()
const posixExit = vi.fn()
createQuitFinalization({ isWindows: false, schedule, hardExit: posixExit }).arm()
assert.equal(schedule.mock.calls.length, 0)
assert.equal(posixExit.mock.calls.length, 0)
})
test('a completed quit cancels the fallback and it never re-arms', () => {
let onTimeout: (() => void) | undefined
const cancel = vi.fn()
const hardExit = vi.fn()
const schedule = vi.fn((callback: () => void) => {
onTimeout = callback
return 'timer'
})
const finalization = createQuitFinalization({ isWindows: true, schedule, cancel, hardExit })
finalization.arm()
finalization.cancel()
onTimeout?.()
finalization.arm()
assert.deepEqual(cancel.mock.calls, [['timer']])
assert.equal(hardExit.mock.calls.length, 0)
assert.equal(schedule.mock.calls.length, 1)
})