summaryrefslogtreecommitdiff
path: root/toolkit/devtools/performance/test/browser_profiler_tree-abstract-01.js
diff options
context:
space:
mode:
authorMatt A. Tobin <email@mattatobin.com>2016-10-16 19:34:53 -0400
committerMatt A. Tobin <email@mattatobin.com>2016-10-16 19:34:53 -0400
commit81805ce3f63e2e4a799bd54f174083c58a9b5640 (patch)
tree6e13374b213ac9b2ae74c25d8aac875faf71fdd0 /toolkit/devtools/performance/test/browser_profiler_tree-abstract-01.js
parent28c8da71bf521bb3ee76f27b8a241919e24b7cd5 (diff)
downloadpalemoon-gre-81805ce3f63e2e4a799bd54f174083c58a9b5640.tar.gz
Move Mozilla DevTools to Platform - Part 3: Merge the browser/devtools and toolkit/devtools adjusting for directory collisions
Diffstat (limited to 'toolkit/devtools/performance/test/browser_profiler_tree-abstract-01.js')
-rw-r--r--toolkit/devtools/performance/test/browser_profiler_tree-abstract-01.js175
1 files changed, 175 insertions, 0 deletions
diff --git a/toolkit/devtools/performance/test/browser_profiler_tree-abstract-01.js b/toolkit/devtools/performance/test/browser_profiler_tree-abstract-01.js
new file mode 100644
index 000000000..fbd8c381d
--- /dev/null
+++ b/toolkit/devtools/performance/test/browser_profiler_tree-abstract-01.js
@@ -0,0 +1,175 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Tests if the abstract tree base class for the profiler's tree view
+ * works as advertised.
+ */
+
+let { AbstractTreeItem } = Cu.import("resource:///modules/devtools/AbstractTreeItem.jsm", {});
+let { Heritage } = Cu.import("resource:///modules/devtools/ViewHelpers.jsm", {});
+
+function spawnTest () {
+ let container = document.createElement("vbox");
+ gBrowser.selectedBrowser.parentNode.appendChild(container);
+
+ // Populate the tree and test the root item...
+
+ let treeRoot = new MyCustomTreeItem(gDataSrc, { parent: null });
+ treeRoot.attachTo(container);
+
+ is(container.childNodes.length, 1,
+ "The container node should have one child available.");
+ is(container.childNodes[0], treeRoot.target,
+ "The root node's target is a child of the container node.");
+
+ is(treeRoot.root, treeRoot,
+ "The root node has the correct root.");
+ is(treeRoot.parent, null,
+ "The root node has the correct parent.");
+ is(treeRoot.level, 0,
+ "The root node has the correct level.");
+ is(treeRoot.target.MozMarginStart, "0px",
+ "The root node's indentation is correct.");
+ is(treeRoot.target.textContent, "root",
+ "The root node's text contents are correct.");
+ is(treeRoot.container, container,
+ "The root node's container is correct.");
+
+ // Expand the root and test the child items...
+
+ let receivedExpandEvent = treeRoot.once("expand");
+ EventUtils.sendMouseEvent({ type: "mousedown" }, treeRoot.target.querySelector(".arrow"));
+
+ let eventItem = yield receivedExpandEvent;
+ is(eventItem, treeRoot,
+ "The 'expand' event target is correct.");
+ is(document.commandDispatcher.focusedElement, treeRoot.target,
+ "The root node is now focused.");
+
+ let fooItem = treeRoot.getChild(0);
+ let barItem = treeRoot.getChild(1);
+
+ is(container.childNodes.length, 3,
+ "The container node should now have three children available.");
+ is(container.childNodes[0], treeRoot.target,
+ "The root node's target is a child of the container node.");
+ is(container.childNodes[1], fooItem.target,
+ "The 'foo' node's target is a child of the container node.");
+ is(container.childNodes[2], barItem.target,
+ "The 'bar' node's target is a child of the container node.");
+
+ is(fooItem.root, treeRoot,
+ "The 'foo' node has the correct root.");
+ is(fooItem.parent, treeRoot,
+ "The 'foo' node has the correct parent.");
+ is(fooItem.level, 1,
+ "The 'foo' node has the correct level.");
+ is(fooItem.target.MozMarginStart, "10px",
+ "The 'foo' node's indentation is correct.");
+ is(fooItem.target.textContent, "foo",
+ "The 'foo' node's text contents are correct.");
+ is(fooItem.container, container,
+ "The 'foo' node's container is correct.");
+
+ is(barItem.root, treeRoot,
+ "The 'bar' node has the correct root.");
+ is(barItem.parent, treeRoot,
+ "The 'bar' node has the correct parent.");
+ is(barItem.level, 1,
+ "The 'bar' node has the correct level.");
+ is(barItem.target.MozMarginStart, "10px",
+ "The 'bar' node's indentation is correct.");
+ is(barItem.target.textContent, "bar",
+ "The 'bar' node's text contents are correct.");
+ is(barItem.container, container,
+ "The 'bar' node's container is correct.");
+
+ // Test other events on the child nodes...
+
+ let receivedFocusEvent = treeRoot.once("focus");
+ EventUtils.sendMouseEvent({ type: "mousedown" }, fooItem.target);
+
+ eventItem = yield receivedFocusEvent;
+ is(eventItem, fooItem,
+ "The 'focus' event target is correct.");
+ is(document.commandDispatcher.focusedElement, fooItem.target,
+ "The 'foo' node is now focused.");
+
+ let receivedDblClickEvent = treeRoot.once("focus");
+ EventUtils.sendMouseEvent({ type: "dblclick" }, barItem.target);
+
+ eventItem = yield receivedDblClickEvent;
+ is(eventItem, barItem,
+ "The 'dblclick' event target is correct.");
+ is(document.commandDispatcher.focusedElement, barItem.target,
+ "The 'bar' node is now focused.");
+
+ // A child item got expanded, test the descendants...
+
+ let bazItem = barItem.getChild(0);
+
+ is(container.childNodes.length, 4,
+ "The container node should now have four children available.");
+ is(container.childNodes[0], treeRoot.target,
+ "The root node's target is a child of the container node.");
+ is(container.childNodes[1], fooItem.target,
+ "The 'foo' node's target is a child of the container node.");
+ is(container.childNodes[2], barItem.target,
+ "The 'bar' node's target is a child of the container node.");
+ is(container.childNodes[3], bazItem.target,
+ "The 'baz' node's target is a child of the container node.");
+
+ is(bazItem.root, treeRoot,
+ "The 'baz' node has the correct root.");
+ is(bazItem.parent, barItem,
+ "The 'baz' node has the correct parent.");
+ is(bazItem.level, 2,
+ "The 'baz' node has the correct level.");
+ is(bazItem.target.MozMarginStart, "20px",
+ "The 'baz' node's indentation is correct.");
+ is(bazItem.target.textContent, "baz",
+ "The 'baz' node's text contents are correct.");
+ is(bazItem.container, container,
+ "The 'baz' node's container is correct.");
+
+ container.remove();
+ finish();
+}
+
+function MyCustomTreeItem(dataSrc, properties) {
+ AbstractTreeItem.call(this, properties);
+ this.itemDataSrc = dataSrc;
+}
+
+MyCustomTreeItem.prototype = Heritage.extend(AbstractTreeItem.prototype, {
+ _displaySelf: function(document, arrowNode) {
+ let node = document.createElement("hbox");
+ node.MozMarginStart = (this.level * 10) + "px";
+ node.appendChild(arrowNode);
+ node.appendChild(document.createTextNode(this.itemDataSrc.label));
+ return node;
+ },
+ _populateSelf: function(children) {
+ for (let childDataSrc of this.itemDataSrc.children) {
+ children.push(new MyCustomTreeItem(childDataSrc, {
+ parent: this,
+ level: this.level + 1
+ }));
+ }
+ }
+});
+
+let gDataSrc = {
+ label: "root",
+ children: [{
+ label: "foo",
+ children: []
+ }, {
+ label: "bar",
+ children: [{
+ label: "baz",
+ children: []
+ }]
+ }]
+};