mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-07-29 19:21:33 -07:00
132 lines
3.7 KiB
TypeScript
132 lines
3.7 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { focusMacOSOverlayWindow } from './macos-overlay-window-focus';
|
|
|
|
function createOverlayWindowStub(
|
|
overrides: Partial<{
|
|
destroyed: boolean;
|
|
visible: boolean;
|
|
focused: boolean;
|
|
webContentsFocused: boolean;
|
|
}> = {},
|
|
calls: string[] = [],
|
|
) {
|
|
return {
|
|
isDestroyed: () => overrides.destroyed ?? false,
|
|
isVisible: () => overrides.visible ?? true,
|
|
isFocused: () => overrides.focused ?? false,
|
|
setFocusable: (focusable: boolean) => {
|
|
calls.push(`setFocusable:${focusable}`);
|
|
},
|
|
focus: () => {
|
|
calls.push('window.focus');
|
|
},
|
|
webContents: {
|
|
isFocused: () => overrides.webContentsFocused ?? false,
|
|
focus: () => {
|
|
calls.push('webContents.focus');
|
|
},
|
|
},
|
|
};
|
|
}
|
|
|
|
test('focusMacOSOverlayWindow activates the overlay window on macOS', () => {
|
|
const calls: string[] = [];
|
|
const overlayWindow = createOverlayWindowStub({}, calls);
|
|
|
|
focusMacOSOverlayWindow({
|
|
platform: 'darwin',
|
|
getOverlayWindow: () => overlayWindow,
|
|
stealAppFocus: () => calls.unshift('app.focus'),
|
|
warn: () => {},
|
|
});
|
|
|
|
assert.deepEqual(calls, ['app.focus', 'setFocusable:true', 'window.focus', 'webContents.focus']);
|
|
});
|
|
|
|
test('focusMacOSOverlayWindow skips re-focusing the web contents when already focused', () => {
|
|
const calls: string[] = [];
|
|
const overlayWindow = createOverlayWindowStub({ webContentsFocused: true }, calls);
|
|
|
|
focusMacOSOverlayWindow({
|
|
platform: 'darwin',
|
|
getOverlayWindow: () => overlayWindow,
|
|
stealAppFocus: () => calls.unshift('app.focus'),
|
|
warn: () => {},
|
|
});
|
|
|
|
assert.deepEqual(calls, ['app.focus', 'setFocusable:true', 'window.focus']);
|
|
});
|
|
|
|
test('focusMacOSOverlayWindow no-ops on non-macOS platforms', () => {
|
|
const calls: string[] = [];
|
|
|
|
focusMacOSOverlayWindow({
|
|
platform: 'win32',
|
|
getOverlayWindow: () => createOverlayWindowStub({}, calls),
|
|
stealAppFocus: () => calls.push('app.focus'),
|
|
warn: () => {},
|
|
});
|
|
|
|
assert.deepEqual(calls, []);
|
|
});
|
|
|
|
test('focusMacOSOverlayWindow no-ops when the overlay is already focused', () => {
|
|
const calls: string[] = [];
|
|
|
|
focusMacOSOverlayWindow({
|
|
platform: 'darwin',
|
|
getOverlayWindow: () => createOverlayWindowStub({ focused: true }, calls),
|
|
stealAppFocus: () => calls.push('app.focus'),
|
|
warn: () => {},
|
|
});
|
|
|
|
assert.deepEqual(calls, []);
|
|
});
|
|
|
|
test('focusMacOSOverlayWindow no-ops when the overlay is hidden, destroyed, or missing', () => {
|
|
const calls: string[] = [];
|
|
|
|
focusMacOSOverlayWindow({
|
|
platform: 'darwin',
|
|
getOverlayWindow: () => createOverlayWindowStub({ visible: false }, calls),
|
|
stealAppFocus: () => calls.push('app.focus'),
|
|
warn: () => {},
|
|
});
|
|
focusMacOSOverlayWindow({
|
|
platform: 'darwin',
|
|
getOverlayWindow: () => createOverlayWindowStub({ destroyed: true }, calls),
|
|
stealAppFocus: () => calls.push('app.focus'),
|
|
warn: () => {},
|
|
});
|
|
focusMacOSOverlayWindow({
|
|
platform: 'darwin',
|
|
getOverlayWindow: () => null,
|
|
stealAppFocus: () => calls.push('app.focus'),
|
|
warn: () => {},
|
|
});
|
|
|
|
assert.deepEqual(calls, []);
|
|
});
|
|
|
|
test('focusMacOSOverlayWindow still focuses the window when stealing app focus throws', () => {
|
|
const calls: string[] = [];
|
|
const overlayWindow = createOverlayWindowStub({}, calls);
|
|
|
|
focusMacOSOverlayWindow({
|
|
platform: 'darwin',
|
|
getOverlayWindow: () => overlayWindow,
|
|
stealAppFocus: () => {
|
|
throw new Error('steal failed');
|
|
},
|
|
warn: (message) => calls.push(`warn:${message}`),
|
|
});
|
|
|
|
assert.deepEqual(calls, [
|
|
'warn:Failed to steal app focus for overlay window',
|
|
'setFocusable:true',
|
|
'window.focus',
|
|
'webContents.focus',
|
|
]);
|
|
});
|