diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser/browser_webconsole_sidebar_object_expand_when_message_pruned.js')
-rw-r--r-- | devtools/client/webconsole/test/browser/browser_webconsole_sidebar_object_expand_when_message_pruned.js | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser/browser_webconsole_sidebar_object_expand_when_message_pruned.js b/devtools/client/webconsole/test/browser/browser_webconsole_sidebar_object_expand_when_message_pruned.js new file mode 100644 index 0000000000..65aa428b5d --- /dev/null +++ b/devtools/client/webconsole/test/browser/browser_webconsole_sidebar_object_expand_when_message_pruned.js @@ -0,0 +1,85 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// Test that an object in the sidebar can still be expanded after the message where it was +// logged is pruned. + +"use strict"; + +const TEST_URI = + "data:text/html;charset=utf8,<!DOCTYPE html>" + + "<script>console.log({a:1,b:2,c:[3,4,5]});</script>"; + +add_task(async function () { + // Should be removed when sidebar work is complete (Bug 1447235) + await pushPref("devtools.webconsole.sidebarToggle", true); + // Set the loglimit to 1 so message gets pruned as soon as another message is displayed. + await pushPref("devtools.hud.loglimit", 1); + + const hud = await openNewTabAndConsole(TEST_URI); + + const message = await waitFor(() => findConsoleAPIMessage(hud, "Object")); + const object = message.querySelector(".object-inspector .objectBox-object"); + + const sidebar = await showSidebarWithContextMenu(hud, object, true); + + const oi = sidebar.querySelector(".object-inspector"); + let oiNodes = oi.querySelectorAll(".node"); + if (oiNodes.length === 1) { + // If this is the case, we wait for the properties to be fetched and displayed. + await waitFor(() => oi.querySelectorAll(".node").length > 1); + oiNodes = oi.querySelectorAll(".node"); + } + + info("Log a message so the original one gets pruned"); + const messageText = "hello world"; + const onMessage = waitForMessageByType(hud, messageText, ".console-api"); + SpecialPowers.spawn( + gBrowser.selectedBrowser, + [messageText], + async function (str) { + content.console.log(str); + } + ); + await onMessage; + + ok(!findConsoleAPIMessage(hud, "Object"), "Message with object was pruned"); + + info("Expand the 'c' node in the sidebar"); + // Here's what the object in the sidebar looks like: + // ▼ {…} + // a: 1 + // b: 2 + // ▶︎ c: (3) […] + // ▶︎ <prototype>: {…} + const cNode = oiNodes[3]; + const onNodeExpanded = waitFor(() => oi.querySelectorAll(".node").length > 5); + cNode.click(); + await onNodeExpanded; + + // Here's what the object in the sidebar should look like: + // ▼ {…} + // a: 1 + // b: 2 + // ▼ c: (3) […] + // 0: 3 + // 1: 4 + // 2: 5 + // length: 3 + // ▶︎ <prototype>: [] + // ▶︎ <prototype>: {…} + is(oi.querySelectorAll(".node").length, 10, "The 'c' property was expanded"); +}); + +async function showSidebarWithContextMenu(hud, node) { + const appNode = hud.ui.document.querySelector(".webconsole-app"); + const onSidebarShown = waitFor(() => appNode.querySelector(".sidebar")); + + const contextMenu = await openContextMenu(hud, node); + const openInSidebar = contextMenu.querySelector("#console-menu-open-sidebar"); + openInSidebar.click(); + await onSidebarShown; + await hideContextMenu(hud); + return onSidebarShown; +} |