--- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_console_group.js
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_console_group.js
@@ -34,26 +34,40 @@ add_task(async function () {
ContentTask.spawn(gBrowser.selectedBrowser, null, function () {
content.wrappedJSObject.doLog();
});
info("Test a group at root level");
let node = await waitFor(() => findMessage(hud, "group-1"));
testClass(node, "startGroup");
testIndent(node, 0);
+ 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 = await waitFor(() => findMessage(hud, "log-1"), undefined, 200);
testClass(node, "log");
testIndent(node, 1);
info("Test a group in a 1 level deep group");
node = await waitFor(() => findMessage(hud, "group-2"));
testClass(node, "startGroup");
testIndent(node, 1);
+ 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 = await waitFor(() => findMessage(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 = await waitFor(() => findMessage(hud, "log-3"));
@@ -64,16 +78,24 @@ add_task(async function () {
node = await waitFor(() => findMessage(hud, "log-4"));
testClass(node, "log");
testIndent(node, 0);
info("Test a collapsed group at root level");
node = await waitFor(() => findMessage(hud, "group-3"));
testClass(node, "startGroupCollapsed");
testIndent(node, 0);
+ 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 = await waitFor(() => findMessage(hud, "log-6"));
testClass(node, "log");
testIndent(node, 0);
let nodes = hud.ui.outputNode.querySelectorAll(".message");
is(nodes.length, 8, "expected number of messages are displayed");
});
@@ -81,8 +103,32 @@ function testClass(node, className) {
ok(node.classList.contains(className), `message has the expected "${className}" class`);
}
function testIndent(node, indent) {
indent = `${indent * INDENT_WIDTH}px`;
is(node.querySelector(".indent").style.width, indent,
"message has the expected level of indentation");
}
+
+function testGroupToggle({ node, store, shouldBeOpen,
+ visibleMessageIdsAfterExpand, visibleMessageIdsAfterCollapse }) {
+ let toggleArrow = node.querySelector(".theme-twisty");
+ const isOpen = node => node.classList.contains("open");
+ const assertVisibleMessageIds = (expanded) => {
+ let visibleMessageIds = store.getState().messages.visibleMessages;
+ expanded ? is(visibleMessageIds.toString(), visibleMessageIdsAfterExpand.toString()) :
+ is(visibleMessageIds.toString(), visibleMessageIdsAfterCollapse.toString());
+ }
+
+ is(isOpen(node), shouldBeOpen);
+ assertVisibleMessageIds(shouldBeOpen);
+
+ toggleArrow.click();
+ shouldBeOpen = !shouldBeOpen;
+ is(isOpen(node), shouldBeOpen);
+ assertVisibleMessageIds(shouldBeOpen);
+
+ toggleArrow.click();
+ shouldBeOpen = !shouldBeOpen;
+ is(isOpen(node), shouldBeOpen);
+ assertVisibleMessageIds(shouldBeOpen);
+}
\ No newline at end of file