diff -r 000000000000 -r 6474c204b198 browser/components/customizableui/test/browser_975719_customtoolbars_behaviour.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/components/customizableui/test/browser_975719_customtoolbars_behaviour.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,136 @@ +/* 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/. */ + +"use strict"; + +add_task(function customizeToolbarAndKeepIt() { + ok(gNavToolbox.toolbarset, "There should be a toolbarset"); + let toolbarID = "testAustralisCustomToolbar"; + gNavToolbox.appendCustomToolbar(toolbarID, ""); + let toolbarDOMID = getToolboxCustomToolbarId(toolbarID); + let toolbarElement = document.getElementById(toolbarDOMID); + ok(toolbarElement, "There should be a toolbar"); + if (!toolbarElement) { + ok(false, "No toolbar created, bailing out of the test."); + return; + } + is(toolbarElement.nextSibling, gNavToolbox.toolbarset, + "Toolbar should have been inserted in toolbox, before toolbarset element"); + let cuiAreaType = CustomizableUI.getAreaType(toolbarDOMID); + is(cuiAreaType, CustomizableUI.TYPE_TOOLBAR, + "CustomizableUI should know the area and think it's a toolbar"); + if (cuiAreaType != CustomizableUI.TYPE_TOOLBAR) { + ok(false, "Toolbar not registered successfully, bailing out of the test."); + toolbarElement.remove(); + return; + } + ok(!CustomizableUI.getWidgetIdsInArea(toolbarDOMID).length, "There should be no widgets in the area yet."); + CustomizableUI.addWidgetToArea("open-file-button", toolbarDOMID, 0); + ok(toolbarElement.hasChildNodes(), "Toolbar should now have a button."); + assertAreaPlacements(toolbarDOMID, ["open-file-button"]); + + gNavToolbox.toolbarset.setAttribute("toolbar1", toolbarID + ":open-file-button"); + document.persist(gNavToolbox.toolbarset.id, "toolbar1"); + + yield startCustomizing(); + // First, exit customize mode without doing anything, and verify the toolbar doesn't get removed. + yield endCustomizing(); + ok(!CustomizableUI.inDefaultState, "Shouldn't be in default state, the toolbar should still be there."); + cuiAreaType = CustomizableUI.getAreaType(toolbarDOMID); + is(cuiAreaType, CustomizableUI.TYPE_TOOLBAR, + "CustomizableUI should still know the area and think it's a toolbar"); + ok(toolbarElement.parentNode, "Toolbar should still be in the DOM."); + ok(toolbarElement.hasChildNodes(), "Toolbar should still have items in it."); + assertAreaPlacements(toolbarDOMID, ["open-file-button"]); + + let newWindow = yield openAndLoadWindow({}, true); + is(newWindow.gNavToolbox.toolbarset.getAttribute("toolbar1"), + gNavToolbox.toolbarset.getAttribute("toolbar1"), + "Attribute should be the same in new window"); + yield promiseWindowClosed(newWindow); + + // Then customize again, and this time empty out the toolbar and verify it *does* get removed. + yield startCustomizing(); + let openFileButton = document.getElementById("open-file-button"); + let palette = document.getElementById("customization-palette"); + simulateItemDrag(openFileButton, palette); + ok(!CustomizableUI.inDefaultState, "Shouldn't be in default state because there's still a non-collapsed toolbar."); + ok(!toolbarElement.hasChildNodes(), "Toolbar should have no more child nodes."); + + toolbarElement.collapsed = true; + ok(CustomizableUI.inDefaultState, "Should be in default state because there's now just a collapsed toolbar."); + toolbarElement.collapsed = false; + ok(!CustomizableUI.inDefaultState, "Shouldn't be in default state because there's a non-collapsed toolbar again."); + yield endCustomizing(); + ok(CustomizableUI.inDefaultState, "Should be in default state because the toolbar should have been removed."); + + newWindow = yield openAndLoadWindow({}, true); + ok(!newWindow.gNavToolbox.toolbarset.hasAttribute("toolbar1"), + "Attribute should be gone in new window"); + yield promiseWindowClosed(newWindow); + + ok(!toolbarElement.parentNode, "Toolbar should no longer be in the DOM."); + cuiAreaType = CustomizableUI.getAreaType(toolbarDOMID); + is(cuiAreaType, null, "CustomizableUI should have forgotten all about the area"); +}); + +add_task(function resetShouldDealWithCustomToolbars() { + ok(gNavToolbox.toolbarset, "There should be a toolbarset"); + let toolbarID = "testAustralisCustomToolbar"; + gNavToolbox.appendCustomToolbar(toolbarID, ""); + let toolbarDOMID = getToolboxCustomToolbarId(toolbarID); + let toolbarElement = document.getElementById(toolbarDOMID); + ok(toolbarElement, "There should be a toolbar"); + if (!toolbarElement) { + ok(false, "No toolbar created, bailing out of the test."); + return; + } + is(toolbarElement.nextSibling, gNavToolbox.toolbarset, + "Toolbar should have been inserted in toolbox, before toolbarset element"); + let cuiAreaType = CustomizableUI.getAreaType(toolbarDOMID); + is(cuiAreaType, CustomizableUI.TYPE_TOOLBAR, + "CustomizableUI should know the area and think it's a toolbar"); + if (cuiAreaType != CustomizableUI.TYPE_TOOLBAR) { + ok(false, "Toolbar not registered successfully, bailing out of the test."); + toolbarElement.remove(); + return; + } + ok(!CustomizableUI.getWidgetIdsInArea(toolbarDOMID).length, "There should be no widgets in the area yet."); + CustomizableUI.addWidgetToArea("sync-button", toolbarDOMID, 0); + ok(toolbarElement.hasChildNodes(), "Toolbar should now have a button."); + assertAreaPlacements(toolbarDOMID, ["sync-button"]); + + gNavToolbox.toolbarset.setAttribute("toolbar2", toolbarID + ":sync-button"); + document.persist(gNavToolbox.toolbarset.id, "toolbar2"); + + let newWindow = yield openAndLoadWindow({}, true); + is(newWindow.gNavToolbox.toolbarset.getAttribute("toolbar2"), + gNavToolbox.toolbarset.getAttribute("toolbar2"), + "Attribute should be the same in new window"); + yield promiseWindowClosed(newWindow); + + CustomizableUI.reset(); + + newWindow = yield openAndLoadWindow({}, true); + ok(!newWindow.gNavToolbox.toolbarset.hasAttribute("toolbar2"), + "Attribute should be gone in new window"); + yield promiseWindowClosed(newWindow); + + ok(CustomizableUI.inDefaultState, "Should be in default state after reset."); + let syncButton = document.getElementById("sync-button"); + ok(!syncButton, "Sync button shouldn't be in the document anymore."); + ok(gNavToolbox.palette.querySelector("#sync-button"), "Sync button should be in the palette"); + ok(!toolbarElement.hasChildNodes(), "Toolbar should have no more child nodes."); + ok(!toolbarElement.parentNode, "Toolbar should no longer be in the DOM."); + cuiAreaType = CustomizableUI.getAreaType(toolbarDOMID); + is(cuiAreaType, null, "CustomizableUI should have forgotten all about the area"); +}); + + +add_task(function() { + let newWin = yield openAndLoadWindow({}, true); + ok(!newWin.gNavToolbox.toolbarset.hasAttribute("toolbar1"), "New window shouldn't have attribute toolbar1"); + ok(!newWin.gNavToolbox.toolbarset.hasAttribute("toolbar2"), "New window shouldn't have attribute toolbar2"); + yield promiseWindowClosed(newWin); +});