// @ts-nocheck import { mock } from 'node:test'; /** * Minimal in-memory chrome.* stub for service-worker unit tests. * Only the surface the tested modules touch is implemented. * Mock functions use node:test's `mock.fn` (callCount/resetCalls via `.mock`). */ export function makeChromeMock() { const store: Record = {}; const listeners = new Map>(); function event(name: string) { if (!listeners.has(name)) listeners.set(name, new Set()); const set = listeners.get(name)!; return { addListener: (fn: Function) => set.add(fn), removeListener: (fn: Function) => set.delete(fn), hasListener: (fn: Function) => set.has(fn), // test helper: count registered listeners _size: () => set.size, }; } return { storage: { local: { get: mock.fn(async (key: string | string[]) => { const keys = Array.isArray(key) ? key : [key]; const out: Record = {}; for (const k of keys) if (k in store) out[k] = store[k]; return out; }), set: mock.fn(async (obj: Record) => { Object.assign(store, obj); }), _store: store, }, }, tabs: { query: mock.fn(async () => []), onCreated: event('tabs.onCreated'), onRemoved: event('tabs.onRemoved'), onMoved: event('tabs.onMoved'), onAttached: event('tabs.onAttached'), onDetached: event('tabs.onDetached'), onUpdated: event('tabs.onUpdated'), }, tabGroups: { query: mock.fn(async () => []), onUpdated: event('tabGroups.onUpdated'), }, _event: event, }; }