diff -r 000000000000 -r 6474c204b198 browser/devtools/debugger/test/browser_dbg_host-layout.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/devtools/debugger/test/browser_dbg_host-layout.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,104 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * This if the debugger's layout is correctly modified when the toolbox's + * host changes. + */ + +let gDefaultHostType = Services.prefs.getCharPref("devtools.toolbox.host"); + +function test() { + Task.spawn(function() { + yield testHosts(["bottom", "side", "window"], ["horizontal", "vertical", "horizontal"]); + yield testHosts(["side", "bottom", "side"], ["vertical", "horizontal", "vertical"]); + yield testHosts(["bottom", "side", "bottom"], ["horizontal", "vertical", "horizontal"]); + yield testHosts(["side", "window", "side"], ["vertical", "horizontal", "vertical"]); + yield testHosts(["window", "side", "window"], ["horizontal", "vertical", "horizontal"]); + finish(); + }); +} + +function testHosts(aHostTypes, aLayoutTypes) { + let [firstHost, secondHost, thirdHost] = aHostTypes; + let [firstLayout, secondLayout, thirdLayout] = aLayoutTypes; + + Services.prefs.setCharPref("devtools.toolbox.host", firstHost); + + return Task.spawn(function() { + let [tab, debuggee, panel] = yield initDebugger("about:blank"); + yield testHost(tab, debuggee, panel, firstHost, firstLayout); + yield switchAndTestHost(tab, debuggee, panel, secondHost, secondLayout); + yield switchAndTestHost(tab, debuggee, panel, thirdHost, thirdLayout); + yield teardown(panel); + }); +} + +function switchAndTestHost(aTab, aDebuggee, aPanel, aHostType, aLayoutType) { + let gToolbox = aPanel._toolbox; + let gDebugger = aPanel.panelWin; + + return Task.spawn(function() { + let layoutChanged = once(gDebugger, gDebugger.EVENTS.LAYOUT_CHANGED); + let hostChanged = gToolbox.switchHost(aHostType); + + yield hostChanged; + ok(true, "The toolbox's host has changed."); + + yield layoutChanged; + ok(true, "The debugger's layout has changed."); + + yield testHost(aTab, aDebuggee, aPanel, aHostType, aLayoutType); + }); + + function once(aTarget, aEvent) { + let deferred = promise.defer(); + aTarget.once(aEvent, deferred.resolve); + return deferred.promise; + } +} + +function testHost(aTab, aDebuggee, aPanel, aHostType, aLayoutType) { + let gDebugger = aPanel.panelWin; + let gView = gDebugger.DebuggerView; + + is(gView._hostType, aHostType, + "The default host type should've been set on the panel window (1)."); + is(gDebugger.gHostType, aHostType, + "The default host type should've been set on the panel window (2)."); + + is(gView._body.getAttribute("layout"), aLayoutType, + "The default host type is present as an attribute on the panel's body."); + + if (aLayoutType == "horizontal") { + is(gView._sourcesPane.parentNode.id, "debugger-widgets", + "The sources pane's parent is correct for the horizontal layout."); + is(gView._instrumentsPane.parentNode.id, "debugger-widgets", + "The instruments pane's parent is correct for the horizontal layout."); + } else { + is(gView._sourcesPane.parentNode.id, "vertical-layout-panes-container", + "The sources pane's parent is correct for the vertical layout."); + is(gView._instrumentsPane.parentNode.id, "vertical-layout-panes-container", + "The instruments pane's parent is correct for the vertical layout."); + } + + let widgets = gDebugger.document.getElementById("debugger-widgets").childNodes; + let panes = gDebugger.document.getElementById("vertical-layout-panes-container").childNodes; + + if (aLayoutType == "horizontal") { + is(widgets.length, 7, // 2 panes, 1 editor, 3 splitters and a phantom box. + "Found the correct number of debugger widgets."); + is(panes.length, 1, // 1 lonely splitter in the phantom box. + "Found the correct number of debugger panes."); + } else { + is(widgets.length, 5, // 1 editor, 3 splitters and a phantom box. + "Found the correct number of debugger widgets."); + is(panes.length, 3, // 2 panes and 1 splitter in the phantom box. + "Found the correct number of debugger panes."); + } +} + +registerCleanupFunction(function() { + Services.prefs.setCharPref("devtools.toolbox.host", gDefaultHostType); + gDefaultHostType = null; +});