single-instance.spec.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. import { describe, expect, it, vi } from 'vitest'
  2. import { claimDesktopSingleInstance, type DesktopSingleInstanceApplication } from '../src/single-instance.ts'
  3. describe('desktop single-instance ownership', () => {
  4. it('quits a second process without registering lifecycle work', () => {
  5. const quit = vi.fn()
  6. const on = vi.fn()
  7. const application = {
  8. requestSingleInstanceLock: () => false,
  9. quit,
  10. on,
  11. } satisfies DesktopSingleInstanceApplication
  12. expect(claimDesktopSingleInstance(application, vi.fn())).toBe(false)
  13. expect(quit).toHaveBeenCalledOnce()
  14. expect(on).not.toHaveBeenCalled()
  15. })
  16. it('routes a later launch to the primary process', () => {
  17. let secondInstance: (() => void) | undefined
  18. const focus = vi.fn()
  19. const application = {
  20. requestSingleInstanceLock: () => true,
  21. quit: vi.fn(),
  22. on: vi.fn((_event: 'second-instance', listener: () => void) => { secondInstance = listener }),
  23. } satisfies DesktopSingleInstanceApplication
  24. expect(claimDesktopSingleInstance(application, focus)).toBe(true)
  25. secondInstance?.()
  26. expect(focus).toHaveBeenCalledOnce()
  27. })
  28. })