michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: let gPanelWin; michael@0: let gPanelDoc; michael@0: michael@0: const ADD_QUERY = "t1=t2"; michael@0: const ADD_HEADER = "Test-header: true"; michael@0: const ADD_POSTDATA = "t3=t4"; michael@0: michael@0: /** michael@0: * Tests if resending a request works. michael@0: */ michael@0: michael@0: function test() { michael@0: initNetMonitor(POST_DATA_URL).then(([aTab, aDebuggee, aMonitor]) => { michael@0: info("Starting test... "); michael@0: michael@0: gPanelWin = aMonitor.panelWin; michael@0: gPanelDoc = gPanelWin.document; michael@0: michael@0: let { NetMonitorView } = gPanelWin; michael@0: let { RequestsMenu } = NetMonitorView; michael@0: let TAB_UPDATED = aMonitor.panelWin.EVENTS.TAB_UPDATED; michael@0: let CUSTOMREQUESTVIEW_POPULATED = aMonitor.panelWin.EVENTS.CUSTOMREQUESTVIEW_POPULATED; michael@0: michael@0: RequestsMenu.lazyUpdate = false; michael@0: michael@0: waitForNetworkEvents(aMonitor, 0, 2).then(() => { michael@0: let origItem = RequestsMenu.getItemAtIndex(0); michael@0: RequestsMenu.selectedItem = origItem; michael@0: michael@0: waitFor(aMonitor.panelWin, TAB_UPDATED).then(() => { michael@0: // add a new custom request cloned from selected request michael@0: RequestsMenu.cloneSelectedRequest(); michael@0: return waitFor(aMonitor.panelWin, CUSTOMREQUESTVIEW_POPULATED); michael@0: }).then(() => { michael@0: testCustomForm(origItem.attachment); michael@0: michael@0: let customItem = RequestsMenu.selectedItem; michael@0: testCustomItem(customItem, origItem); michael@0: michael@0: // edit the custom request michael@0: editCustomForm(() => { michael@0: testCustomItemChanged(customItem, origItem); michael@0: michael@0: waitForNetworkEvents(aMonitor, 0, 1).then(() => { michael@0: let sentItem = RequestsMenu.selectedItem; michael@0: testSentRequest(sentItem.attachment, origItem.attachment); michael@0: finishUp(aMonitor); michael@0: }); michael@0: // send the new request michael@0: RequestsMenu.sendCustomRequest(); michael@0: }); michael@0: }); michael@0: }); michael@0: michael@0: aDebuggee.performRequests(); michael@0: }); michael@0: } michael@0: michael@0: function testCustomItem(aItem, aOrigItem) { michael@0: let method = aItem.target.querySelector(".requests-menu-method").value; michael@0: let origMethod = aOrigItem.target.querySelector(".requests-menu-method").value; michael@0: is(method, origMethod, "menu item is showing the same method as original request"); michael@0: michael@0: let file = aItem.target.querySelector(".requests-menu-file").value; michael@0: let origFile = aOrigItem.target.querySelector(".requests-menu-file").value; michael@0: is(file, origFile, "menu item is showing the same file name as original request"); michael@0: michael@0: let domain = aItem.target.querySelector(".requests-menu-domain").value; michael@0: let origDomain = aOrigItem.target.querySelector(".requests-menu-domain").value; michael@0: is(domain, origDomain, "menu item is showing the same domain as original request"); michael@0: } michael@0: michael@0: function testCustomItemChanged(aItem, aOrigItem) { michael@0: let file = aItem.target.querySelector(".requests-menu-file").value; michael@0: let expectedFile = aOrigItem.target.querySelector(".requests-menu-file").value + "&" + ADD_QUERY; michael@0: michael@0: is(file, expectedFile, "menu item is updated to reflect url entered in form"); michael@0: } michael@0: michael@0: /* michael@0: * Test that the New Request form was populated correctly michael@0: */ michael@0: function testCustomForm(aData) { michael@0: is(gPanelDoc.getElementById("custom-method-value").value, aData.method, michael@0: "new request form showing correct method"); michael@0: michael@0: is(gPanelDoc.getElementById("custom-url-value").value, aData.url, michael@0: "new request form showing correct url"); michael@0: michael@0: let query = gPanelDoc.getElementById("custom-query-value"); michael@0: is(query.value, "foo=bar\nbaz=42\ntype=urlencoded", michael@0: "new request form showing correct query string"); michael@0: michael@0: let headers = gPanelDoc.getElementById("custom-headers-value").value.split("\n"); michael@0: for (let {name, value} of aData.requestHeaders.headers) { michael@0: ok(headers.indexOf(name + ": " + value) >= 0, "form contains header from request"); michael@0: } michael@0: michael@0: let postData = gPanelDoc.getElementById("custom-postdata-value"); michael@0: is(postData.value, aData.requestPostData.postData.text, michael@0: "new request form showing correct post data"); michael@0: } michael@0: michael@0: /* michael@0: * Add some params and headers to the request form michael@0: */ michael@0: function editCustomForm(callback) { michael@0: gPanelWin.focus(); michael@0: michael@0: let query = gPanelDoc.getElementById("custom-query-value"); michael@0: query.addEventListener("focus", function onFocus() { michael@0: query.removeEventListener("focus", onFocus, false); michael@0: michael@0: // add params to url query string field michael@0: type(["VK_RETURN"]); michael@0: type(ADD_QUERY); michael@0: michael@0: let headers = gPanelDoc.getElementById("custom-headers-value"); michael@0: headers.addEventListener("focus", function onFocus() { michael@0: headers.removeEventListener("focus", onFocus, false); michael@0: michael@0: // add a header michael@0: type(["VK_RETURN"]); michael@0: type(ADD_HEADER); michael@0: michael@0: let postData = gPanelDoc.getElementById("custom-postdata-value"); michael@0: postData.addEventListener("focus", function onFocus() { michael@0: postData.removeEventListener("focus", onFocus, false); michael@0: michael@0: // add to POST data michael@0: type(ADD_POSTDATA); michael@0: callback(); michael@0: }, false); michael@0: postData.focus(); michael@0: }, false); michael@0: headers.focus(); michael@0: }, false); michael@0: query.focus(); michael@0: } michael@0: michael@0: /* michael@0: * Make sure newly created event matches expected request michael@0: */ michael@0: function testSentRequest(aData, aOrigData) { michael@0: is(aData.method, aOrigData.method, "correct method in sent request"); michael@0: is(aData.url, aOrigData.url + "&" + ADD_QUERY, "correct url in sent request"); michael@0: michael@0: let hasHeader = aData.requestHeaders.headers.some((header) => { michael@0: return (header.name + ": " + header.value) == ADD_HEADER; michael@0: }) michael@0: ok(hasHeader, "new header added to sent request"); michael@0: michael@0: is(aData.requestPostData.postData.text, michael@0: aOrigData.requestPostData.postData.text + ADD_POSTDATA, michael@0: "post data added to sent request"); michael@0: } michael@0: michael@0: michael@0: function type(aString) { michael@0: for (let ch of aString) { michael@0: EventUtils.synthesizeKey(ch, {}, gPanelWin); michael@0: } michael@0: } michael@0: michael@0: function finishUp(aMonitor) { michael@0: gPanelWin = null; michael@0: gPanelDoc = null; michael@0: michael@0: teardown(aMonitor).then(finish); michael@0: }