216 lines
5.9 KiB
JavaScript
216 lines
5.9 KiB
JavaScript
/* 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);
|
|
await waitUntil(() =>
|
|
requestItem.querySelector(".requests-list-timings-total")
|
|
);
|
|
}
|
|
|
|
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."
|
|
);
|
|
}
|
|
});
|