diff options
Diffstat (limited to 'devtools/client/netmonitor/test/browser_net_copy_params.js')
-rw-r--r-- | devtools/client/netmonitor/test/browser_net_copy_params.js | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/test/browser_net_copy_params.js b/devtools/client/netmonitor/test/browser_net_copy_params.js new file mode 100644 index 0000000000..b1f4006821 --- /dev/null +++ b/devtools/client/netmonitor/test/browser_net_copy_params.js @@ -0,0 +1,167 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/** + * Tests whether copying a request item's parameters works. + */ + +add_task(async function () { + const { tab, monitor } = await initNetMonitor(PARAMS_URL, { + requestCount: 1, + }); + info("Starting test... "); + + const { document, store, windowRequire } = monitor.panelWin; + const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); + + store.dispatch(Actions.batchEnable(false)); + + // Execute requests. + await performRequests(monitor, tab, 7); + + await testCopyUrlParamsHidden(0, false); + await testCopyUrlParams(0, "a"); + await testCopyPostDataHidden(0, false); + await testCopyPostData(0, '{ "foo": "bar" }'); + + await testCopyUrlParamsHidden(1, false); + await testCopyUrlParams(1, "a=b"); + await testCopyPostDataHidden(1, false); + await testCopyPostData(1, '{ "foo": "bar" }'); + + await testCopyUrlParamsHidden(2, false); + await testCopyUrlParams(2, "a=b"); + await testCopyPostDataHidden(2, false); + await testCopyPostData(2, "foo=bar=123=xyz"); + + await testCopyUrlParamsHidden(3, false); + await testCopyUrlParams(3, "a"); + await testCopyPostDataHidden(3, false); + await testCopyPostData(3, '{ "foo": "bar" }'); + + await testCopyUrlParamsHidden(4, false); + await testCopyUrlParams(4, "a=b"); + await testCopyPostDataHidden(4, false); + await testCopyPostData(4, '{ "foo": "bar" }'); + + await testCopyUrlParamsHidden(5, false); + await testCopyUrlParams(5, "a=b"); + await testCopyPostDataHidden(5, false); + await testCopyPostData(5, "?foo=bar"); + testCopyRequestDataLabel(5, "POST"); + + await testCopyUrlParamsHidden(6, true); + await testCopyPostDataHidden(6, true); + + await testCopyPostDataHidden(7, false); + testCopyRequestDataLabel(7, "PATCH"); + + await testCopyPostDataHidden(8, false); + testCopyRequestDataLabel(8, "PUT"); + + return teardown(monitor); + + async function testCopyUrlParamsHidden(index, hidden) { + EventUtils.sendMouseEvent( + { type: "mousedown" }, + document.querySelectorAll(".request-list-item")[index] + ); + EventUtils.sendMouseEvent( + { type: "contextmenu" }, + document.querySelectorAll(".request-list-item")[index] + ); + + is( + !!getContextMenuItem(monitor, "request-list-context-copy-url-params"), + !hidden, + 'The "Copy URL Parameters" context menu item should' + + (hidden ? " " : " not ") + + "be hidden." + ); + } + + async function testCopyUrlParams(index, queryString) { + EventUtils.sendMouseEvent( + { type: "mousedown" }, + document.querySelectorAll(".request-list-item")[index] + ); + EventUtils.sendMouseEvent( + { type: "contextmenu" }, + document.querySelectorAll(".request-list-item")[index] + ); + await waitForClipboardPromise(async function setup() { + await selectContextMenuItem( + monitor, + "request-list-context-copy-url-params" + ); + }, queryString); + ok(true, "The url query string copied from the selected item is correct."); + } + + async function testCopyPostDataHidden(index, hidden) { + EventUtils.sendMouseEvent( + { type: "mousedown" }, + document.querySelectorAll(".request-list-item")[index] + ); + EventUtils.sendMouseEvent( + { type: "contextmenu" }, + document.querySelectorAll(".request-list-item")[index] + ); + is( + !!getContextMenuItem(monitor, "request-list-context-copy-post-data"), + !hidden, + 'The "Copy POST Data" context menu item should' + + (hidden ? " " : " not ") + + "be hidden." + ); + } + + function testCopyRequestDataLabel(index, method) { + EventUtils.sendMouseEvent( + { type: "mousedown" }, + document.querySelectorAll(".request-list-item")[index] + ); + EventUtils.sendMouseEvent( + { type: "contextmenu" }, + document.querySelectorAll(".request-list-item")[index] + ); + const copyPostDataNode = getContextMenuItem( + monitor, + "request-list-context-copy-post-data" + ); + is( + copyPostDataNode.attributes.label.value, + "Copy " + method + " Data", + 'The "Copy Data" context menu item should have label - Copy ' + + method + + " Data" + ); + } + + async function testCopyPostData(index, postData) { + // Wait for formDataSections and requestPostData state are ready in redux store + // since copyPostData API needs to read these state. + await waitUntil(() => { + const { requests } = store.getState().requests; + const { formDataSections, requestPostData } = requests[index]; + return formDataSections && requestPostData; + }); + EventUtils.sendMouseEvent( + { type: "mousedown" }, + document.querySelectorAll(".request-list-item")[index] + ); + EventUtils.sendMouseEvent( + { type: "contextmenu" }, + document.querySelectorAll(".request-list-item")[index] + ); + await waitForClipboardPromise(async function setup() { + await selectContextMenuItem( + monitor, + "request-list-context-copy-post-data" + ); + }, postData); + ok(true, "The post data string copied from the selected item is correct."); + } +}); |