summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/test/browser_net_column-resize-fit.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--devtools/client/netmonitor/test/browser_net_column-resize-fit.js95
1 files changed, 95 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/test/browser_net_column-resize-fit.js b/devtools/client/netmonitor/test/browser_net_column-resize-fit.js
new file mode 100644
index 0000000000..7cb60a8c38
--- /dev/null
+++ b/devtools/client/netmonitor/test/browser_net_column-resize-fit.js
@@ -0,0 +1,95 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests resizing of columns in NetMonitor.
+ */
+add_task(async function () {
+ // Reset visibleColumns so we only get the default ones
+ // and not all that are set in head.js
+ Services.prefs.clearUserPref("devtools.netmonitor.visibleColumns");
+ const visibleColumns = JSON.parse(
+ Services.prefs.getCharPref("devtools.netmonitor.visibleColumns")
+ );
+ // Init network monitor
+ const { monitor } = await initNetMonitor(SIMPLE_URL, {
+ requestCount: 1,
+ });
+ info("Starting test... ");
+
+ const { document } = monitor.panelWin;
+
+ // Wait for network events (to have some requests in the table)
+ const wait = waitForNetworkEvents(monitor, 1);
+ await reloadBrowser();
+ await wait;
+
+ info("Testing column resize to fit using double-click on draggable resizer");
+ const fileHeader = document.querySelector(`#requests-list-file-header-box`);
+ const fileColumnResizer = fileHeader.querySelector(".column-resizer");
+
+ EventUtils.sendMouseEvent({ type: "dblclick" }, fileColumnResizer);
+
+ // After resize - get fresh prefs for tests.
+ let columnsData = JSON.parse(
+ Services.prefs.getCharPref("devtools.netmonitor.columnsData")
+ );
+
+ // `File` column before resize: 25%, after resize: 11.25%
+ // `Transferred` column before resize: 10%, after resize: 10%
+ checkColumnsData(columnsData, "file", 12);
+ checkSumOfVisibleColumns(columnsData, visibleColumns);
+
+ info(
+ "Testing column resize to fit using context menu `Resize Column To Fit Content`"
+ );
+
+ // Resizing `transferred` column.
+ EventUtils.sendMouseEvent(
+ { type: "contextmenu" },
+ document.querySelector("#requests-list-transferred-button")
+ );
+
+ await selectContextMenuItem(
+ monitor,
+ "request-list-header-resize-column-to-fit-content"
+ );
+
+ columnsData = JSON.parse(
+ Services.prefs.getCharPref("devtools.netmonitor.columnsData")
+ );
+
+ // `Transferred` column before resize: 10%, after resize: 2.97%
+ checkColumnsData(columnsData, "transferred", 3);
+ checkSumOfVisibleColumns(columnsData, visibleColumns);
+
+ // Done: clean up.
+ return teardown(monitor);
+});
+
+function checkColumnsData(columnsData, column, expectedWidth) {
+ const width = getWidthFromPref(columnsData, column);
+ const widthsDiff = Math.abs(width - expectedWidth);
+ ok(
+ widthsDiff < 2,
+ `Column ${column} has expected size. Got ${width}, Expected ${expectedWidth}`
+ );
+}
+
+function checkSumOfVisibleColumns(columnsData, visibleColumns) {
+ let sum = 0;
+ visibleColumns.forEach(column => {
+ sum += getWidthFromPref(columnsData, column);
+ });
+ sum = Math.round(sum);
+ is(sum, 100, "All visible columns cover 100%.");
+}
+
+function getWidthFromPref(columnsData, column) {
+ const widthInPref = columnsData.find(function (element) {
+ return element.name === column;
+ }).width;
+ return widthInPref;
+}