1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
/* 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(function* () {
let { MyCustomTreeItem } = synthesizeCustomTreeClass();
let container = document.createElement("vbox");
container.style.height = "100%";
container.style.overflow = "scroll";
yield appendAndWaitForPaint(gBrowser.selectedBrowser.parentNode, container);
let myDataSrc = {
label: "root",
children: []
};
for (let i = 0; i < 1000; i++) {
myDataSrc.children.push({
label: "child-" + i,
children: []
});
}
let 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
let 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();
});
|