Files
SubMiner/src/core/services/cli-command-deps-runtime-service.test.ts

111 lines
3.1 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { createCliCommandDepsRuntimeService } from "./cli-command-deps-runtime-service";
test("createCliCommandDepsRuntimeService wires runtime helpers", () => {
let socketPath = "/tmp/mpv";
let setClientSocketPath: string | null = null;
let connectCalls = 0;
let texthookerPort = 7000;
let texthookerRunning = false;
let texthookerStartPort: number | null = null;
let overlayVisible = false;
let overlayInvisible = false;
let openYomitanAfterDelay: number | null = null;
const deps = createCliCommandDepsRuntimeService({
mpv: {
getSocketPath: () => socketPath,
setSocketPath: (next) => {
socketPath = next;
},
getClient: () => ({
setSocketPath: (next) => {
setClientSocketPath = next;
},
connect: () => {
connectCalls += 1;
},
}),
showOsd: () => {},
},
texthooker: {
service: {
isRunning: () => texthookerRunning,
start: (port) => {
texthookerRunning = true;
texthookerStartPort = port;
},
},
getPort: () => texthookerPort,
setPort: (port) => {
texthookerPort = port;
},
shouldOpenBrowser: () => true,
openInBrowser: () => {},
},
overlay: {
isInitialized: () => false,
initialize: () => {},
toggleVisible: () => {
overlayVisible = !overlayVisible;
},
toggleInvisible: () => {
overlayInvisible = !overlayInvisible;
},
setVisible: (visible) => {
overlayVisible = visible;
},
setInvisible: (visible) => {
overlayInvisible = visible;
},
},
mining: {
copyCurrentSubtitle: () => {},
startPendingMultiCopy: () => {},
mineSentenceCard: async () => {},
startPendingMineSentenceMultiple: () => {},
updateLastCardFromClipboard: async () => {},
triggerFieldGrouping: async () => {},
triggerSubsyncFromConfig: async () => {},
markLastCardAsAudioCard: async () => {},
},
ui: {
openYomitanSettings: () => {},
cycleSecondarySubMode: () => {},
openRuntimeOptionsPalette: () => {},
printHelp: () => {},
},
app: {
stop: () => {},
hasMainWindow: () => true,
},
getMultiCopyTimeoutMs: () => 2500,
schedule: (_fn, delayMs) => {
openYomitanAfterDelay = delayMs;
return null;
},
log: () => {},
warn: () => {},
error: () => {},
});
deps.setMpvSocketPath("/tmp/new");
deps.setMpvClientSocketPath("/tmp/new");
deps.connectMpvClient();
deps.ensureTexthookerRunning(9000);
deps.openYomitanSettingsDelayed(1000);
deps.toggleVisibleOverlay();
deps.toggleInvisibleOverlay();
assert.equal(deps.getMpvSocketPath(), "/tmp/new");
assert.equal(setClientSocketPath, "/tmp/new");
assert.equal(connectCalls, 1);
assert.equal(texthookerStartPort, 9000);
assert.equal(texthookerPort, 7000);
assert.equal(openYomitanAfterDelay, 1000);
assert.equal(overlayVisible, true);
assert.equal(overlayInvisible, true);
assert.equal(deps.getMultiCopyTimeoutMs(), 2500);
});