diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser/browser_webconsole_object_inspector_nested_proxy.js')
-rw-r--r-- | devtools/client/webconsole/test/browser/browser_webconsole_object_inspector_nested_proxy.js | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser/browser_webconsole_object_inspector_nested_proxy.js b/devtools/client/webconsole/test/browser/browser_webconsole_object_inspector_nested_proxy.js new file mode 100644 index 0000000000..ee3f1501e9 --- /dev/null +++ b/devtools/client/webconsole/test/browser/browser_webconsole_object_inspector_nested_proxy.js @@ -0,0 +1,54 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Check evaluating and expanding getters in the console. +const TEST_URI = + "data:text/html;charset=utf8,<!DOCTYPE html>" + + "<h1>Object Inspector on deeply nested proxies</h1>"; + +add_task(async function () { + const hud = await openNewTabAndConsole(TEST_URI); + + await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () { + let proxy = new Proxy({}, {}); + for (let i = 0; i < 1e5; ++i) { + proxy = new Proxy(proxy, proxy); + } + content.wrappedJSObject.console.log("oi-test", proxy); + }); + + const node = await waitFor(() => findConsoleAPIMessage(hud, "oi-test")); + const oi = node.querySelector(".tree"); + const [proxyNode] = getObjectInspectorNodes(oi); + + expandObjectInspectorNode(proxyNode); + await waitFor(() => getObjectInspectorNodes(oi).length > 1); + checkChildren(proxyNode, [`<target>`, `<handler>`]); + + const targetNode = findObjectInspectorNode(oi, "<target>"); + expandObjectInspectorNode(targetNode); + await waitFor(() => !!getObjectInspectorChildrenNodes(targetNode).length); + checkChildren(targetNode, [`<target>`, `<handler>`]); + + const handlerNode = findObjectInspectorNode(oi, "<handler>"); + expandObjectInspectorNode(handlerNode); + await waitFor(() => !!getObjectInspectorChildrenNodes(handlerNode).length); + checkChildren(handlerNode, [`<target>`, `<handler>`]); +}); + +function checkChildren(node, expectedChildren) { + const children = getObjectInspectorChildrenNodes(node); + is( + children.length, + expectedChildren.length, + "There is the expected number of children" + ); + children.forEach((child, index) => { + ok( + child.textContent.includes(expectedChildren[index]), + `Expected "${expectedChildren[index]}" child` + ); + }); +} |