voice-over-translation/tests/fullscreen-helper.test.ts
Toil 647bab14cf
Some checks failed
Build / node (22.x) (push) Has been cancelled
Build / extension (22.x) (push) Has been cancelled
Build / bun (push) Has been cancelled
Release / Build Release (push) Has been cancelled
Release / create_release (push) Has been cancelled
test: fix broken script path
2026-07-20 01:20:05 +03:00

53 lines
1.7 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { FullscreenHelper } from "../src/core/fullscreenHelper.ts";
function createListenerTarget() {
const listeners = new Map<string, Set<EventListener>>();
return {
addEventListener(type: string, listener: EventListener) {
const typeListeners = listeners.get(type) ?? new Set<EventListener>();
typeListeners.add(listener);
listeners.set(type, typeListeners);
},
removeEventListener(type: string, listener: EventListener) {
listeners.get(type)?.delete(listener);
},
listenerCount() {
return [...listeners.values()].reduce(
(sum, typeListeners) => sum + typeListeners.size,
0,
);
},
};
}
describe("FullscreenHelper", () => {
test("removes the same native listeners that it added", () => {
const previousDocument = globalThis.document;
const documentTarget = createListenerTarget();
const videoTarget = createListenerTarget();
try {
(globalThis as unknown as { document: unknown }).document =
documentTarget;
const helper = new FullscreenHelper({
container: {} as HTMLElement,
video: videoTarget as unknown as HTMLVideoElement,
});
const listener = () => {};
helper.addFullscreenChangeListener(listener);
expect(documentTarget.listenerCount()).toBe(2);
expect(videoTarget.listenerCount()).toBe(2);
helper.removeFullscreenChangeListener(listener);
expect(documentTarget.listenerCount()).toBe(0);
expect(videoTarget.listenerCount()).toBe(0);
} finally {
(globalThis as unknown as { document: unknown }).document =
previousDocument;
}
});
});