import { describe, it, expect, vi } from 'vitest'; import { Lifecycle } from './lifecycle.js'; describe('Lifecycle', () => { it('registers and calls shutdown handlers in reverse order', async () => { const lifecycle = new Lifecycle(); const calls: number[] = []; lifecycle.onShutdown(async () => { calls.push(1); }); lifecycle.onShutdown(async () => { calls.push(2); }); lifecycle.onShutdown(async () => { calls.push(3); }); await lifecycle.shutdown(); expect(calls).toEqual([3, 2, 1]); }); it('only shuts down once', async () => { const lifecycle = new Lifecycle(); let count = 0; lifecycle.onShutdown(async () => { count++; }); await lifecycle.shutdown(); await lifecycle.shutdown(); expect(count).toBe(1); }); it('reports running state', async () => { const lifecycle = new Lifecycle(); expect(lifecycle.isRunning).toBe(true); await lifecycle.shutdown(); expect(lifecycle.isRunning).toBe(false); }); });