summaryrefslogtreecommitdiffstats
path: root/browser/components/customizableui/test/browser_981305_separator_insertion.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/customizableui/test/browser_981305_separator_insertion.js')
-rw-r--r--browser/components/customizableui/test/browser_981305_separator_insertion.js73
1 files changed, 73 insertions, 0 deletions
diff --git a/browser/components/customizableui/test/browser_981305_separator_insertion.js b/browser/components/customizableui/test/browser_981305_separator_insertion.js
new file mode 100644
index 000000000..8d4d86c2a
--- /dev/null
+++ b/browser/components/customizableui/test/browser_981305_separator_insertion.js
@@ -0,0 +1,73 @@
+/* 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";
+
+var tempElements = [];
+
+function insertTempItemsIntoMenu(parentMenu) {
+ // Last element is null to insert at the end:
+ let beforeEls = [parentMenu.firstChild, parentMenu.lastChild, null];
+ for (let i = 0; i < beforeEls.length; i++) {
+ let sep = document.createElement("menuseparator");
+ tempElements.push(sep);
+ parentMenu.insertBefore(sep, beforeEls[i]);
+ let menu = document.createElement("menu");
+ tempElements.push(menu);
+ parentMenu.insertBefore(menu, beforeEls[i]);
+ // And another separator for good measure:
+ sep = document.createElement("menuseparator");
+ tempElements.push(sep);
+ parentMenu.insertBefore(sep, beforeEls[i]);
+ }
+}
+
+function checkSeparatorInsertion(menuId, buttonId, subviewId) {
+ return function*() {
+ info("Checking for duplicate separators in " + buttonId + " widget");
+ let menu = document.getElementById(menuId);
+ insertTempItemsIntoMenu(menu);
+
+ let placement = CustomizableUI.getPlacementOfWidget(buttonId);
+ let changedPlacement = false;
+ if (!placement || placement.area != CustomizableUI.AREA_PANEL) {
+ CustomizableUI.addWidgetToArea(buttonId, CustomizableUI.AREA_PANEL);
+ changedPlacement = true;
+ }
+ yield PanelUI.show();
+
+ let button = document.getElementById(buttonId);
+ button.click();
+
+ yield waitForCondition(() => !PanelUI.multiView.hasAttribute("transitioning"));
+ let subview = document.getElementById(subviewId);
+ ok(subview.firstChild, "Subview should have a kid");
+ is(subview.firstChild.localName, "toolbarbutton", "There should be no separators to start with");
+
+ for (let kid of subview.children) {
+ if (kid.localName == "menuseparator") {
+ ok(kid.previousSibling && kid.previousSibling.localName != "menuseparator",
+ "Separators should never have another separator next to them, and should never be the first node.");
+ }
+ }
+
+ let panelHiddenPromise = promisePanelHidden(window);
+ PanelUI.hide();
+ yield panelHiddenPromise;
+
+ if (changedPlacement) {
+ CustomizableUI.reset();
+ }
+ };
+}
+
+add_task(checkSeparatorInsertion("menuWebDeveloperPopup", "developer-button", "PanelUI-developerItems"));
+add_task(checkSeparatorInsertion("viewSidebarMenu", "sidebar-button", "PanelUI-sidebarItems"));
+
+registerCleanupFunction(function() {
+ for (let el of tempElements) {
+ el.remove();
+ }
+ tempElements = null;
+});