зеркало из https://github.com/mozilla/gecko-dev.git
161 строка
5.3 KiB
JavaScript
161 строка
5.3 KiB
JavaScript
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
|
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
"use strict";
|
|
|
|
// A test to ensure that the content in details pane is not duplicated.
|
|
|
|
var test = Task.async(function* () {
|
|
info("Initializing test");
|
|
let [tab, debuggee, monitor] = yield initNetMonitor(CUSTOM_GET_URL);
|
|
let panel = monitor.panelWin;
|
|
let { NetMonitorView, EVENTS } = panel;
|
|
let { RequestsMenu, NetworkDetails } = NetMonitorView;
|
|
|
|
const COOKIE_UNIQUE_PATH = "/do-not-use-in-other-tests-using-cookies";
|
|
|
|
let TEST_CASES = [
|
|
{
|
|
desc: "Test headers tab",
|
|
pageURI: CUSTOM_GET_URL,
|
|
requestURI: null,
|
|
isPost: false,
|
|
tabIndex: 0,
|
|
variablesView: NetworkDetails._headers,
|
|
expectedScopeLength: 2,
|
|
},
|
|
{
|
|
desc: "Test cookies tab",
|
|
pageURI: CUSTOM_GET_URL,
|
|
requestURI: COOKIE_UNIQUE_PATH,
|
|
isPost: false,
|
|
tabIndex: 1,
|
|
variablesView: NetworkDetails._cookies,
|
|
expectedScopeLength: 1,
|
|
},
|
|
{
|
|
desc: "Test params tab",
|
|
pageURI: POST_RAW_URL,
|
|
requestURI: null,
|
|
isPost: true,
|
|
tabIndex: 2,
|
|
variablesView: NetworkDetails._params,
|
|
expectedScopeLength: 1,
|
|
},
|
|
];
|
|
|
|
info("Adding a cookie for the \"Cookie\" tab test");
|
|
debuggee.document.cookie = "a=b; path=" + COOKIE_UNIQUE_PATH;
|
|
|
|
info("Running tests");
|
|
for (let spec of TEST_CASES) {
|
|
yield runTestCase(spec);
|
|
}
|
|
|
|
// Remove the cookie. If an error occurs the path of the cookie ensures it
|
|
// doesn't mess with the other tests.
|
|
info("Removing the added cookie.");
|
|
debuggee.document.cookie = "a=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=" +
|
|
COOKIE_UNIQUE_PATH;
|
|
|
|
yield teardown(monitor);
|
|
finish();
|
|
|
|
/**
|
|
* A helper that handles the execution of each case.
|
|
*/
|
|
function* runTestCase(spec) {
|
|
info("Running case: " + spec.desc);
|
|
debuggee.content.location = spec.pageURI;
|
|
|
|
yield waitForNetworkEvents(monitor, 1);
|
|
RequestsMenu.clear();
|
|
yield waitForFinalDetailTabUpdate(spec.tabIndex, spec.isPost, spec.requestURI);
|
|
|
|
is(spec.variablesView._store.length, spec.expectedScopeLength,
|
|
"View contains " + spec.expectedScopeLength + " scope headers");
|
|
}
|
|
|
|
/**
|
|
* A helper that prepares the variables view for the actual testing. It
|
|
* - selects the correct tab
|
|
* - performs the specified request to specified URI
|
|
* - opens the details view
|
|
* - waits for the final update to happen
|
|
*/
|
|
function* waitForFinalDetailTabUpdate(tabIndex, isPost, uri) {
|
|
let onNetworkEvent = waitFor(panel, EVENTS.NETWORK_EVENT);
|
|
let onDetailsPopulated = waitFor(panel, EVENTS.NETWORKDETAILSVIEW_POPULATED);
|
|
let onRequestFinished = isPost ?
|
|
waitForNetworkEvents(monitor, 0, 1) : waitForNetworkEvents(monitor, 1);
|
|
|
|
info("Performing a request");
|
|
debuggee.performRequests(1, uri);
|
|
|
|
info("Waiting for NETWORK_EVENT");
|
|
yield onNetworkEvent;
|
|
|
|
if (!RequestsMenu.getItemAtIndex(0)) {
|
|
info("Waiting for the request to be added to the view")
|
|
yield monitor.panelWin.once(monitor.panelWin.EVENTS.REQUEST_ADDED);
|
|
}
|
|
|
|
ok(true, "Received NETWORK_EVENT. Selecting the item.");
|
|
let item = RequestsMenu.getItemAtIndex(0);
|
|
RequestsMenu.selectedItem = item;
|
|
|
|
info("Item selected. Waiting for NETWORKDETAILSVIEW_POPULATED");
|
|
yield onDetailsPopulated;
|
|
|
|
info("Received populated event. Selecting tab at index " + tabIndex);
|
|
NetworkDetails.widget.selectedIndex = tabIndex;
|
|
|
|
info("Waiting for request to finish.");
|
|
yield onRequestFinished;
|
|
|
|
ok(true, "Request finished.");
|
|
|
|
/**
|
|
* Because this test uses lazy updates there's four scenarios to consider:
|
|
* #1: Everything is updated and test is ready to continue.
|
|
* #2: There's updates that are waiting to be flushed.
|
|
* #3: Updates are flushed but the tab update is still running.
|
|
* #4: There's pending updates and a tab update is still running.
|
|
*
|
|
* For case #1 there's not going to be a TAB_UPDATED event so don't wait for
|
|
* it (bug 1106181).
|
|
*
|
|
* For cases #2 and #3 it's enough to wait for one TAB_UPDATED event as for
|
|
* - case #2 the next flush will perform the final update and single
|
|
* TAB_UPDATED event is emitted.
|
|
* - case #3 the running update is the final update that'll emit one
|
|
* TAB_UPDATED event.
|
|
*
|
|
* For case #4 we must wait for the updates to be flushed before we can
|
|
* start waiting for TAB_UPDATED event or we'll continue the test right
|
|
* after the pending update finishes.
|
|
*/
|
|
let hasQueuedUpdates = RequestsMenu._updateQueue.length !== 0;
|
|
let hasRunningTabUpdate = NetworkDetails._viewState.updating[tabIndex];
|
|
|
|
if (hasQueuedUpdates || hasRunningTabUpdate) {
|
|
info("There's pending updates - waiting for them to finish.");
|
|
info(" hasQueuedUpdates: " + hasQueuedUpdates);
|
|
info(" hasRunningTabUpdate: " + hasRunningTabUpdate);
|
|
|
|
if (hasQueuedUpdates && hasRunningTabUpdate) {
|
|
info("Waiting for updates to be flushed.");
|
|
// _flushRequests calls .populate which emits the following event
|
|
yield waitFor(panel, EVENTS.NETWORKDETAILSVIEW_POPULATED);
|
|
|
|
info("Requests flushed.");
|
|
}
|
|
|
|
info("Waiting for final tab update.");
|
|
yield waitFor(panel, EVENTS.TAB_UPDATED);
|
|
}
|
|
|
|
info("All updates completed.");
|
|
}
|
|
});
|