import assert from 'node:assert/strict'; import test from 'node:test'; import { createBuildCycleSecondarySubModeMainDepsHandler } from './secondary-sub-mode-main-deps'; import type { SecondarySubMode } from '../../types'; test('cycle secondary sub mode main deps builder maps state and broadcasts with channel', () => { const calls: string[] = []; let mode: SecondarySubMode = 'hover'; let lastToggleAt = 100; const deps = createBuildCycleSecondarySubModeMainDepsHandler({ getSecondarySubMode: () => mode, setSecondarySubMode: (nextMode) => { mode = nextMode; calls.push(`set-mode:${nextMode}`); }, getLastSecondarySubToggleAtMs: () => lastToggleAt, setLastSecondarySubToggleAtMs: (timestampMs) => { lastToggleAt = timestampMs; calls.push(`set-ts:${timestampMs}`); }, broadcastToOverlayWindows: (channel, nextMode) => calls.push(`broadcast:${channel}:${nextMode}`), showMpvOsd: (text) => calls.push(`osd:${text}`), })(); assert.equal(deps.getSecondarySubMode(), 'hover'); assert.equal(deps.getLastSecondarySubToggleAtMs(), 100); deps.setSecondarySubMode('visible'); deps.setLastSecondarySubToggleAtMs(200); deps.broadcastSecondarySubMode('visible'); deps.showMpvOsd('Secondary subtitle: visible'); assert.equal(mode, 'visible'); assert.equal(lastToggleAt, 200); assert.deepEqual(calls, [ 'set-mode:visible', 'set-ts:200', 'broadcast:secondary-subtitle:mode:visible', 'osd:Secondary subtitle: visible', ]); });