summaryrefslogtreecommitdiffstats
path: root/devtools/client/framework/test/browser_toolbox_select_event.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/framework/test/browser_toolbox_select_event.js')
-rw-r--r--devtools/client/framework/test/browser_toolbox_select_event.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/devtools/client/framework/test/browser_toolbox_select_event.js b/devtools/client/framework/test/browser_toolbox_select_event.js
new file mode 100644
index 000000000..ae104524e
--- /dev/null
+++ b/devtools/client/framework/test/browser_toolbox_select_event.js
@@ -0,0 +1,101 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const PAGE_URL = "data:text/html;charset=utf-8,test select events";
+
+requestLongerTimeout(2);
+
+add_task(function* () {
+ let tab = yield addTab(PAGE_URL);
+
+ let toolbox = yield openToolboxForTab(tab, "webconsole", "bottom");
+ yield testSelectEvent("inspector");
+ yield testSelectEvent("webconsole");
+ yield testSelectEvent("styleeditor");
+ yield testSelectEvent("inspector");
+ yield testSelectEvent("webconsole");
+ yield testSelectEvent("styleeditor");
+
+ yield testToolSelectEvent("inspector");
+ yield testToolSelectEvent("webconsole");
+ yield testToolSelectEvent("styleeditor");
+ yield toolbox.destroy();
+
+ toolbox = yield openToolboxForTab(tab, "webconsole", "side");
+ yield testSelectEvent("inspector");
+ yield testSelectEvent("webconsole");
+ yield testSelectEvent("styleeditor");
+ yield testSelectEvent("inspector");
+ yield testSelectEvent("webconsole");
+ yield testSelectEvent("styleeditor");
+ yield toolbox.destroy();
+
+ toolbox = yield openToolboxForTab(tab, "webconsole", "window");
+ yield testSelectEvent("inspector");
+ yield testSelectEvent("webconsole");
+ yield testSelectEvent("styleeditor");
+ yield testSelectEvent("inspector");
+ yield testSelectEvent("webconsole");
+ yield testSelectEvent("styleeditor");
+ yield toolbox.destroy();
+
+ yield testSelectToolRace();
+
+ /**
+ * Assert that selecting the given toolId raises a select event
+ * @param {toolId} Id of the tool to test
+ */
+ function* testSelectEvent(toolId) {
+ let onSelect = toolbox.once("select");
+ toolbox.selectTool(toolId);
+ let id = yield onSelect;
+ is(id, toolId, toolId + " selected");
+ }
+
+ /**
+ * Assert that selecting the given toolId raises its corresponding
+ * selected event
+ * @param {toolId} Id of the tool to test
+ */
+ function* testToolSelectEvent(toolId) {
+ let onSelected = toolbox.once(toolId + "-selected");
+ toolbox.selectTool(toolId);
+ yield onSelected;
+ is(toolbox.currentToolId, toolId, toolId + " tool selected");
+ }
+
+ /**
+ * Assert that two calls to selectTool won't race
+ */
+ function* testSelectToolRace() {
+ let toolbox = yield openToolboxForTab(tab, "webconsole");
+ let selected = false;
+ let onSelect = (event, id) => {
+ if (selected) {
+ ok(false, "Got more than one 'select' event");
+ } else {
+ selected = true;
+ }
+ };
+ toolbox.once("select", onSelect);
+ let p1 = toolbox.selectTool("inspector")
+ let p2 = toolbox.selectTool("inspector");
+ // Check that both promises don't resolve too early
+ let checkSelectToolResolution = panel => {
+ ok(selected, "selectTool resolves only after 'select' event is fired");
+ let inspector = toolbox.getPanel("inspector");
+ is(panel, inspector, "selecTool resolves to the panel instance");
+ };
+ p1.then(checkSelectToolResolution);
+ p2.then(checkSelectToolResolution);
+ yield p1;
+ yield p2;
+
+ yield toolbox.destroy();
+ }
+});
+