123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
- /* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
- "use strict";
- const TEST_URI = "data:text/html;charset=utf-8,Web Console test for splitting";
- function test() {
- waitForExplicitFinish();
- SpecialPowers.pushPrefEnv({"set": [["dom.ipc.processCount", 1]]}, runTest);
- }
- function runTest() {
- // Test is slow on Linux EC2 instances - Bug 962931
- requestLongerTimeout(2);
- let {Toolbox} = require("devtools/client/framework/toolbox");
- let toolbox;
- loadTab(TEST_URI).then(testConsoleLoadOnDifferentPanel);
- function testConsoleLoadOnDifferentPanel() {
- info("About to check console loads even when non-webconsole panel is open");
- openPanel("inspector").then(() => {
- toolbox.on("webconsole-ready", () => {
- ok(true, "Webconsole has been triggered as loaded while another tool " +
- "is active");
- testKeyboardShortcuts();
- });
- // Opens split console.
- toolbox.toggleSplitConsole();
- });
- }
- function testKeyboardShortcuts() {
- info("About to check that panel responds to ESCAPE keyboard shortcut");
- toolbox.once("split-console", () => {
- ok(true, "Split console has been triggered via ESCAPE keypress");
- checkAllTools();
- });
- // Closes split console.
- EventUtils.sendKey("ESCAPE", toolbox.win);
- }
- function checkAllTools() {
- info("About to check split console with each panel individually.");
- Task.spawn(function* () {
- yield openAndCheckPanel("jsdebugger");
- yield openAndCheckPanel("inspector");
- yield openAndCheckPanel("styleeditor");
- yield openAndCheckPanel("performance");
- yield openAndCheckPanel("netmonitor");
- yield checkWebconsolePanelOpened();
- testBottomHost();
- });
- }
- function getCurrentUIState() {
- let win = toolbox.win;
- let deck = toolbox.doc.querySelector("#toolbox-deck");
- let webconsolePanel = toolbox.webconsolePanel;
- let splitter = toolbox.doc.querySelector("#toolbox-console-splitter");
- let containerHeight = parseFloat(win.getComputedStyle(deck.parentNode)
- .getPropertyValue("height"));
- let deckHeight = parseFloat(win.getComputedStyle(deck)
- .getPropertyValue("height"));
- let webconsoleHeight = parseFloat(win.getComputedStyle(webconsolePanel)
- .getPropertyValue("height"));
- let splitterVisibility = !splitter.getAttribute("hidden");
- let openedConsolePanel = toolbox.currentToolId === "webconsole";
- let cmdButton = toolbox.doc.querySelector("#command-button-splitconsole");
- return {
- deckHeight: deckHeight,
- containerHeight: containerHeight,
- webconsoleHeight: webconsoleHeight,
- splitterVisibility: splitterVisibility,
- openedConsolePanel: openedConsolePanel,
- buttonSelected: cmdButton.hasAttribute("checked")
- };
- }
- function checkWebconsolePanelOpened() {
- info("About to check special cases when webconsole panel is open.");
- let deferred = promise.defer();
- // Start with console split, so we can test for transition to main panel.
- toolbox.toggleSplitConsole();
- let currentUIState = getCurrentUIState();
- ok(currentUIState.splitterVisibility,
- "Splitter is visible when console is split");
- ok(currentUIState.deckHeight > 0,
- "Deck has a height > 0 when console is split");
- ok(currentUIState.webconsoleHeight > 0,
- "Web console has a height > 0 when console is split");
- ok(!currentUIState.openedConsolePanel,
- "The console panel is not the current tool");
- ok(currentUIState.buttonSelected, "The command button is selected");
- openPanel("webconsole").then(() => {
- currentUIState = getCurrentUIState();
- ok(!currentUIState.splitterVisibility,
- "Splitter is hidden when console is opened.");
- is(currentUIState.deckHeight, 0,
- "Deck has a height == 0 when console is opened.");
- is(currentUIState.webconsoleHeight, currentUIState.containerHeight,
- "Web console is full height.");
- ok(currentUIState.openedConsolePanel,
- "The console panel is the current tool");
- ok(currentUIState.buttonSelected,
- "The command button is still selected.");
- // Make sure splitting console does nothing while webconsole is opened
- toolbox.toggleSplitConsole();
- currentUIState = getCurrentUIState();
- ok(!currentUIState.splitterVisibility,
- "Splitter is hidden when console is opened.");
- is(currentUIState.deckHeight, 0,
- "Deck has a height == 0 when console is opened.");
- is(currentUIState.webconsoleHeight, currentUIState.containerHeight,
- "Web console is full height.");
- ok(currentUIState.openedConsolePanel,
- "The console panel is the current tool");
- ok(currentUIState.buttonSelected,
- "The command button is still selected.");
- // Make sure that split state is saved after opening another panel
- openPanel("inspector").then(() => {
- currentUIState = getCurrentUIState();
- ok(currentUIState.splitterVisibility,
- "Splitter is visible when console is split");
- ok(currentUIState.deckHeight > 0,
- "Deck has a height > 0 when console is split");
- ok(currentUIState.webconsoleHeight > 0,
- "Web console has a height > 0 when console is split");
- ok(!currentUIState.openedConsolePanel,
- "The console panel is not the current tool");
- ok(currentUIState.buttonSelected,
- "The command button is still selected.");
- toolbox.toggleSplitConsole();
- deferred.resolve();
- });
- });
- return deferred.promise;
- }
- function openPanel(toolId) {
- let deferred = promise.defer();
- let target = TargetFactory.forTab(gBrowser.selectedTab);
- gDevTools.showToolbox(target, toolId).then(function (box) {
- toolbox = box;
- deferred.resolve();
- }).then(null, console.error);
- return deferred.promise;
- }
- function openAndCheckPanel(toolId) {
- let deferred = promise.defer();
- openPanel(toolId).then(() => {
- info("Checking toolbox for " + toolId);
- checkToolboxUI(toolbox.getCurrentPanel());
- deferred.resolve();
- });
- return deferred.promise;
- }
- function checkToolboxUI() {
- let currentUIState = getCurrentUIState();
- ok(!currentUIState.splitterVisibility, "Splitter is hidden by default");
- is(currentUIState.deckHeight, currentUIState.containerHeight,
- "Deck has a height > 0 by default");
- is(currentUIState.webconsoleHeight, 0,
- "Web console is collapsed by default");
- ok(!currentUIState.openedConsolePanel,
- "The console panel is not the current tool");
- ok(!currentUIState.buttonSelected, "The command button is not selected.");
- toolbox.toggleSplitConsole();
- currentUIState = getCurrentUIState();
- ok(currentUIState.splitterVisibility,
- "Splitter is visible when console is split");
- ok(currentUIState.deckHeight > 0,
- "Deck has a height > 0 when console is split");
- ok(currentUIState.webconsoleHeight > 0,
- "Web console has a height > 0 when console is split");
- is(Math.round(currentUIState.deckHeight + currentUIState.webconsoleHeight),
- currentUIState.containerHeight,
- "Everything adds up to container height");
- ok(!currentUIState.openedConsolePanel,
- "The console panel is not the current tool");
- ok(currentUIState.buttonSelected, "The command button is selected.");
- toolbox.toggleSplitConsole();
- currentUIState = getCurrentUIState();
- ok(!currentUIState.splitterVisibility, "Splitter is hidden after toggling");
- is(currentUIState.deckHeight, currentUIState.containerHeight,
- "Deck has a height > 0 after toggling");
- is(currentUIState.webconsoleHeight, 0,
- "Web console is collapsed after toggling");
- ok(!currentUIState.openedConsolePanel,
- "The console panel is not the current tool");
- ok(!currentUIState.buttonSelected, "The command button is not selected.");
- }
- function testBottomHost() {
- checkHostType(Toolbox.HostType.BOTTOM);
- checkToolboxUI();
- toolbox.switchHost(Toolbox.HostType.SIDE).then(testSidebarHost);
- }
- function testSidebarHost() {
- checkHostType(Toolbox.HostType.SIDE);
- checkToolboxUI();
- toolbox.switchHost(Toolbox.HostType.WINDOW).then(testWindowHost);
- }
- function testWindowHost() {
- checkHostType(Toolbox.HostType.WINDOW);
- checkToolboxUI();
- toolbox.switchHost(Toolbox.HostType.BOTTOM).then(testDestroy);
- }
- function checkHostType(hostType) {
- is(toolbox.hostType, hostType, "host type is " + hostType);
- let pref = Services.prefs.getCharPref("devtools.toolbox.host");
- is(pref, hostType, "host pref is " + hostType);
- }
- function testDestroy() {
- toolbox.destroy().then(function () {
- let target = TargetFactory.forTab(gBrowser.selectedTab);
- gDevTools.showToolbox(target).then(finish);
- });
- }
- function finish() {
- toolbox = null;
- finishTest();
- }
- }
|