import EventEmitter from "../src/shared/EventEmitter"; class TestEmitter extends EventEmitter { public dispatch(event: string, detail?: unknown) { this.emit(event, detail); } } describe("shared EventEmitter", () => { it("reports listenerCount per event", () => { const emitter = new TestEmitter(); const listenerA1 = jest.fn(); const listenerA2 = jest.fn(); const listenerB = jest.fn(); emitter.on("event:a", listenerA1); emitter.on("event:a", listenerA2); emitter.on("event:b", listenerB); expect(emitter.listenerCount("event:a")).toBe(2); expect(emitter.listenerCount("event:b")).toBe(1); expect(emitter.listenerCount("event:missing")).toBe(0); emitter.off("event:a", listenerA1); expect(emitter.listenerCount("event:a")).toBe(1); emitter.removeAllListeners("event:a"); expect(emitter.listenerCount("event:a")).toBe(0); expect(emitter.listenerCount("event:b")).toBe(1); }); it("decrements listenerCount for once listeners after first emit", () => { const emitter = new TestEmitter(); const listener = jest.fn(); emitter.once("event:once", listener); expect(emitter.listenerCount("event:once")).toBe(1); emitter.dispatch("event:once", { ok: true }); expect(listener).toHaveBeenCalledWith({ ok: true }); expect(emitter.listenerCount("event:once")).toBe(0); }); });