Bug 1429803 - Fix test; r=ochameau draft
authorJan Odvarko <odvarko@gmail.com>
Wed, 14 Feb 2018 18:41:36 +0100
changeset 754941 87e34e4bb8cd74dec847b06adc5edae744854bb1
parent 754927 17f27d2768d077564efbd092dfe3dce046fc28cb
push id99065
push userjodvarko@mozilla.com
push dateWed, 14 Feb 2018 17:43:40 +0000
reviewersochameau
bugs1429803
milestone60.0a1
Bug 1429803 - Fix test; r=ochameau MozReview-Commit-ID: 5O2N7xsMzyh
devtools/client/netmonitor/test/browser_net_columns_showhide.js
--- a/devtools/client/netmonitor/test/browser_net_columns_showhide.js
+++ b/devtools/client/netmonitor/test/browser_net_columns_showhide.js
@@ -1,27 +1,37 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test showing/hiding columns.
  */
-
 add_task(async function () {
   let { monitor, tab } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
-  let { document, store, parent } = monitor.panelWin;
+  let { document, store, parent, connector, windowRequire } = monitor.panelWin;
+  let { requestData } = connector;
+  let {
+    getSortedRequests,
+  } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.loadURI(SIMPLE_URL);
   await wait;
 
+  let item = getSortedRequests(store.getState()).get(0);
+  ok(item.responseHeadersAvailable, "headers are available for lazily fetching");
+
+  if (item.responseHeadersAvailable && !item.responseHeaders) {
+    await requestData(item.id, "responseHeaders");
+  }
+
   let requestsContainer = document.querySelector(".requests-list-contents");
   ok(requestsContainer, "Container element exists as expected.");
   let headers = document.querySelector(".requests-list-headers");
 
   let columns = store.getState().ui.columns;
   for (let column in columns) {
     if (columns[column]) {
       await testVisibleColumnContextMenuItem(column, document, parent);
@@ -48,66 +58,73 @@ add_task(async function () {
 async function testWhiteSpaceContextMenuItem(column, document, parent) {
   ok(!document.querySelector(`#requests-list-${column}-button`),
      `Column ${column} should be hidden`);
 
   info(`Right clicking on white-space in the header to get the context menu`);
   EventUtils.sendMouseEvent({ type: "contextmenu" },
     document.querySelector(".devtools-toolbar.requests-list-headers"));
 
+  // Wait for next tick to do stuff async and force repaint.
+  await waitForTick();
   await toggleAndCheckColumnVisibility(column, document, parent);
 }
 
 async function testVisibleColumnContextMenuItem(column, document, parent) {
   ok(document.querySelector(`#requests-list-${column}-button`),
      `Column ${column} should be visible`);
 
   info(`Clicking context-menu item for ${column}`);
   EventUtils.sendMouseEvent({ type: "contextmenu" },
     document.querySelector("#requests-list-status-button") ||
     document.querySelector("#requests-list-waterfall-button"));
 
+  await waitForTick();
+
   let menuItem = parent.document.querySelector(`#request-list-header-${column}-toggle`);
 
   is(menuItem.getAttribute("type"), "checkbox",
      `${column} menu item should have type="checkbox" attribute`);
   is(menuItem.getAttribute("checked"), "true",
      `checked state of ${column} menu item should be correct`);
   ok(!menuItem.disabled, `disabled state of ${column} menu item should be correct`);
 
   let onHeaderRemoved = waitForDOM(document, `#requests-list-${column}-button`, 0);
   menuItem.click();
 
   await onHeaderRemoved;
+  await waitForTick();
 
   ok(!document.querySelector(`#requests-list-${column}-button`),
      `Column ${column} should be hidden`);
 }
 
 async function testHiddenColumnContextMenuItem(column, document, parent) {
   ok(!document.querySelector(`#requests-list-${column}-button`),
      `Column ${column} should be hidden`);
 
   info(`Clicking context-menu item for ${column}`);
   EventUtils.sendMouseEvent({ type: "contextmenu" },
     document.querySelector("#requests-list-status-button") ||
     document.querySelector("#requests-list-waterfall-button"));
 
+  await waitForTick();
   await toggleAndCheckColumnVisibility(column, document, parent);
 }
 
 async function toggleAndCheckColumnVisibility(column, document, parent) {
   let menuItem = parent.document.querySelector(`#request-list-header-${column}-toggle`);
 
   is(menuItem.getAttribute("type"), "checkbox",
      `${column} menu item should have type="checkbox" attribute`);
   ok(!menuItem.getAttribute("checked"),
      `checked state of ${column} menu item should be correct`);
   ok(!menuItem.disabled, `disabled state of ${column} menu item should be correct`);
 
   let onHeaderAdded = waitForDOM(document, `#requests-list-${column}-button`, 1);
   menuItem.click();
 
   await onHeaderAdded;
+  await waitForTick();
 
   ok(document.querySelector(`#requests-list-${column}-button`),
      `Column ${column} should be visible`);
 }