Bug 1403927 - Test for HTTPi Params panel; r=nchevobbe draft
authorJan Odvarko <odvarko@gmail.com>
Thu, 19 Oct 2017 14:53:23 +0200
changeset 683248 de3a5e16f136d42bfc1197c64c12fc50608bb9b0
parent 683247 87d364ab98dca9ffb275fa979050e062a00daf65
child 736580 9387270a8ea18bc8dfc34c20e4485fba143a6ef4
push id85305
push userjodvarko@mozilla.com
push dateThu, 19 Oct 2017 12:54:21 +0000
reviewersnchevobbe
bugs1403927
milestone58.0a1
Bug 1403927 - Test for HTTPi Params panel; r=nchevobbe MozReview-Commit-ID: 1DzpCgxlrQg
devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_network_messages_expand.js
--- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_network_messages_expand.js
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_network_messages_expand.js
@@ -1,45 +1,49 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
-const TEST_URI = "data:text/html;charset=utf8,Test that clicking on a network message " +
-                 "in the console toggles the HTTP inspection.";
-
 const TEST_FILE = "test-network-request.html";
 const TEST_PATH = "http://example.com/browser/devtools/client/webconsole/new-console-output/test/mochitest/";
+const TEST_URI = TEST_PATH + TEST_FILE;
 
 const NET_PREF = "devtools.webconsole.filter.net";
 const XHR_PREF = "devtools.webconsole.filter.netxhr";
 
-Services.prefs.setBoolPref(NET_PREF, true);
+Services.prefs.setBoolPref(NET_PREF, false);
 Services.prefs.setBoolPref(XHR_PREF, true);
 registerCleanupFunction(() => {
   Services.prefs.clearUserPref(NET_PREF);
   Services.prefs.clearUserPref(XHR_PREF);
 });
 
 add_task(async function task() {
   const hud = await openNewTabAndConsole(TEST_URI);
 
   const currentTab = gBrowser.selectedTab;
   let target = TargetFactory.forTab(currentTab);
   let toolbox = gDevTools.getToolbox(target);
 
-  const documentUrl = TEST_PATH + TEST_FILE;
-  await loadDocument(documentUrl);
-  info("Document loaded.");
+  // Fire an XHR POST request.
+  await ContentTask.spawn(gBrowser.selectedBrowser, null, function () {
+    content.wrappedJSObject.testXhrPost();
+  });
 
-  let messageNode = await waitFor(() => findMessage(hud, documentUrl));
+  info("XHR executed");
+
+  await waitForRequestUpdates(toolbox);
+
+  let xhrUrl = TEST_PATH + "test-data.json";
+  let messageNode = await waitFor(() => findMessage(hud, xhrUrl));
   let urlNode = messageNode.querySelector(".url");
   info("Network message found.");
 
-  let updates = waitForNetworkUpdates(toolbox);
+  let updates = waitForPayloadReady(toolbox);
 
   // Expand network log
   urlNode.click();
 
   await updates;
   await testNetworkMessage(messageNode);
 });
 
@@ -56,44 +60,61 @@ async function testNetworkMessage(messag
   ok(responseTab, "Response tab is available");
   ok(timingsTab, "Timings tab is available");
 
   // Headers tab should be selected by default, so just check its content.
   let headersContent = messageNode.querySelector(
     "#headers-panel .headers-overview");
   ok(headersContent, "Headers content is available");
 
+  // Select Params tab and check the content. CodeMirror initialization
+  // is delayed to prevent UI freeze, so wait for a little while.
+  paramsTab.click();
+  let paramsPanel = messageNode.querySelector("#params-panel");
+  await waitForSourceEditor(paramsPanel);
+  let paramsContent = messageNode.querySelector(
+    "#params-panel .panel-container .CodeMirror");
+  ok(paramsContent, "Params content is available");
+  ok(paramsContent.textContent.includes("Hello world!"), "Post body is correct");
+
   // Select Response tab and check the content. CodeMirror initialization
-  // is delayed  to prevent UI freeze, so wait for a little while.
+  // is delayed, so again wait for a little while.
   responseTab.click();
-  await waitForSourceEditor(messageNode);
+  let responsePanel = messageNode.querySelector("#response-panel");
+  await waitForSourceEditor(responsePanel);
   let responseContent = messageNode.querySelector(
     "#response-panel .editor-row-container .CodeMirror");
   ok(responseContent, "Response content is available");
   ok(responseContent.textContent, "Response text is available");
 
   // Select Timings tab and check the content.
   timingsTab.click();
   let timingsContent = messageNode.querySelector(
     "#timings-panel .timings-container .timings-label");
   ok(timingsContent, "Timings content is available");
   ok(timingsContent.textContent, "Timings text is available");
 }
 
-async function waitForNetworkUpdates(toolbox) {
-  let panel = toolbox.getCurrentPanel();
-  let hud = panel.hud;
-  let ui = hud.ui;
-
+async function waitForPayloadReady(toolbox) {
+  let {ui} = toolbox.getCurrentPanel().hud;
   return new Promise(resolve => {
     ui.jsterm.hud.on("network-request-payload-ready", () => {
       info("network-request-payload-ready received");
       resolve();
     });
   });
 }
 
-async function waitForSourceEditor(messageNode) {
+async function waitForSourceEditor(panel) {
   return waitUntil(() => {
-    return !!messageNode.querySelector(
-      "#response-panel .editor-row-container .CodeMirror");
+    return !!panel.querySelector(".CodeMirror");
   });
 }
+
+async function waitForRequestUpdates(toolbox) {
+  let {ui} = toolbox.getCurrentPanel().hud;
+  return new Promise(resolve => {
+    ui.jsterm.hud.on("network-message-updated", () => {
+      info("network-message-updated received");
+      resolve();
+    });
+  });
+}