mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
250 lines
8.9 KiB
JavaScript
250 lines
8.9 KiB
JavaScript
/* vim:set ts=2 sw=2 sts=2 et: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
function test()
|
|
{
|
|
// Test is slow on Linux EC2 instances - Bug 962931
|
|
requestLongerTimeout(2);
|
|
|
|
let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
|
|
let {Task} = Cu.import("resource://gre/modules/Task.jsm", {});
|
|
let Toolbox = devtools.Toolbox;
|
|
let toolbox;
|
|
|
|
addTab("data:text/html;charset=utf-8,Web Console test for splitting");
|
|
browser.addEventListener("load", function onLoad() {
|
|
browser.removeEventListener("load", onLoad, true);
|
|
testConsoleLoadOnDifferentPanel()
|
|
}, true);
|
|
|
|
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.frame.contentWindow);
|
|
}
|
|
|
|
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("jsprofiler");
|
|
yield openAndCheckPanel("netmonitor");
|
|
|
|
yield checkWebconsolePanelOpened();
|
|
testBottomHost();
|
|
});
|
|
}
|
|
|
|
function getCurrentUIState()
|
|
{
|
|
let win = toolbox.doc.defaultView;
|
|
let deck = toolbox.doc.querySelector("#toolbox-deck");
|
|
let webconsolePanel = toolbox.doc.querySelector("#toolbox-panel-webconsole");
|
|
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(() => {
|
|
|
|
let 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();
|
|
|
|
let 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(() => {
|
|
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 still selected.");
|
|
|
|
toolbox.toggleSplitConsole();
|
|
deferred.resolve();
|
|
|
|
});
|
|
});
|
|
return deferred.promise;
|
|
}
|
|
|
|
function openPanel(toolId, callback)
|
|
{
|
|
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();
|
|
|
|
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");
|
|
is (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();
|
|
|
|
let 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();
|
|
}
|
|
}
|