mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-05-26 00:55:16 -07:00
1bb7b26641
- Transport Linux AppImage CLI args through SUBMINER_APP_ARGC/ARG_* env vars instead of argv - Add --app-ping command to probe single-instance lock ownership (exit 0 = running, 1 = not) - Gate manual restart: poll app-ping until old app releases lock, then until new app owns it - Preserve user-paused playback when disarming the auto-play-ready gate on restart - Snapshot subtitles before connection side effects (sub-visibility hide) can suppress them - Reapply overlay bounds after first show for Hyprland compatibility
80 lines
2.4 KiB
TypeScript
80 lines
2.4 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { buildOverlayWindowOptions } from './overlay-window-options';
|
|
|
|
test('overlay window config explicitly disables renderer sandbox for preload compatibility', () => {
|
|
const options = buildOverlayWindowOptions('visible', {
|
|
isDev: false,
|
|
yomitanSession: null,
|
|
});
|
|
|
|
assert.equal(options.title, 'SubMiner Overlay');
|
|
assert.equal(options.backgroundColor, '#00000000');
|
|
assert.equal(options.webPreferences?.sandbox, false);
|
|
assert.equal(options.webPreferences?.backgroundThrottling, false);
|
|
});
|
|
|
|
test('Linux visible overlay window allows compositor resize for mpv-sized placement', () => {
|
|
const originalPlatformDescriptor = Object.getOwnPropertyDescriptor(process, 'platform');
|
|
|
|
Object.defineProperty(process, 'platform', {
|
|
configurable: true,
|
|
value: 'linux',
|
|
});
|
|
|
|
try {
|
|
const visibleOptions = buildOverlayWindowOptions('visible', {
|
|
isDev: false,
|
|
yomitanSession: null,
|
|
});
|
|
const modalOptions = buildOverlayWindowOptions('modal', {
|
|
isDev: false,
|
|
yomitanSession: null,
|
|
});
|
|
|
|
assert.equal(visibleOptions.resizable, true);
|
|
assert.equal(modalOptions.resizable, false);
|
|
} finally {
|
|
if (originalPlatformDescriptor) {
|
|
Object.defineProperty(process, 'platform', originalPlatformDescriptor);
|
|
}
|
|
}
|
|
});
|
|
|
|
test('Windows visible overlay window config does not start as always-on-top', () => {
|
|
const originalPlatformDescriptor = Object.getOwnPropertyDescriptor(process, 'platform');
|
|
|
|
Object.defineProperty(process, 'platform', {
|
|
configurable: true,
|
|
value: 'win32',
|
|
});
|
|
|
|
try {
|
|
const options = buildOverlayWindowOptions('visible', {
|
|
isDev: false,
|
|
yomitanSession: null,
|
|
});
|
|
|
|
assert.equal(options.alwaysOnTop, false);
|
|
} finally {
|
|
if (originalPlatformDescriptor) {
|
|
Object.defineProperty(process, 'platform', originalPlatformDescriptor);
|
|
}
|
|
}
|
|
});
|
|
|
|
test('overlay window config uses the provided Yomitan session when available', () => {
|
|
const yomitanSession = { id: 'session' } as never;
|
|
const withSession = buildOverlayWindowOptions('visible', {
|
|
isDev: false,
|
|
yomitanSession,
|
|
});
|
|
const withoutSession = buildOverlayWindowOptions('visible', {
|
|
isDev: false,
|
|
yomitanSession: null,
|
|
});
|
|
|
|
assert.equal(withSession.webPreferences?.session, yomitanSession);
|
|
assert.equal(withoutSession.webPreferences?.session, undefined);
|
|
});
|