Files
openswarm/frontend/src/shared/browserRegistryLazy.test.ts
T

77 lines
2.6 KiB
TypeScript

// Run: node --test frontend/src/shared/browserRegistryLazy.test.ts
import { test } from 'node:test';
import assert from 'node:assert/strict';
import {
registerWebview,
unregisterWebview,
registerPendingLoad,
isPendingLoad,
wakePendingLoad,
clearPendingLoad,
findWebviewByDomain,
type BrowserWebview,
} from './browserRegistry.ts';
// Minimal fake webview: the registry only calls addEventListener (load tracking) + getURL.
function fakeWebview(url: string): BrowserWebview {
return {
getURL: () => url,
addEventListener: () => {},
removeEventListener: () => {},
} as unknown as BrowserWebview;
}
test('a lazy tab is resolvable by its INTENDED url while deferred, then wakes exactly once', () => {
const wv = fakeWebview('about:blank');
registerWebview('b1', 't1', wv);
let loaded = 0;
registerPendingLoad(wv, 'https://tiktok.com/@me', () => { loaded += 1; });
assert.equal(isPendingLoad(wv), true);
// about:blank live url can't match, but the intended-url fallback finds it for the session-borrow shims.
assert.equal(findWebviewByDomain('tiktok.com'), wv);
assert.equal(wakePendingLoad(wv), true);
assert.equal(loaded, 1);
// Second wake is a no-op (already loaded), so an agent re-touching the tab can't double-load it.
assert.equal(wakePendingLoad(wv), false);
assert.equal(loaded, 1);
assert.equal(isPendingLoad(wv), false);
unregisterWebview('b1', 't1');
});
test('clearPendingLoad drops the deferred load without firing it (navigate replaces the url)', () => {
const wv = fakeWebview('about:blank');
registerWebview('b2', 't2', wv);
let loaded = 0;
registerPendingLoad(wv, 'https://old.example.com', () => { loaded += 1; });
clearPendingLoad(wv);
assert.equal(isPendingLoad(wv), false);
assert.equal(wakePendingLoad(wv), false);
assert.equal(loaded, 0);
unregisterWebview('b2', 't2');
});
test('a live-url tab still matches by its real url (unchanged path)', () => {
const wv = fakeWebview('https://youtube.com/watch?v=x');
registerWebview('b3', 't3', wv);
assert.equal(findWebviewByDomain('youtube.com'), wv);
assert.equal(isPendingLoad(wv), false);
unregisterWebview('b3', 't3');
});
test('a live tab wins over a deferred tab for the same domain', () => {
const live = fakeWebview('https://reddit.com/r/x');
const lazy = fakeWebview('about:blank');
registerWebview('b4', 'live', live);
registerWebview('b4', 'lazy', lazy);
registerPendingLoad(lazy, 'https://reddit.com/r/y', () => {});
// The already-loaded tab is preferred; the deferred one is only a fallback.
assert.equal(findWebviewByDomain('reddit.com'), live);
unregisterWebview('b4', 'live');
unregisterWebview('b4', 'lazy');
});