summaryrefslogtreecommitdiffstats
path: root/browser/components/customizableui/test/browser_975719_customtoolbars_behaviour.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/customizableui/test/browser_975719_customtoolbars_behaviour.js')
-rw-r--r--browser/components/customizableui/test/browser_975719_customtoolbars_behaviour.js145
1 files changed, 145 insertions, 0 deletions
diff --git a/browser/components/customizableui/test/browser_975719_customtoolbars_behaviour.js b/browser/components/customizableui/test/browser_975719_customtoolbars_behaviour.js
new file mode 100644
index 000000000..73fc7c1ff
--- /dev/null
+++ b/browser/components/customizableui/test/browser_975719_customtoolbars_behaviour.js
@@ -0,0 +1,145 @@
+/* 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";
+
+requestLongerTimeout(2);
+
+const kXULWidgetId = "a-test-button"; // we'll create a button with this ID.
+
+add_task(function setup() {
+ // create a XUL button and add it to the palette.
+ createDummyXULButton(kXULWidgetId, "test-button");
+});
+
+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(kXULWidgetId, toolbarDOMID, 0);
+ ok(toolbarElement.hasChildNodes(), "Toolbar should now have a button.");
+ assertAreaPlacements(toolbarDOMID, [kXULWidgetId]);
+
+ gNavToolbox.toolbarset.setAttribute("toolbar2", `${toolbarID}:${kXULWidgetId}`);
+ 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 xulButton = document.getElementById(kXULWidgetId);
+ ok(!xulButton, "XUL button shouldn't be in the document anymore.");
+ ok(gNavToolbox.palette.querySelector(`#${kXULWidgetId}`), "XUL 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);
+});