summaryrefslogtreecommitdiffstats
path: root/devtools/client/performance/test/browser_perf-tree-abstract-05.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/performance/test/browser_perf-tree-abstract-05.js')
-rw-r--r--devtools/client/performance/test/browser_perf-tree-abstract-05.js139
1 files changed, 139 insertions, 0 deletions
diff --git a/devtools/client/performance/test/browser_perf-tree-abstract-05.js b/devtools/client/performance/test/browser_perf-tree-abstract-05.js
new file mode 100644
index 0000000000..55cdb39224
--- /dev/null
+++ b/devtools/client/performance/test/browser_perf-tree-abstract-05.js
@@ -0,0 +1,139 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+"use strict";
+
+/**
+ * Tests if the abstract tree base class for the profiler's tree view
+ * supports PageUp/PageDown/Home/End keys.
+ */
+
+const {
+ appendAndWaitForPaint,
+} = require("devtools/client/performance/test/helpers/dom-utils");
+const {
+ synthesizeCustomTreeClass,
+} = require("devtools/client/performance/test/helpers/synth-utils");
+
+add_task(async function() {
+ const { MyCustomTreeItem } = synthesizeCustomTreeClass();
+
+ const container = document.createXULElement("vbox");
+ container.style.height = "100%";
+ container.style.overflow = "scroll";
+ const browserStack = gBrowser.selectedBrowser.parentNode;
+ // Allow the browser stack to shrink since it will have really long content
+ browserStack.style.minHeight = "0";
+ registerCleanupFunction(() => {
+ browserStack.style.removeProperty("min-height");
+ });
+ await appendAndWaitForPaint(browserStack, container);
+
+ const myDataSrc = {
+ label: "root",
+ children: [],
+ };
+
+ for (let i = 0; i < 1000; i++) {
+ myDataSrc.children.push({
+ label: "child-" + i,
+ children: [],
+ });
+ }
+
+ const treeRoot = new MyCustomTreeItem(myDataSrc, { parent: null });
+ treeRoot.attachTo(container);
+ treeRoot.focus();
+ treeRoot.expand();
+
+ is(
+ document.commandDispatcher.focusedElement,
+ treeRoot.target,
+ "The root node is focused."
+ );
+
+ // Test HOME and END
+
+ key("VK_END");
+ is(
+ document.commandDispatcher.focusedElement,
+ treeRoot.getChild(myDataSrc.children.length - 1).target,
+ "The last node is focused."
+ );
+
+ key("VK_HOME");
+ is(
+ document.commandDispatcher.focusedElement,
+ treeRoot.target,
+ "The first (root) node is focused."
+ );
+
+ // Test PageUp and PageDown
+
+ const nodesPerPageSize = treeRoot._getNodesPerPageSize();
+
+ key("VK_PAGE_DOWN");
+ is(
+ document.commandDispatcher.focusedElement,
+ treeRoot.getChild(nodesPerPageSize - 1).target,
+ "The first node in the second page is focused."
+ );
+
+ key("VK_PAGE_DOWN");
+ is(
+ document.commandDispatcher.focusedElement,
+ treeRoot.getChild(nodesPerPageSize * 2 - 1).target,
+ "The first node in the third page is focused."
+ );
+
+ key("VK_PAGE_UP");
+ is(
+ document.commandDispatcher.focusedElement,
+ treeRoot.getChild(nodesPerPageSize - 1).target,
+ "The first node in the second page is focused."
+ );
+
+ key("VK_PAGE_UP");
+ is(
+ document.commandDispatcher.focusedElement,
+ treeRoot.target,
+ "The first (root) node is focused."
+ );
+
+ // Test PageUp in the middle of the first page
+
+ let middleIndex = Math.floor(nodesPerPageSize / 2);
+
+ treeRoot.getChild(middleIndex).target.focus();
+ is(
+ document.commandDispatcher.focusedElement,
+ treeRoot.getChild(middleIndex).target,
+ "The middle node in the first page is focused."
+ );
+
+ key("VK_PAGE_UP");
+ is(
+ document.commandDispatcher.focusedElement,
+ treeRoot.target,
+ "The first (root) node is focused."
+ );
+
+ // Test PageDown in the middle of the last page
+
+ middleIndex = Math.ceil(myDataSrc.children.length - middleIndex);
+
+ treeRoot.getChild(middleIndex).target.focus();
+ is(
+ document.commandDispatcher.focusedElement,
+ treeRoot.getChild(middleIndex).target,
+ "The middle node in the last page is focused."
+ );
+
+ key("VK_PAGE_DOWN");
+ is(
+ document.commandDispatcher.focusedElement,
+ treeRoot.getChild(myDataSrc.children.length - 1).target,
+ "The last node is focused."
+ );
+
+ container.remove();
+});