Files
SubMiner/src/main/overlay-ui-bootstrap-runtime-input.test.ts

134 lines
4.8 KiB
TypeScript

import assert from 'node:assert/strict';
import test from 'node:test';
import type { OverlayHostedModal } from '../shared/ipc/contracts';
import { createOverlayUiBootstrapRuntimeInput } from './overlay-ui-bootstrap-runtime-input';
test('overlay ui bootstrap runtime input builder preserves grouped wiring', () => {
const input = createOverlayUiBootstrapRuntimeInput({
windows: {
state: {
getMainWindow: () => null,
setMainWindow: () => {},
getModalWindow: () => null,
setModalWindow: () => {},
getVisibleOverlayVisible: () => false,
setVisibleOverlayVisible: () => {},
getOverlayDebugVisualizationEnabled: () => false,
setOverlayDebugVisualizationEnabled: () => {},
},
geometry: {
getCurrentOverlayGeometry: () => ({ x: 1, y: 2, width: 3, height: 4 }),
},
modal: {
setModalWindowBounds: () => {},
onModalStateChange: () => {},
},
modalRuntime: {
handleOverlayModalClosed: (_modal: OverlayHostedModal) => {},
notifyOverlayModalOpened: (_modal: OverlayHostedModal) => {},
waitForModalOpen: async () => true,
getRestoreVisibleOverlayOnModalClose: () => new Set<OverlayHostedModal>(),
openRuntimeOptionsPalette: () => {},
sendToActiveOverlayWindow: () => false,
},
visibility: {
service: {
getModalActive: () => false,
getForceMousePassthrough: () => false,
getWindowTracker: () => null,
getTrackerNotReadyWarningShown: () => false,
setTrackerNotReadyWarningShown: () => {},
updateVisibleOverlayBounds: () => {},
ensureOverlayWindowLevel: () => {},
syncPrimaryOverlayWindowLayer: () => {},
enforceOverlayLayerOrder: () => {},
syncOverlayShortcuts: () => {},
isMacOSPlatform: () => false,
isWindowsPlatform: () => false,
showOverlayLoadingOsd: () => {},
resolveFallbackBounds: () => ({ x: 5, y: 6, width: 7, height: 8 }),
},
overlayWindows: {
createOverlayWindowCore: () => ({ isDestroyed: () => false }),
isDev: false,
ensureOverlayWindowLevel: () => {},
onRuntimeOptionsChanged: () => {},
setOverlayDebugVisualizationEnabled: () => {},
isOverlayVisible: () => false,
getYomitanSession: () => null,
tryHandleOverlayShortcutLocalFallback: () => false,
forwardTabToMpv: () => {},
onWindowClosed: () => {},
},
actions: {
setVisibleOverlayVisibleCore: () => {},
},
},
},
overlayActions: {
getRuntimeOptionsManager: () => null,
getMpvClient: () => null,
broadcastRuntimeOptionsChangedRuntime: () => {},
broadcastToOverlayWindows: () => {},
setOverlayDebugVisualizationEnabledRuntime: () => {},
},
tray: null,
bootstrap: {
initializeOverlayRuntimeMainDeps: {
appState: {
backendOverride: null,
windowTracker: null,
subtitleTimingTracker: null,
mpvClient: null,
mpvSocketPath: '/tmp/mpv.sock',
runtimeOptionsManager: null,
ankiIntegration: null,
},
overlayManager: {
getVisibleOverlayVisible: () => false,
},
overlayVisibilityRuntime: {
updateVisibleOverlayVisibility: () => {},
},
overlayShortcutsRuntime: {
syncOverlayShortcuts: () => {},
},
createMainWindow: () => {},
registerGlobalShortcuts: () => {},
updateVisibleOverlayBounds: () => {},
getOverlayWindows: () => [],
getResolvedConfig: () => ({}) as never,
showDesktopNotification: () => {},
createFieldGroupingCallback: () => () => Promise.resolve({} as never),
getKnownWordCacheStatePath: () => '/tmp/known.json',
shouldStartAnkiIntegration: () => false,
},
initializeOverlayRuntimeBootstrapDeps: {
isOverlayRuntimeInitialized: () => false,
initializeOverlayRuntimeCore: () => {},
setOverlayRuntimeInitialized: () => {},
startBackgroundWarmups: () => {},
},
onInitialized: () => {},
},
runtimeState: {
isOverlayRuntimeInitialized: () => false,
setOverlayRuntimeInitialized: () => {},
},
mpvSubtitle: {
ensureOverlayMpvSubtitlesHidden: () => {},
syncOverlayMpvSubtitleSuppression: () => {},
},
});
assert.equal(input.tray, null);
assert.equal(input.windows.windowState.getMainWindow(), null);
assert.equal(input.windows.geometry.getCurrentOverlayGeometry().width, 3);
assert.equal(input.windows.visibilityService.resolveFallbackBounds().height, 8);
assert.equal(
input.bootstrap.initializeOverlayRuntimeBootstrapDeps.isOverlayRuntimeInitialized(),
false,
);
});