forked from mirrors/gecko-dev
162 lines
4.4 KiB
JavaScript
162 lines
4.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
// Check console.group, console.groupCollapsed and console.groupEnd calls
|
|
// behave as expected.
|
|
|
|
const TEST_URI =
|
|
"http://example.com/browser/devtools/client/webconsole/" +
|
|
"test/browser/test-console-group.html";
|
|
const {
|
|
INDENT_WIDTH,
|
|
} = require("resource://devtools/client/webconsole/components/Output/MessageIndent.js");
|
|
|
|
add_task(async function () {
|
|
const hud = await openNewTabAndConsole(TEST_URI);
|
|
const store = hud.ui.wrapper.getStore();
|
|
logAllStoreChanges(hud);
|
|
|
|
const onMessagesLogged = waitForMessageByType(hud, "log-6", ".console-api");
|
|
SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
|
|
content.wrappedJSObject.doLog();
|
|
});
|
|
await onMessagesLogged;
|
|
|
|
info("Test a group at root level");
|
|
let node = findConsoleAPIMessage(hud, "group-1");
|
|
testClass(node, "startGroup");
|
|
testIndent(node, 0);
|
|
await testGroupToggle({
|
|
node,
|
|
store,
|
|
shouldBeOpen: true,
|
|
visibleMessageIdsAfterExpand: ["1", "2", "3", "4", "6", "8", "9", "12"],
|
|
visibleMessageIdsAfterCollapse: ["1", "8", "9", "12"],
|
|
});
|
|
|
|
info("Test a message in a 1 level deep group");
|
|
node = findConsoleAPIMessage(hud, "log-1");
|
|
testClass(node, "log");
|
|
testIndent(node, 1);
|
|
|
|
info("Test a group in a 1 level deep group");
|
|
node = findConsoleAPIMessage(hud, "group-2");
|
|
testClass(node, "startGroup");
|
|
testIndent(node, 1);
|
|
await testGroupToggle({
|
|
node,
|
|
store,
|
|
shouldBeOpen: true,
|
|
visibleMessageIdsAfterExpand: ["1", "2", "3", "4", "6", "8", "9", "12"],
|
|
visibleMessageIdsAfterCollapse: ["1", "2", "3", "6", "8", "9", "12"],
|
|
});
|
|
|
|
info("Test a message in a 2 level deep group");
|
|
node = findConsoleAPIMessage(hud, "log-2");
|
|
testClass(node, "log");
|
|
testIndent(node, 2);
|
|
|
|
info(
|
|
"Test a message in a 1 level deep group, after closing a 2 level deep group"
|
|
);
|
|
node = findConsoleAPIMessage(hud, "log-3");
|
|
testClass(node, "log");
|
|
testIndent(node, 1);
|
|
|
|
info("Test a message at root level, after closing all the groups");
|
|
node = findConsoleAPIMessage(hud, "log-4");
|
|
testClass(node, "log");
|
|
testIndent(node, 0);
|
|
|
|
info("Test a collapsed group at root level");
|
|
node = findConsoleAPIMessage(hud, "group-3");
|
|
testClass(node, "startGroupCollapsed");
|
|
testIndent(node, 0);
|
|
await testGroupToggle({
|
|
node,
|
|
store,
|
|
shouldBeOpen: false,
|
|
visibleMessageIdsAfterExpand: [
|
|
"1",
|
|
"2",
|
|
"3",
|
|
"4",
|
|
"6",
|
|
"8",
|
|
"9",
|
|
"10",
|
|
"12",
|
|
],
|
|
visibleMessageIdsAfterCollapse: ["1", "2", "3", "4", "6", "8", "9", "12"],
|
|
});
|
|
|
|
info("Test a message at root level, after closing a collapsed group");
|
|
node = findConsoleAPIMessage(hud, "log-6");
|
|
testClass(node, "log");
|
|
testIndent(node, 0);
|
|
const nodes = hud.ui.outputNode.querySelectorAll(".message");
|
|
is(nodes.length, 8, "expected number of messages are displayed");
|
|
});
|
|
|
|
function testClass(node, className) {
|
|
ok(
|
|
node.classList.contains(className),
|
|
`message has the expected "${className}" class`
|
|
);
|
|
}
|
|
|
|
function testIndent(node, indent) {
|
|
if (indent == 0) {
|
|
is(
|
|
node.querySelector(".indent"),
|
|
null,
|
|
"message doesn't have any indentation"
|
|
);
|
|
return;
|
|
}
|
|
|
|
indent = `${indent * INDENT_WIDTH}px`;
|
|
is(
|
|
node.querySelector(".indent")?.style?.width,
|
|
indent,
|
|
"message has the expected level of indentation"
|
|
);
|
|
}
|
|
|
|
async function testGroupToggle({
|
|
node,
|
|
store,
|
|
shouldBeOpen,
|
|
visibleMessageIdsAfterExpand,
|
|
visibleMessageIdsAfterCollapse,
|
|
}) {
|
|
const toggleArrow = node.querySelector(".collapse-button");
|
|
const isOpen = node2 => node2.classList.contains("open");
|
|
const assertVisibleMessageIds = expanded => {
|
|
const visibleMessageIds = store.getState().messages.visibleMessages;
|
|
expanded
|
|
? is(
|
|
visibleMessageIds.toString(),
|
|
visibleMessageIdsAfterExpand.toString()
|
|
)
|
|
: is(
|
|
visibleMessageIds.toString(),
|
|
visibleMessageIdsAfterCollapse.toString()
|
|
);
|
|
};
|
|
|
|
await waitFor(() => isOpen(node) === shouldBeOpen);
|
|
assertVisibleMessageIds(shouldBeOpen);
|
|
|
|
toggleArrow.click();
|
|
shouldBeOpen = !shouldBeOpen;
|
|
await waitFor(() => isOpen(node) === shouldBeOpen);
|
|
assertVisibleMessageIds(shouldBeOpen);
|
|
|
|
toggleArrow.click();
|
|
shouldBeOpen = !shouldBeOpen;
|
|
await waitFor(() => isOpen(node) === shouldBeOpen);
|
|
assertVisibleMessageIds(shouldBeOpen);
|
|
}
|