mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-28 06:22:45 -08:00
refactor: extract overlay visibility facade deps runtime service
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import { createOverlayVisibilityFacadeDepsRuntimeService } from "./overlay-visibility-facade-deps-runtime-service";
|
||||
|
||||
test("createOverlayVisibilityFacadeDepsRuntimeService returns working deps object", () => {
|
||||
let visible = false;
|
||||
let invisible = true;
|
||||
let mpvSubVisible: boolean | null = null;
|
||||
let syncCalls = 0;
|
||||
|
||||
const deps = createOverlayVisibilityFacadeDepsRuntimeService({
|
||||
getVisibleOverlayVisible: () => visible,
|
||||
getInvisibleOverlayVisible: () => invisible,
|
||||
setVisibleOverlayVisibleState: (nextVisible) => {
|
||||
visible = nextVisible;
|
||||
},
|
||||
setInvisibleOverlayVisibleState: (nextVisible) => {
|
||||
invisible = nextVisible;
|
||||
},
|
||||
updateVisibleOverlayVisibility: () => {},
|
||||
updateInvisibleOverlayVisibility: () => {},
|
||||
syncInvisibleOverlayMousePassthrough: () => {
|
||||
syncCalls += 1;
|
||||
},
|
||||
shouldBindVisibleOverlayToMpvSubVisibility: () => true,
|
||||
isMpvConnected: () => true,
|
||||
setMpvSubVisibility: (nextVisible) => {
|
||||
mpvSubVisible = nextVisible;
|
||||
},
|
||||
});
|
||||
|
||||
assert.equal(deps.getVisibleOverlayVisible(), false);
|
||||
assert.equal(deps.getInvisibleOverlayVisible(), true);
|
||||
|
||||
deps.setVisibleOverlayVisibleState(true);
|
||||
deps.setInvisibleOverlayVisibleState(false);
|
||||
deps.syncInvisibleOverlayMousePassthrough();
|
||||
deps.setMpvSubVisibility(false);
|
||||
|
||||
assert.equal(visible, true);
|
||||
assert.equal(invisible, false);
|
||||
assert.equal(syncCalls, 1);
|
||||
assert.equal(mpvSubVisible, false);
|
||||
assert.equal(deps.shouldBindVisibleOverlayToMpvSubVisibility(), true);
|
||||
assert.equal(deps.isMpvConnected(), true);
|
||||
});
|
||||
@@ -0,0 +1,35 @@
|
||||
import {
|
||||
OverlayVisibilityFacadeDeps,
|
||||
} from "./overlay-visibility-facade-service";
|
||||
|
||||
export interface OverlayVisibilityFacadeDepsRuntimeOptions {
|
||||
getVisibleOverlayVisible: () => boolean;
|
||||
getInvisibleOverlayVisible: () => boolean;
|
||||
setVisibleOverlayVisibleState: (nextVisible: boolean) => void;
|
||||
setInvisibleOverlayVisibleState: (nextVisible: boolean) => void;
|
||||
updateVisibleOverlayVisibility: () => void;
|
||||
updateInvisibleOverlayVisibility: () => void;
|
||||
syncInvisibleOverlayMousePassthrough: () => void;
|
||||
shouldBindVisibleOverlayToMpvSubVisibility: () => boolean;
|
||||
isMpvConnected: () => boolean;
|
||||
setMpvSubVisibility: (mpvSubVisible: boolean) => void;
|
||||
}
|
||||
|
||||
export function createOverlayVisibilityFacadeDepsRuntimeService(
|
||||
options: OverlayVisibilityFacadeDepsRuntimeOptions,
|
||||
): OverlayVisibilityFacadeDeps {
|
||||
return {
|
||||
getVisibleOverlayVisible: options.getVisibleOverlayVisible,
|
||||
getInvisibleOverlayVisible: options.getInvisibleOverlayVisible,
|
||||
setVisibleOverlayVisibleState: options.setVisibleOverlayVisibleState,
|
||||
setInvisibleOverlayVisibleState: options.setInvisibleOverlayVisibleState,
|
||||
updateVisibleOverlayVisibility: options.updateVisibleOverlayVisibility,
|
||||
updateInvisibleOverlayVisibility: options.updateInvisibleOverlayVisibility,
|
||||
syncInvisibleOverlayMousePassthrough:
|
||||
options.syncInvisibleOverlayMousePassthrough,
|
||||
shouldBindVisibleOverlayToMpvSubVisibility:
|
||||
options.shouldBindVisibleOverlayToMpvSubVisibility,
|
||||
isMpvConnected: options.isMpvConnected,
|
||||
setMpvSubVisibility: options.setMpvSubVisibility,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user