Backed out 2 changesets (bug 1943998) for causing wd failures @ phases.py CLOSED...
[gecko.git] / devtools / client / netmonitor / test / browser_net_ws-messages-navigation.js
blob4555dc27eb8104904261e41b1418bc1e1019046f
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
4 "use strict";
6 /**
7 * Test that WS messages can be navigated between using the keyboard.
8 */
10 add_task(async function () {
11 const { tab, monitor } = await initNetMonitor(WS_PAGE_URL, {
12 requestCount: 1,
13 });
14 info("Starting test... ");
16 const { document, store, windowRequire } = monitor.panelWin;
17 const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
19 store.dispatch(Actions.batchEnable(false));
21 // Wait for WS connections to be established + send messages
22 const onNetworkEvents = waitForNetworkEvents(monitor, 1);
23 await SpecialPowers.spawn(tab.linkedBrowser, [], async () => {
24 await content.wrappedJSObject.openConnection(0);
25 // Send 5 WS messages
26 Array(5)
27 .fill(undefined)
28 .forEach((_, index) => {
29 content.wrappedJSObject.sendData(index);
30 });
31 });
32 await onNetworkEvents;
34 const requests = document.querySelectorAll(".request-list-item");
35 is(requests.length, 1, "There should be one request");
37 // Wait for all sent/received messages to be displayed in DevTools
38 const wait = waitForDOM(
39 document,
40 "#messages-view .message-list-table .message-list-item",
44 // Select the first request
45 EventUtils.sendMouseEvent({ type: "mousedown" }, requests[0]);
47 // Click on the "Response" panel
48 clickOnSidebarTab(document, "response");
49 await wait;
51 // Get all messages present in the "Response" panel
52 const frames = document.querySelectorAll(
53 "#messages-view .message-list-table .message-list-item"
56 // Check expected results
57 is(frames.length, 10, "There should be ten frames");
58 // Wait for next tick to do async stuff (The MessagePayload component uses the async function getMessagePayload)
59 await waitForTick();
61 const waitForSelected = waitForDOM(
62 document,
63 // The first message is actually the second child, there is a hidden row.
64 `.message-list-item:nth-child(${2}).selected`
66 EventUtils.sendMouseEvent({ type: "mousedown" }, frames[0]);
67 await waitForSelected;
69 const checkSelected = messageRowNumber => {
70 is(
71 Array.from(frames).findIndex(el => el.matches(".selected")),
72 messageRowNumber - 1,
73 `Message ${messageRowNumber} should be selected.`
77 // Need focus for keyboard shortcuts to work
78 frames[0].focus();
80 checkSelected(1);
82 EventUtils.sendKey("DOWN", window);
83 checkSelected(2);
85 EventUtils.sendKey("UP", window);
86 checkSelected(1);
88 EventUtils.sendKey("PAGE_DOWN", window);
89 checkSelected(3);
91 EventUtils.sendKey("PAGE_UP", window);
92 checkSelected(1);
94 EventUtils.sendKey("END", window);
95 checkSelected(10);
97 EventUtils.sendKey("HOME", window);
98 checkSelected(1);
100 // Close WS connection
101 await SpecialPowers.spawn(tab.linkedBrowser, [], async () => {
102 await content.wrappedJSObject.closeConnection();
105 await teardown(monitor);