import { afterEach, describe, expect, it, vi } from "vitest"; import { createMockPluginRegistry } from "./hooks.test-helpers.js"; async function importHookRunnerGlobalModule() { return import("./hook-runner-global.js"); } afterEach(async () => { const mod = await importHookRunnerGlobalModule(); mod.resetGlobalHookRunner(); vi.resetModules(); }); describe("hook-runner-global", () => { it("preserves the initialized runner across module reloads", async () => { const modA = await importHookRunnerGlobalModule(); const registry = createMockPluginRegistry([{ hookName: "message_received", handler: vi.fn() }]); modA.initializeGlobalHookRunner(registry); expect(modA.getGlobalHookRunner()?.hasHooks("message_received")).toBe(true); vi.resetModules(); const modB = await importHookRunnerGlobalModule(); expect(modB.getGlobalHookRunner()).not.toBeNull(); expect(modB.getGlobalHookRunner()?.hasHooks("message_received")).toBe(true); expect(modB.getGlobalPluginRegistry()).toBe(registry); }); it("clears the shared state across module reloads", async () => { const modA = await importHookRunnerGlobalModule(); const registry = createMockPluginRegistry([{ hookName: "message_received", handler: vi.fn() }]); modA.initializeGlobalHookRunner(registry); vi.resetModules(); const modB = await importHookRunnerGlobalModule(); modB.resetGlobalHookRunner(); expect(modB.getGlobalHookRunner()).toBeNull(); expect(modB.getGlobalPluginRegistry()).toBeNull(); vi.resetModules(); const modC = await importHookRunnerGlobalModule(); expect(modC.getGlobalHookRunner()).toBeNull(); expect(modC.getGlobalPluginRegistry()).toBeNull(); }); });