mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-29 17:02:28 +00:00
39 lines
1.5 KiB
JavaScript
39 lines
1.5 KiB
JavaScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { JSDOM } from "jsdom";
|
|
|
|
import { createCardObserver } from "../../js/dom/cardObserver.js";
|
|
|
|
test("card observer disconnect unregisters every card and releases its observer", () => {
|
|
const dom = new JSDOM("<div id=grid><article class='card' data-video-id=a></article><article class='card' data-video-id=b></article></div>");
|
|
const originalHTMLElement = globalThis.HTMLElement;
|
|
const originalIntersectionObserver = globalThis.IntersectionObserver;
|
|
globalThis.HTMLElement = dom.window.HTMLElement;
|
|
let disconnects = 0;
|
|
globalThis.IntersectionObserver = class {
|
|
observe() {}
|
|
takeRecords() { return []; }
|
|
disconnect() { disconnects += 1; }
|
|
};
|
|
|
|
const unregistered = [];
|
|
try {
|
|
const observer = createCardObserver({
|
|
onCardUnregister: ({ card }) => unregistered.push(card.dataset.videoId),
|
|
});
|
|
const grid = dom.window.document.getElementById("grid");
|
|
observer.observe(grid);
|
|
observer.disconnect(grid);
|
|
|
|
assert.deepEqual(unregistered.sort(), ["a", "b"]);
|
|
assert.equal(disconnects, 1);
|
|
assert.equal(observer.getState(grid), null);
|
|
} finally {
|
|
dom.window.close();
|
|
if (originalHTMLElement === undefined) delete globalThis.HTMLElement;
|
|
else globalThis.HTMLElement = originalHTMLElement;
|
|
if (originalIntersectionObserver === undefined) delete globalThis.IntersectionObserver;
|
|
else globalThis.IntersectionObserver = originalIntersectionObserver;
|
|
}
|
|
});
|