summaryrefslogtreecommitdiffstats
path: root/devtools/client/framework/test/browser_toolbox_toggle.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/framework/test/browser_toolbox_toggle.js')
-rw-r--r--devtools/client/framework/test/browser_toolbox_toggle.js108
1 files changed, 108 insertions, 0 deletions
diff --git a/devtools/client/framework/test/browser_toolbox_toggle.js b/devtools/client/framework/test/browser_toolbox_toggle.js
new file mode 100644
index 000000000..d5b6d0e96
--- /dev/null
+++ b/devtools/client/framework/test/browser_toolbox_toggle.js
@@ -0,0 +1,108 @@
+/* -*- 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";
+
+// Test toggling the toolbox with ACCEL+SHIFT+I / ACCEL+ALT+I and F12 in docked
+// and detached (window) modes.
+
+const URL = "data:text/html;charset=utf-8,Toggling devtools using shortcuts";
+
+var {Toolbox} = require("devtools/client/framework/toolbox");
+
+add_task(function* () {
+ // Make sure this test starts with the selectedTool pref cleared. Previous
+ // tests select various tools, and that sets this pref.
+ Services.prefs.clearUserPref("devtools.toolbox.selectedTool");
+
+ // Test with ACCEL+SHIFT+I / ACCEL+ALT+I (MacOSX) ; modifiers should match :
+ // - toolbox-key-toggle in devtools/client/framework/toolbox-window.xul
+ // - key_devToolboxMenuItem in browser/base/content/browser.xul
+ info("Test toggle using CTRL+SHIFT+I/CMD+ALT+I");
+ yield testToggle("I", {
+ accelKey: true,
+ shiftKey: !navigator.userAgent.match(/Mac/),
+ altKey: navigator.userAgent.match(/Mac/)
+ });
+
+ // Test with F12 ; no modifiers
+ info("Test toggle using F12");
+ yield testToggle("VK_F12", {});
+});
+
+function* testToggle(key, modifiers) {
+ let tab = yield addTab(URL + " ; key : '" + key + "'");
+ yield gDevTools.showToolbox(TargetFactory.forTab(tab));
+
+ yield testToggleDockedToolbox(tab, key, modifiers);
+ yield testToggleDetachedToolbox(tab, key, modifiers);
+
+ yield cleanup();
+}
+
+function* testToggleDockedToolbox(tab, key, modifiers) {
+ let toolbox = getToolboxForTab(tab);
+
+ isnot(toolbox.hostType, Toolbox.HostType.WINDOW,
+ "Toolbox is docked in the main window");
+
+ info("verify docked toolbox is destroyed when using toggle key");
+ let onToolboxDestroyed = once(gDevTools, "toolbox-destroyed");
+ EventUtils.synthesizeKey(key, modifiers);
+ yield onToolboxDestroyed;
+ ok(true, "Docked toolbox is destroyed when using a toggle key");
+
+ info("verify new toolbox is created when using toggle key");
+ let onToolboxReady = once(gDevTools, "toolbox-ready");
+ EventUtils.synthesizeKey(key, modifiers);
+ yield onToolboxReady;
+ ok(true, "Toolbox is created by using when toggle key");
+}
+
+function* testToggleDetachedToolbox(tab, key, modifiers) {
+ let toolbox = getToolboxForTab(tab);
+
+ info("change the toolbox hostType to WINDOW");
+
+ yield toolbox.switchHost(Toolbox.HostType.WINDOW);
+ is(toolbox.hostType, Toolbox.HostType.WINDOW,
+ "Toolbox opened on separate window");
+
+ info("Wait for focus on the toolbox window");
+ yield new Promise(res => waitForFocus(res, toolbox.win));
+
+ info("Focus main window to put the toolbox window in the background");
+
+ let onMainWindowFocus = once(window, "focus");
+ window.focus();
+ yield onMainWindowFocus;
+ ok(true, "Main window focused");
+
+ info("Verify windowed toolbox is focused instead of closed when using " +
+ "toggle key from the main window");
+ let toolboxWindow = toolbox.win.top;
+ let onToolboxWindowFocus = once(toolboxWindow, "focus", true);
+ EventUtils.synthesizeKey(key, modifiers);
+ yield onToolboxWindowFocus;
+ ok(true, "Toolbox focused and not destroyed");
+
+ info("Verify windowed toolbox is destroyed when using toggle key from its " +
+ "own window");
+
+ let onToolboxDestroyed = once(gDevTools, "toolbox-destroyed");
+ EventUtils.synthesizeKey(key, modifiers, toolboxWindow);
+ yield onToolboxDestroyed;
+ ok(true, "Toolbox destroyed");
+}
+
+function getToolboxForTab(tab) {
+ return gDevTools.getToolbox(TargetFactory.forTab(tab));
+}
+
+function* cleanup() {
+ Services.prefs.setCharPref("devtools.toolbox.host",
+ Toolbox.HostType.BOTTOM);
+ gBrowser.removeCurrentTab();
+}