fune/remote/shared/webdriver/test/xpcshell/test_NodeCache.js
Stanca Serban 30b2ff14b6 Backed out 6 changesets (bug 1811545, bug 1808894) for landing with leftover files from a puppeteer install (under remote/test/puppeteer/packages/puppeteer-core/). CLOSED TREE
Backed out changeset 7f0a872abb09 (bug 1811545)
Backed out changeset 41daafb5d75a (bug 1811545)
Backed out changeset 82dee6290057 (bug 1811545)
Backed out changeset 3e0178b3e0dc (bug 1811545)
Backed out changeset 55cec0043044 (bug 1811545)
Backed out changeset 75eaaf96d039 (bug 1808894)
2023-01-27 04:37:23 +02:00

210 lines
6.1 KiB
JavaScript

const { NodeCache } = ChromeUtils.importESModule(
"chrome://remote/content/shared/webdriver/NodeCache.sys.mjs"
);
function setupTest() {
const browser = Services.appShell.createWindowlessBrowser(false);
const nodeCache = new NodeCache();
const htmlEl = browser.document.createElement("video");
htmlEl.setAttribute("id", "foo");
browser.document.body.appendChild(htmlEl);
const svgEl = browser.document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
browser.document.body.appendChild(svgEl);
const shadowRoot = htmlEl.openOrClosedShadowRoot;
const iframeEl = browser.document.createElement("iframe");
browser.document.body.appendChild(iframeEl);
const childEl = iframeEl.contentDocument.createElement("div");
return { browser, nodeCache, childEl, iframeEl, htmlEl, shadowRoot, svgEl };
}
add_test(function getOrCreateNodeReference_invalid() {
const { htmlEl, nodeCache } = setupTest();
const invalidValues = [
null,
undefined,
"foo",
42,
true,
[],
{},
htmlEl.attributes[0],
];
for (const value of invalidValues) {
info(`Testing value: ${value}`);
Assert.throws(() => nodeCache.getOrCreateNodeReference(value), /TypeError/);
}
run_next_test();
});
add_test(function getOrCreateNodeReference_supportedNodeTypes() {
const { htmlEl, nodeCache, shadowRoot } = setupTest();
const htmlElRef = nodeCache.getOrCreateNodeReference(htmlEl);
equal(nodeCache.size, 1);
const shadowRootRef = nodeCache.getOrCreateNodeReference(shadowRoot);
equal(nodeCache.size, 2);
notEqual(htmlElRef, shadowRootRef);
run_next_test();
});
add_test(function getOrCreateNodeReference_referenceAlreadyCreated() {
const { htmlEl, nodeCache } = setupTest();
const htmlElRef = nodeCache.getOrCreateNodeReference(htmlEl);
const htmlElRefOther = nodeCache.getOrCreateNodeReference(htmlEl);
equal(nodeCache.size, 1);
equal(htmlElRefOther, htmlElRef);
run_next_test();
});
add_test(function getOrCreateNodeReference_differentReferencePerNodeCache() {
const { browser, htmlEl, nodeCache } = setupTest();
const nodeCache2 = new NodeCache();
const htmlElRef1 = nodeCache.getOrCreateNodeReference(htmlEl);
const htmlElRef2 = nodeCache2.getOrCreateNodeReference(htmlEl);
notEqual(htmlElRef1, htmlElRef2);
equal(
nodeCache.getNode(browser.browsingContext, htmlElRef1),
nodeCache2.getNode(browser.browsingContext, htmlElRef2)
);
equal(nodeCache.getNode(browser.browsingContext, htmlElRef2), null);
run_next_test();
});
add_test(function clear() {
const { browser, htmlEl, nodeCache, svgEl } = setupTest();
nodeCache.getOrCreateNodeReference(htmlEl);
nodeCache.getOrCreateNodeReference(svgEl);
equal(nodeCache.size, 2);
// Clear requires explicit arguments.
Assert.throws(() => nodeCache.clear(), /Error/);
// Clear references for a different browsing context
const browser2 = Services.appShell.createWindowlessBrowser(false);
const imgEl = browser2.document.createElement("img");
const imgElRef = nodeCache.getOrCreateNodeReference(imgEl);
equal(nodeCache.size, 3);
nodeCache.clear({ browsingContext: browser.browsingContext });
equal(nodeCache.size, 1);
equal(nodeCache.getNode(browser2.browsingContext, imgElRef), imgEl);
// Clear all references
nodeCache.getOrCreateNodeReference(htmlEl);
equal(nodeCache.size, 2);
nodeCache.clear({ all: true });
equal(nodeCache.size, 0);
run_next_test();
});
add_test(function getNode_multiple_nodes() {
const { browser, htmlEl, nodeCache, svgEl } = setupTest();
const htmlElRef = nodeCache.getOrCreateNodeReference(htmlEl);
const svgElRef = nodeCache.getOrCreateNodeReference(svgEl);
equal(nodeCache.getNode(browser.browsingContext, svgElRef), svgEl);
equal(nodeCache.getNode(browser.browsingContext, htmlElRef), htmlEl);
run_next_test();
});
add_test(function getNode_differentBrowsingContextInSameGroup() {
const { iframeEl, htmlEl, nodeCache } = setupTest();
const htmlElRef = nodeCache.getOrCreateNodeReference(htmlEl);
equal(nodeCache.size, 1);
equal(
nodeCache.getNode(iframeEl.contentWindow.browsingContext, htmlElRef),
htmlEl
);
run_next_test();
});
add_test(function getNode_differentBrowsingContextInOtherGroup() {
const { htmlEl, nodeCache } = setupTest();
const htmlElRef = nodeCache.getOrCreateNodeReference(htmlEl);
equal(nodeCache.size, 1);
const browser2 = Services.appShell.createWindowlessBrowser(false);
equal(nodeCache.getNode(browser2.browsingContext, htmlElRef), null);
run_next_test();
});
add_test(async function getNode_nodeDeleted() {
const { browser, nodeCache } = setupTest();
let el = browser.document.createElement("div");
const elRef = nodeCache.getOrCreateNodeReference(el);
// Delete element and force a garbage collection
el = null;
await doGC();
equal(nodeCache.getNode(browser.browsingContext, elRef), null);
run_next_test();
});
add_test(function getNodeDetails_forTopBrowsingContext() {
const { browser, htmlEl, nodeCache } = setupTest();
const htmlElRef = nodeCache.getOrCreateNodeReference(htmlEl);
const nodeDetails = nodeCache.getReferenceDetails(htmlElRef);
equal(nodeDetails.browserId, browser.browsingContext.browserId);
equal(nodeDetails.browsingContextGroupId, browser.browsingContext.group.id);
equal(nodeDetails.browsingContextId, browser.browsingContext.id);
ok(nodeDetails.isTopBrowsingContext);
ok(nodeDetails.nodeWeakRef);
equal(nodeDetails.nodeWeakRef.get(), htmlEl);
run_next_test();
});
add_test(async function getNodeDetails_forChildBrowsingContext() {
const { browser, iframeEl, childEl, nodeCache } = setupTest();
const childElRef = nodeCache.getOrCreateNodeReference(childEl);
const nodeDetails = nodeCache.getReferenceDetails(childElRef);
equal(nodeDetails.browserId, browser.browsingContext.browserId);
equal(nodeDetails.browsingContextGroupId, browser.browsingContext.group.id);
equal(
nodeDetails.browsingContextId,
iframeEl.contentWindow.browsingContext.id
);
ok(!nodeDetails.isTopBrowsingContext);
ok(nodeDetails.nodeWeakRef);
equal(nodeDetails.nodeWeakRef.get(), childEl);
run_next_test();
});