Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* 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;
}