diff -r 000000000000 -r 6474c204b198 browser/devtools/netmonitor/test/browser_net_status-codes.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/devtools/netmonitor/test/browser_net_status-codes.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,155 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Tests if requests display the correct status code and text in the UI. + */ + +function test() { + initNetMonitor(STATUS_CODES_URL).then(([aTab, aDebuggee, aMonitor]) => { + info("Starting test... "); + + let { document, L10N, NetMonitorView } = aMonitor.panelWin; + let { RequestsMenu, NetworkDetails } = NetMonitorView; + + RequestsMenu.lazyUpdate = false; + NetworkDetails._params.lazyEmpty = false; + + waitForNetworkEvents(aMonitor, 5).then(() => { + let requestItems = []; + + verifyRequestItemTarget(requestItems[0] = RequestsMenu.getItemAtIndex(0), + "GET", STATUS_CODES_SJS + "?sts=100", { + status: 101, + statusText: "Switching Protocols", + type: "plain", + fullMimeType: "text/plain; charset=utf-8", + size: L10N.getFormatStrWithNumbers("networkMenu.sizeKB", 0), + time: true + }); + verifyRequestItemTarget(requestItems[1] = RequestsMenu.getItemAtIndex(1), + "GET", STATUS_CODES_SJS + "?sts=200", { + status: 202, + statusText: "Created", + type: "plain", + fullMimeType: "text/plain; charset=utf-8", + size: L10N.getFormatStrWithNumbers("networkMenu.sizeKB", 0.02), + time: true + }); + verifyRequestItemTarget(requestItems[2] = RequestsMenu.getItemAtIndex(2), + "GET", STATUS_CODES_SJS + "?sts=300", { + status: 303, + statusText: "See Other", + type: "plain", + fullMimeType: "text/plain; charset=utf-8", + size: L10N.getFormatStrWithNumbers("networkMenu.sizeKB", 0), + time: true + }); + verifyRequestItemTarget(requestItems[3] = RequestsMenu.getItemAtIndex(3), + "GET", STATUS_CODES_SJS + "?sts=400", { + status: 404, + statusText: "Not Found", + type: "plain", + fullMimeType: "text/plain; charset=utf-8", + size: L10N.getFormatStrWithNumbers("networkMenu.sizeKB", 0.02), + time: true + }); + verifyRequestItemTarget(requestItems[4] = RequestsMenu.getItemAtIndex(4), + "GET", STATUS_CODES_SJS + "?sts=500", { + status: 501, + statusText: "Not Implemented", + type: "plain", + fullMimeType: "text/plain; charset=utf-8", + size: L10N.getFormatStrWithNumbers("networkMenu.sizeKB", 0.02), + time: true + }); + + // Test summaries... + EventUtils.sendMouseEvent({ type: "mousedown" }, + document.querySelectorAll("#details-pane tab")[0]); + + EventUtils.sendMouseEvent({ type: "mousedown" }, requestItems[0].target); + testSummary("GET", STATUS_CODES_SJS + "?sts=100", "101", "Switching Protocols"); + + EventUtils.sendMouseEvent({ type: "mousedown" }, requestItems[1].target); + testSummary("GET", STATUS_CODES_SJS + "?sts=200", "202", "Created"); + + EventUtils.sendMouseEvent({ type: "mousedown" }, requestItems[2].target); + testSummary("GET", STATUS_CODES_SJS + "?sts=300", "303", "See Other"); + + EventUtils.sendMouseEvent({ type: "mousedown" }, requestItems[3].target); + testSummary("GET", STATUS_CODES_SJS + "?sts=400", "404", "Not Found"); + + EventUtils.sendMouseEvent({ type: "mousedown" }, requestItems[4].target); + testSummary("GET", STATUS_CODES_SJS + "?sts=500", "501", "Not Implemented"); + + // Test params... + EventUtils.sendMouseEvent({ type: "mousedown" }, + document.querySelectorAll("#details-pane tab")[2]); + + EventUtils.sendMouseEvent({ type: "mousedown" }, requestItems[0].target); + testParamsTab("\"100\""); + + EventUtils.sendMouseEvent({ type: "mousedown" }, requestItems[1].target); + testParamsTab("\"200\""); + + EventUtils.sendMouseEvent({ type: "mousedown" }, requestItems[2].target); + testParamsTab("\"300\""); + + EventUtils.sendMouseEvent({ type: "mousedown" }, requestItems[3].target); + testParamsTab("\"400\""); + + EventUtils.sendMouseEvent({ type: "mousedown" }, requestItems[4].target); + testParamsTab("\"500\""); + + // We're done here. + teardown(aMonitor).then(finish); + + function testSummary(aMethod, aUrl, aStatus, aStatusText) { + let tab = document.querySelectorAll("#details-pane tab")[0]; + let tabpanel = document.querySelectorAll("#details-pane tabpanel")[0]; + + is(tabpanel.querySelector("#headers-summary-url-value").getAttribute("value"), + aUrl, "The url summary value is incorrect."); + is(tabpanel.querySelector("#headers-summary-method-value").getAttribute("value"), + aMethod, "The method summary value is incorrect."); + is(tabpanel.querySelector("#headers-summary-status-circle").getAttribute("code"), + aStatus, "The status summary code is incorrect."); + is(tabpanel.querySelector("#headers-summary-status-value").getAttribute("value"), + aStatus + " " + aStatusText, "The status summary value is incorrect."); + } + + function testParamsTab(aStatusParamValue) { + let tab = document.querySelectorAll("#details-pane tab")[2]; + let tabpanel = document.querySelectorAll("#details-pane tabpanel")[2]; + + is(tabpanel.querySelectorAll(".variables-view-scope").length, 1, + "There should be 1 param scope displayed in this tabpanel."); + is(tabpanel.querySelectorAll(".variable-or-property").length, 1, + "There should be 1 param value displayed in this tabpanel."); + is(tabpanel.querySelectorAll(".variables-view-empty-notice").length, 0, + "The empty notice should not be displayed in this tabpanel."); + + let paramsScope = tabpanel.querySelectorAll(".variables-view-scope")[0]; + + is(paramsScope.querySelector(".name").getAttribute("value"), + L10N.getStr("paramsQueryString"), + "The params scope doesn't have the correct title."); + + is(paramsScope.querySelectorAll(".variables-view-variable .name")[0].getAttribute("value"), + "sts", "The param name was incorrect."); + is(paramsScope.querySelectorAll(".variables-view-variable .value")[0].getAttribute("value"), + aStatusParamValue, "The param value was incorrect."); + + is(tabpanel.querySelector("#request-params-box") + .hasAttribute("hidden"), false, + "The request params box should not be hidden."); + is(tabpanel.querySelector("#request-post-data-textarea-box") + .hasAttribute("hidden"), true, + "The request post data textarea box should be hidden."); + } + }); + + aDebuggee.performRequests(); + }); +}