browser/devtools/netmonitor/test/browser_net_resend.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/browser/devtools/netmonitor/test/browser_net_resend.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,173 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 +   http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +let gPanelWin;
     1.8 +let gPanelDoc;
     1.9 +
    1.10 +const ADD_QUERY = "t1=t2";
    1.11 +const ADD_HEADER = "Test-header: true";
    1.12 +const ADD_POSTDATA = "t3=t4";
    1.13 +
    1.14 +/**
    1.15 + * Tests if resending a request works.
    1.16 + */
    1.17 +
    1.18 +function test() {
    1.19 +  initNetMonitor(POST_DATA_URL).then(([aTab, aDebuggee, aMonitor]) => {
    1.20 +    info("Starting test... ");
    1.21 +
    1.22 +    gPanelWin = aMonitor.panelWin;
    1.23 +    gPanelDoc = gPanelWin.document;
    1.24 +
    1.25 +    let { NetMonitorView } = gPanelWin;
    1.26 +    let { RequestsMenu } = NetMonitorView;
    1.27 +    let TAB_UPDATED = aMonitor.panelWin.EVENTS.TAB_UPDATED;
    1.28 +    let CUSTOMREQUESTVIEW_POPULATED = aMonitor.panelWin.EVENTS.CUSTOMREQUESTVIEW_POPULATED;
    1.29 +
    1.30 +    RequestsMenu.lazyUpdate = false;
    1.31 +
    1.32 +    waitForNetworkEvents(aMonitor, 0, 2).then(() => {
    1.33 +      let origItem = RequestsMenu.getItemAtIndex(0);
    1.34 +      RequestsMenu.selectedItem = origItem;
    1.35 +
    1.36 +      waitFor(aMonitor.panelWin, TAB_UPDATED).then(() => {
    1.37 +        // add a new custom request cloned from selected request
    1.38 +        RequestsMenu.cloneSelectedRequest();
    1.39 +        return waitFor(aMonitor.panelWin, CUSTOMREQUESTVIEW_POPULATED);
    1.40 +      }).then(() => {
    1.41 +        testCustomForm(origItem.attachment);
    1.42 +
    1.43 +        let customItem = RequestsMenu.selectedItem;
    1.44 +        testCustomItem(customItem, origItem);
    1.45 +
    1.46 +        // edit the custom request
    1.47 +        editCustomForm(() => {
    1.48 +          testCustomItemChanged(customItem, origItem);
    1.49 +
    1.50 +          waitForNetworkEvents(aMonitor, 0, 1).then(() => {
    1.51 +            let sentItem = RequestsMenu.selectedItem;
    1.52 +            testSentRequest(sentItem.attachment, origItem.attachment);
    1.53 +            finishUp(aMonitor);
    1.54 +          });
    1.55 +          // send the new request
    1.56 +          RequestsMenu.sendCustomRequest();
    1.57 +        });
    1.58 +      });
    1.59 +    });
    1.60 +
    1.61 +    aDebuggee.performRequests();
    1.62 +  });
    1.63 +}
    1.64 +
    1.65 +function testCustomItem(aItem, aOrigItem) {
    1.66 +  let method = aItem.target.querySelector(".requests-menu-method").value;
    1.67 +  let origMethod = aOrigItem.target.querySelector(".requests-menu-method").value;
    1.68 +  is(method, origMethod, "menu item is showing the same method as original request");
    1.69 +
    1.70 +  let file = aItem.target.querySelector(".requests-menu-file").value;
    1.71 +  let origFile = aOrigItem.target.querySelector(".requests-menu-file").value;
    1.72 +  is(file, origFile, "menu item is showing the same file name as original request");
    1.73 +
    1.74 +  let domain = aItem.target.querySelector(".requests-menu-domain").value;
    1.75 +  let origDomain = aOrigItem.target.querySelector(".requests-menu-domain").value;
    1.76 +  is(domain, origDomain, "menu item is showing the same domain as original request");
    1.77 +}
    1.78 +
    1.79 +function testCustomItemChanged(aItem, aOrigItem) {
    1.80 +  let file = aItem.target.querySelector(".requests-menu-file").value;
    1.81 +  let expectedFile = aOrigItem.target.querySelector(".requests-menu-file").value + "&" + ADD_QUERY;
    1.82 +
    1.83 +  is(file, expectedFile, "menu item is updated to reflect url entered in form");
    1.84 +}
    1.85 +
    1.86 +/*
    1.87 + * Test that the New Request form was populated correctly
    1.88 + */
    1.89 +function testCustomForm(aData) {
    1.90 +  is(gPanelDoc.getElementById("custom-method-value").value, aData.method,
    1.91 +     "new request form showing correct method");
    1.92 +
    1.93 +  is(gPanelDoc.getElementById("custom-url-value").value, aData.url,
    1.94 +     "new request form showing correct url");
    1.95 +
    1.96 +  let query = gPanelDoc.getElementById("custom-query-value");
    1.97 +  is(query.value, "foo=bar\nbaz=42\ntype=urlencoded",
    1.98 +     "new request form showing correct query string");
    1.99 +
   1.100 +  let headers = gPanelDoc.getElementById("custom-headers-value").value.split("\n");
   1.101 +  for (let {name, value} of aData.requestHeaders.headers) {
   1.102 +    ok(headers.indexOf(name + ": " + value) >= 0, "form contains header from request");
   1.103 +  }
   1.104 +
   1.105 +  let postData = gPanelDoc.getElementById("custom-postdata-value");
   1.106 +  is(postData.value, aData.requestPostData.postData.text,
   1.107 +     "new request form showing correct post data");
   1.108 +}
   1.109 +
   1.110 +/*
   1.111 + * Add some params and headers to the request form
   1.112 + */
   1.113 +function editCustomForm(callback) {
   1.114 +  gPanelWin.focus();
   1.115 +
   1.116 +  let query = gPanelDoc.getElementById("custom-query-value");
   1.117 +  query.addEventListener("focus", function onFocus() {
   1.118 +    query.removeEventListener("focus", onFocus, false);
   1.119 +
   1.120 +    // add params to url query string field
   1.121 +    type(["VK_RETURN"]);
   1.122 +    type(ADD_QUERY);
   1.123 +
   1.124 +    let headers = gPanelDoc.getElementById("custom-headers-value");
   1.125 +    headers.addEventListener("focus", function onFocus() {
   1.126 +      headers.removeEventListener("focus", onFocus, false);
   1.127 +
   1.128 +      // add a header
   1.129 +      type(["VK_RETURN"]);
   1.130 +      type(ADD_HEADER);
   1.131 +
   1.132 +      let postData = gPanelDoc.getElementById("custom-postdata-value");
   1.133 +      postData.addEventListener("focus", function onFocus() {
   1.134 +        postData.removeEventListener("focus", onFocus, false);
   1.135 +
   1.136 +        // add to POST data
   1.137 +        type(ADD_POSTDATA);
   1.138 +        callback();
   1.139 +      }, false);
   1.140 +      postData.focus();
   1.141 +    }, false);
   1.142 +    headers.focus();
   1.143 +  }, false);
   1.144 +  query.focus();
   1.145 +}
   1.146 +
   1.147 +/*
   1.148 + * Make sure newly created event matches expected request
   1.149 + */
   1.150 +function testSentRequest(aData, aOrigData) {
   1.151 +  is(aData.method, aOrigData.method, "correct method in sent request");
   1.152 +  is(aData.url, aOrigData.url + "&" + ADD_QUERY, "correct url in sent request");
   1.153 +
   1.154 +  let hasHeader = aData.requestHeaders.headers.some((header) => {
   1.155 +    return (header.name + ": " + header.value) == ADD_HEADER;
   1.156 +  })
   1.157 +  ok(hasHeader, "new header added to sent request");
   1.158 +
   1.159 +  is(aData.requestPostData.postData.text,
   1.160 +     aOrigData.requestPostData.postData.text + ADD_POSTDATA,
   1.161 +     "post data added to sent request");
   1.162 +}
   1.163 +
   1.164 +
   1.165 +function type(aString) {
   1.166 +  for (let ch of aString) {
   1.167 +    EventUtils.synthesizeKey(ch, {}, gPanelWin);
   1.168 +  }
   1.169 +}
   1.170 +
   1.171 +function finishUp(aMonitor) {
   1.172 +  gPanelWin = null;
   1.173 +  gPanelDoc = null;
   1.174 +
   1.175 +  teardown(aMonitor).then(finish);
   1.176 +}

mercurial