mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-09-12 17:16:20 -07:00
fix(anime): harden browser playback and modal lifecycle
- Abort upstream fetches when clients disconnect - Validate embedded modal readiness before opening - Centralize browser IPC and window lifecycle
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
import { IPC_CHANNELS } from '../../shared/ipc/contracts';
|
||||
import { registerAnimeBrowserIpcHandlers } from './anime-browser-ipc-handlers';
|
||||
|
||||
test('anime browser preference IPC coerces values at the renderer boundary', () => {
|
||||
const handlers = new Map<string, (event: unknown, ...args: unknown[]) => unknown>();
|
||||
const received: unknown[][] = [];
|
||||
registerAnimeBrowserIpcHandlers({
|
||||
ipcMain: {
|
||||
handle: (channel, listener) => handlers.set(channel, listener),
|
||||
},
|
||||
runtime: {
|
||||
setPreference: (...args: unknown[]) => received.push(args),
|
||||
} as never,
|
||||
});
|
||||
|
||||
const setPreference = handlers.get(IPC_CHANNELS.request.animeBrowserSetPreference);
|
||||
assert.ok(setPreference);
|
||||
setPreference({}, 'source', 'text', 'value');
|
||||
setPreference({}, 'source', 'enabled', true);
|
||||
setPreference({}, 'source', 'choices', ['one', 2, false, 'two']);
|
||||
setPreference({}, 'source', 'invalid', { nested: 'value' });
|
||||
|
||||
assert.deepEqual(received, [
|
||||
['source', 'text', 'value'],
|
||||
['source', 'enabled', true],
|
||||
['source', 'choices', ['one', 'two']],
|
||||
['source', 'invalid', ''],
|
||||
]);
|
||||
});
|
||||
Reference in New Issue
Block a user