mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-04-12 04:19:25 -07:00
Improve startup dictionary progress and fix overlay/plugin input handlin
- show a dedicated startup OSD "building" phase for character dictionary sync - forward bare `Tab` from visible overlay to mpv so AniSkip works while focused - fix Windows plugin env override resolution for `SUBMINER_BINARY_PATH`
This commit is contained in:
84
src/core/services/overlay-window.test.ts
Normal file
84
src/core/services/overlay-window.test.ts
Normal file
@@ -0,0 +1,84 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
import {
|
||||
handleOverlayWindowBeforeInputEvent,
|
||||
isTabInputForMpvForwarding,
|
||||
} from './overlay-window-input';
|
||||
|
||||
test('isTabInputForMpvForwarding matches bare Tab keydown only', () => {
|
||||
assert.equal(
|
||||
isTabInputForMpvForwarding({
|
||||
type: 'keyDown',
|
||||
key: 'Tab',
|
||||
code: 'Tab',
|
||||
} as Electron.Input),
|
||||
true,
|
||||
);
|
||||
assert.equal(
|
||||
isTabInputForMpvForwarding({
|
||||
type: 'keyDown',
|
||||
key: 'Tab',
|
||||
code: 'Tab',
|
||||
shift: true,
|
||||
} as Electron.Input),
|
||||
false,
|
||||
);
|
||||
assert.equal(
|
||||
isTabInputForMpvForwarding({
|
||||
type: 'keyUp',
|
||||
key: 'Tab',
|
||||
code: 'Tab',
|
||||
} as Electron.Input),
|
||||
false,
|
||||
);
|
||||
});
|
||||
|
||||
test('handleOverlayWindowBeforeInputEvent forwards Tab to mpv for visible overlays', () => {
|
||||
const calls: string[] = [];
|
||||
|
||||
const handled = handleOverlayWindowBeforeInputEvent({
|
||||
kind: 'visible',
|
||||
windowVisible: true,
|
||||
input: {
|
||||
type: 'keyDown',
|
||||
key: 'Tab',
|
||||
code: 'Tab',
|
||||
} as Electron.Input,
|
||||
preventDefault: () => calls.push('prevent-default'),
|
||||
sendKeyboardModeToggleRequested: () => calls.push('keyboard-mode'),
|
||||
sendLookupWindowToggleRequested: () => calls.push('lookup-toggle'),
|
||||
tryHandleOverlayShortcutLocalFallback: () => {
|
||||
calls.push('fallback');
|
||||
return false;
|
||||
},
|
||||
forwardTabToMpv: () => calls.push('forward-tab'),
|
||||
});
|
||||
|
||||
assert.equal(handled, true);
|
||||
assert.deepEqual(calls, ['prevent-default', 'forward-tab']);
|
||||
});
|
||||
|
||||
test('handleOverlayWindowBeforeInputEvent leaves modal Tab handling alone', () => {
|
||||
const calls: string[] = [];
|
||||
|
||||
const handled = handleOverlayWindowBeforeInputEvent({
|
||||
kind: 'modal',
|
||||
windowVisible: true,
|
||||
input: {
|
||||
type: 'keyDown',
|
||||
key: 'Tab',
|
||||
code: 'Tab',
|
||||
} as Electron.Input,
|
||||
preventDefault: () => calls.push('prevent-default'),
|
||||
sendKeyboardModeToggleRequested: () => calls.push('keyboard-mode'),
|
||||
sendLookupWindowToggleRequested: () => calls.push('lookup-toggle'),
|
||||
tryHandleOverlayShortcutLocalFallback: () => {
|
||||
calls.push('fallback');
|
||||
return false;
|
||||
},
|
||||
forwardTabToMpv: () => calls.push('forward-tab'),
|
||||
});
|
||||
|
||||
assert.equal(handled, false);
|
||||
assert.deepEqual(calls, []);
|
||||
});
|
||||
Reference in New Issue
Block a user