Bug 1427006 - Enhanced the browser_webconsole_console_group test; r=nchevobbe draft
authorabhinav <abhinav.koppula@gmail.com>
Fri, 15 Dec 2017 00:39:34 +0530
changeset 720952 c9bc62bfe98166f3907143099a7a58a42dfc03ff
parent 720551 d1b820065830a3e44711ead07c0b47babdc53cf1
child 746202 73c76c3ac88468fa65453772984741457fd89df7
push id95698
push userbmo:abhinav.koppula@gmail.com
push dateTue, 16 Jan 2018 15:53:12 +0000
reviewersnchevobbe
bugs1427006
milestone59.0a1
Bug 1427006 - Enhanced the browser_webconsole_console_group test; r=nchevobbe MozReview-Commit-ID: Efe5xb8sq7C
devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_console_group.js
--- 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
@@ -26,63 +26,116 @@ add_task(async function () {
           parameters: message.parameters,
           messageText: message.messageText
         });
         return res;
       }, []);
     info("messages : " + JSON.stringify(messages));
   });
 
+  const onMessagesLogged = waitForMessage(hud, "log-6");
   ContentTask.spawn(gBrowser.selectedBrowser, null, function () {
     content.wrappedJSObject.doLog();
   });
+  await onMessagesLogged;
 
   info("Test a group at root level");
-  let node = await waitFor(() => findMessage(hud, "group-1"));
+  let node = findMessage(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 = await waitFor(() => findMessage(hud, "log-1"), undefined, 200);
+  node = findMessage(hud, "log-1");
   testClass(node, "log");
   testIndent(node, 1);
 
   info("Test a group in a 1 level deep group");
-  node = await waitFor(() => findMessage(hud, "group-2"));
+  node = findMessage(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 = await waitFor(() => findMessage(hud, "log-2"));
+  node = 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"));
+  node = findMessage(hud, "log-3");
   testClass(node, "log");
   testIndent(node, 1);
 
   info("Test a message at root level, after closing all the groups");
-  node = await waitFor(() => findMessage(hud, "log-4"));
+  node = 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"));
+  node = findMessage(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 = await waitFor(() => findMessage(hud, "log-6"));
+  node = 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");
 });
 
 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");
 }
+
+async 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());
+  }
+
+  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);
+}
\ No newline at end of file