|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 let gPanelWin; |
|
5 let gPanelDoc; |
|
6 |
|
7 const ADD_QUERY = "t1=t2"; |
|
8 const ADD_HEADER = "Test-header: true"; |
|
9 const ADD_POSTDATA = "t3=t4"; |
|
10 |
|
11 /** |
|
12 * Tests if resending a request works. |
|
13 */ |
|
14 |
|
15 function test() { |
|
16 initNetMonitor(POST_DATA_URL).then(([aTab, aDebuggee, aMonitor]) => { |
|
17 info("Starting test... "); |
|
18 |
|
19 gPanelWin = aMonitor.panelWin; |
|
20 gPanelDoc = gPanelWin.document; |
|
21 |
|
22 let { NetMonitorView } = gPanelWin; |
|
23 let { RequestsMenu } = NetMonitorView; |
|
24 let TAB_UPDATED = aMonitor.panelWin.EVENTS.TAB_UPDATED; |
|
25 let CUSTOMREQUESTVIEW_POPULATED = aMonitor.panelWin.EVENTS.CUSTOMREQUESTVIEW_POPULATED; |
|
26 |
|
27 RequestsMenu.lazyUpdate = false; |
|
28 |
|
29 waitForNetworkEvents(aMonitor, 0, 2).then(() => { |
|
30 let origItem = RequestsMenu.getItemAtIndex(0); |
|
31 RequestsMenu.selectedItem = origItem; |
|
32 |
|
33 waitFor(aMonitor.panelWin, TAB_UPDATED).then(() => { |
|
34 // add a new custom request cloned from selected request |
|
35 RequestsMenu.cloneSelectedRequest(); |
|
36 return waitFor(aMonitor.panelWin, CUSTOMREQUESTVIEW_POPULATED); |
|
37 }).then(() => { |
|
38 testCustomForm(origItem.attachment); |
|
39 |
|
40 let customItem = RequestsMenu.selectedItem; |
|
41 testCustomItem(customItem, origItem); |
|
42 |
|
43 // edit the custom request |
|
44 editCustomForm(() => { |
|
45 testCustomItemChanged(customItem, origItem); |
|
46 |
|
47 waitForNetworkEvents(aMonitor, 0, 1).then(() => { |
|
48 let sentItem = RequestsMenu.selectedItem; |
|
49 testSentRequest(sentItem.attachment, origItem.attachment); |
|
50 finishUp(aMonitor); |
|
51 }); |
|
52 // send the new request |
|
53 RequestsMenu.sendCustomRequest(); |
|
54 }); |
|
55 }); |
|
56 }); |
|
57 |
|
58 aDebuggee.performRequests(); |
|
59 }); |
|
60 } |
|
61 |
|
62 function testCustomItem(aItem, aOrigItem) { |
|
63 let method = aItem.target.querySelector(".requests-menu-method").value; |
|
64 let origMethod = aOrigItem.target.querySelector(".requests-menu-method").value; |
|
65 is(method, origMethod, "menu item is showing the same method as original request"); |
|
66 |
|
67 let file = aItem.target.querySelector(".requests-menu-file").value; |
|
68 let origFile = aOrigItem.target.querySelector(".requests-menu-file").value; |
|
69 is(file, origFile, "menu item is showing the same file name as original request"); |
|
70 |
|
71 let domain = aItem.target.querySelector(".requests-menu-domain").value; |
|
72 let origDomain = aOrigItem.target.querySelector(".requests-menu-domain").value; |
|
73 is(domain, origDomain, "menu item is showing the same domain as original request"); |
|
74 } |
|
75 |
|
76 function testCustomItemChanged(aItem, aOrigItem) { |
|
77 let file = aItem.target.querySelector(".requests-menu-file").value; |
|
78 let expectedFile = aOrigItem.target.querySelector(".requests-menu-file").value + "&" + ADD_QUERY; |
|
79 |
|
80 is(file, expectedFile, "menu item is updated to reflect url entered in form"); |
|
81 } |
|
82 |
|
83 /* |
|
84 * Test that the New Request form was populated correctly |
|
85 */ |
|
86 function testCustomForm(aData) { |
|
87 is(gPanelDoc.getElementById("custom-method-value").value, aData.method, |
|
88 "new request form showing correct method"); |
|
89 |
|
90 is(gPanelDoc.getElementById("custom-url-value").value, aData.url, |
|
91 "new request form showing correct url"); |
|
92 |
|
93 let query = gPanelDoc.getElementById("custom-query-value"); |
|
94 is(query.value, "foo=bar\nbaz=42\ntype=urlencoded", |
|
95 "new request form showing correct query string"); |
|
96 |
|
97 let headers = gPanelDoc.getElementById("custom-headers-value").value.split("\n"); |
|
98 for (let {name, value} of aData.requestHeaders.headers) { |
|
99 ok(headers.indexOf(name + ": " + value) >= 0, "form contains header from request"); |
|
100 } |
|
101 |
|
102 let postData = gPanelDoc.getElementById("custom-postdata-value"); |
|
103 is(postData.value, aData.requestPostData.postData.text, |
|
104 "new request form showing correct post data"); |
|
105 } |
|
106 |
|
107 /* |
|
108 * Add some params and headers to the request form |
|
109 */ |
|
110 function editCustomForm(callback) { |
|
111 gPanelWin.focus(); |
|
112 |
|
113 let query = gPanelDoc.getElementById("custom-query-value"); |
|
114 query.addEventListener("focus", function onFocus() { |
|
115 query.removeEventListener("focus", onFocus, false); |
|
116 |
|
117 // add params to url query string field |
|
118 type(["VK_RETURN"]); |
|
119 type(ADD_QUERY); |
|
120 |
|
121 let headers = gPanelDoc.getElementById("custom-headers-value"); |
|
122 headers.addEventListener("focus", function onFocus() { |
|
123 headers.removeEventListener("focus", onFocus, false); |
|
124 |
|
125 // add a header |
|
126 type(["VK_RETURN"]); |
|
127 type(ADD_HEADER); |
|
128 |
|
129 let postData = gPanelDoc.getElementById("custom-postdata-value"); |
|
130 postData.addEventListener("focus", function onFocus() { |
|
131 postData.removeEventListener("focus", onFocus, false); |
|
132 |
|
133 // add to POST data |
|
134 type(ADD_POSTDATA); |
|
135 callback(); |
|
136 }, false); |
|
137 postData.focus(); |
|
138 }, false); |
|
139 headers.focus(); |
|
140 }, false); |
|
141 query.focus(); |
|
142 } |
|
143 |
|
144 /* |
|
145 * Make sure newly created event matches expected request |
|
146 */ |
|
147 function testSentRequest(aData, aOrigData) { |
|
148 is(aData.method, aOrigData.method, "correct method in sent request"); |
|
149 is(aData.url, aOrigData.url + "&" + ADD_QUERY, "correct url in sent request"); |
|
150 |
|
151 let hasHeader = aData.requestHeaders.headers.some((header) => { |
|
152 return (header.name + ": " + header.value) == ADD_HEADER; |
|
153 }) |
|
154 ok(hasHeader, "new header added to sent request"); |
|
155 |
|
156 is(aData.requestPostData.postData.text, |
|
157 aOrigData.requestPostData.postData.text + ADD_POSTDATA, |
|
158 "post data added to sent request"); |
|
159 } |
|
160 |
|
161 |
|
162 function type(aString) { |
|
163 for (let ch of aString) { |
|
164 EventUtils.synthesizeKey(ch, {}, gPanelWin); |
|
165 } |
|
166 } |
|
167 |
|
168 function finishUp(aMonitor) { |
|
169 gPanelWin = null; |
|
170 gPanelDoc = null; |
|
171 |
|
172 teardown(aMonitor).then(finish); |
|
173 } |