summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/test/browser_net_status-codes.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/netmonitor/test/browser_net_status-codes.js')
-rw-r--r--devtools/client/netmonitor/test/browser_net_status-codes.js213
1 files changed, 213 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/test/browser_net_status-codes.js b/devtools/client/netmonitor/test/browser_net_status-codes.js
new file mode 100644
index 0000000000..8fd430e740
--- /dev/null
+++ b/devtools/client/netmonitor/test/browser_net_status-codes.js
@@ -0,0 +1,213 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests if requests display the correct status code and text in the UI.
+ */
+
+add_task(async function () {
+ const {
+ L10N,
+ } = require("resource://devtools/client/netmonitor/src/utils/l10n.js");
+
+ const { tab, monitor } = await initNetMonitor(STATUS_CODES_URL, {
+ requestCount: 1,
+ });
+
+ info("Starting test... ");
+
+ const { document, store, windowRequire } = monitor.panelWin;
+ const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
+ const { getDisplayedRequests, getSortedRequests } = windowRequire(
+ "devtools/client/netmonitor/src/selectors/index"
+ );
+
+ store.dispatch(Actions.batchEnable(false));
+
+ const requestItems = [];
+
+ const REQUEST_DATA = [
+ {
+ // request #0
+ method: "GET",
+ uri: STATUS_CODES_SJS + "?sts=100",
+ correctUri: STATUS_CODES_SJS + "?sts=100",
+ details: {
+ status: 101,
+ statusText: "Switching Protocols",
+ type: "plain",
+ fullMimeType: "text/plain; charset=utf-8",
+ size: L10N.getFormatStrWithNumbers("networkMenu.sizeB", 0),
+ time: true,
+ },
+ },
+ {
+ // request #1
+ method: "GET",
+ uri: STATUS_CODES_SJS + "?sts=200",
+ correctUri: STATUS_CODES_SJS + "?sts=200",
+ details: {
+ status: 202,
+ statusText: "Created",
+ type: "plain",
+ fullMimeType: "text/plain; charset=utf-8",
+ size: L10N.getFormatStrWithNumbers("networkMenu.sizeB", 22),
+ time: true,
+ },
+ },
+ {
+ // request #2
+ method: "GET",
+ uri: STATUS_CODES_SJS + "?sts=300",
+ correctUri: STATUS_CODES_SJS + "?sts=300",
+ details: {
+ status: 303,
+ statusText: "See Other",
+ type: "plain",
+ fullMimeType: "text/plain; charset=utf-8",
+ size: L10N.getFormatStrWithNumbers("networkMenu.sizeB", 22),
+ time: true,
+ },
+ },
+ {
+ // request #3
+ method: "GET",
+ uri: STATUS_CODES_SJS + "?sts=400",
+ correctUri: STATUS_CODES_SJS + "?sts=400",
+ details: {
+ status: 404,
+ statusText: "Not Found",
+ type: "plain",
+ fullMimeType: "text/plain; charset=utf-8",
+ size: L10N.getFormatStrWithNumbers("networkMenu.sizeB", 22),
+ time: true,
+ },
+ },
+ {
+ // request #4
+ method: "GET",
+ uri: STATUS_CODES_SJS + "?sts=500",
+ correctUri: STATUS_CODES_SJS + "?sts=500",
+ details: {
+ status: 501,
+ statusText: "Not Implemented",
+ type: "plain",
+ fullMimeType: "text/plain; charset=utf-8",
+ size: L10N.getFormatStrWithNumbers("networkMenu.sizeB", 22),
+ time: true,
+ },
+ },
+ ];
+
+ // Execute requests.
+ await performRequests(monitor, tab, 5);
+
+ info("Performing tests");
+ await verifyRequests();
+ await testTab(0, testHeaders);
+
+ return teardown(monitor);
+
+ /**
+ * A helper that verifies all requests show the correct information and caches
+ * request list items to requestItems array.
+ */
+ async function verifyRequests() {
+ const requestListItems = document.querySelectorAll(".request-list-item");
+ for (const requestItem of requestListItems) {
+ requestItem.scrollIntoView();
+ const requestsListStatus = requestItem.querySelector(".status-code");
+ EventUtils.sendMouseEvent({ type: "mouseover" }, requestsListStatus);
+ await waitUntil(() => requestsListStatus.title);
+ }
+
+ info("Verifying requests contain correct information.");
+ let index = 0;
+ for (const request of REQUEST_DATA) {
+ const item = getSortedRequests(store.getState())[index];
+ requestItems[index] = item;
+
+ info("Verifying request #" + index);
+ await verifyRequestItemTarget(
+ document,
+ getDisplayedRequests(store.getState()),
+ item,
+ request.method,
+ request.uri,
+ request.details
+ );
+
+ index++;
+ }
+ }
+
+ /**
+ * A helper that opens a given tab of request details pane, selects and passes
+ * all requests to the given test function.
+ *
+ * @param Number tabIdx
+ * The index of tab to activate.
+ * @param Function testFn(requestItem)
+ * A function that should perform all necessary tests. It's called once
+ * for every item of REQUEST_DATA with that item being selected in the
+ * NetworkMonitor.
+ */
+ async function testTab(tabIdx, testFn) {
+ let counter = 0;
+ for (const item of REQUEST_DATA) {
+ info("Testing tab #" + tabIdx + " to update with request #" + counter);
+ await testFn(item, counter);
+
+ counter++;
+ }
+ }
+
+ /**
+ * A function that tests "Headers" panel contains correct information.
+ */
+ async function testHeaders(data, index) {
+ EventUtils.sendMouseEvent(
+ { type: "mousedown" },
+ document.querySelectorAll(".request-list-item")[index]
+ );
+
+ // wait till all the summary section is loaded
+ await waitUntil(() =>
+ document.querySelector("#headers-panel .tabpanel-summary-value")
+ );
+ const panel = document.querySelector("#headers-panel");
+ const {
+ method,
+ correctUri,
+ details: { status, statusText },
+ } = data;
+
+ const statusCode = panel.querySelector(".status-code");
+
+ EventUtils.sendMouseEvent({ type: "mouseover" }, statusCode);
+ await waitUntil(() => statusCode.title);
+
+ is(
+ panel.querySelector(".url-preview .url").textContent,
+ correctUri,
+ "The url summary value is incorrect."
+ );
+ is(
+ panel.querySelectorAll(".treeLabel")[0].textContent,
+ method,
+ "The method value is incorrect."
+ );
+ is(
+ parseInt(statusCode.dataset.code, 10),
+ status,
+ "The status summary code is incorrect."
+ );
+ is(
+ statusCode.getAttribute("title"),
+ status + " " + statusText,
+ "The status summary value is incorrect."
+ );
+ }
+});