Bug 947914 - tests for panel menu default buttons existence and functionality, r=gijs
☠☠ backed out by 511de941ae39 ☠ ☠
authorMihaela Velimiroviciu <mihaela.velimiroviciu@softvisioninc.eu>
Fri, 24 Jan 2014 15:24:34 +0200
changeset 169723 58ba975978540fdc4e2ce990836777a3117ff05f
parent 169722 88e90c4e37806905cbd6786c780ef1af78ccfc59
child 169724 74f8a4d343a054fab5f166b2b731a07ef2d0e615
push id5204
push usergijskruitbosch@gmail.com
push dateThu, 20 Feb 2014 22:14:03 +0000
treeherderfx-team@58ba97597854 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersgijs
bugs947914
milestone30.0a1
Bug 947914 - tests for panel menu default buttons existence and functionality, r=gijs
browser/components/customizableui/test/browser.ini
browser/components/customizableui/test/browser_947914_button_addons.js
browser/components/customizableui/test/browser_947914_button_copy.js
browser/components/customizableui/test/browser_947914_button_cut.js
browser/components/customizableui/test/browser_947914_button_devtools.js
browser/components/customizableui/test/browser_947914_button_find.js
browser/components/customizableui/test/browser_947914_button_fullscreen.js
browser/components/customizableui/test/browser_947914_button_history.js
browser/components/customizableui/test/browser_947914_button_newPrivateWindow.js
browser/components/customizableui/test/browser_947914_button_newWindow.js
browser/components/customizableui/test/browser_947914_button_paste.js
browser/components/customizableui/test/browser_947914_button_preferences.js
browser/components/customizableui/test/browser_947914_button_print.js
browser/components/customizableui/test/browser_947914_button_savePage.js
browser/components/customizableui/test/browser_947914_button_zoomIn.js
browser/components/customizableui/test/browser_947914_button_zoomOut.js
browser/components/customizableui/test/browser_947914_button_zoomReset.js
--- a/browser/components/customizableui/test/browser.ini
+++ b/browser/components/customizableui/test/browser.ini
@@ -56,16 +56,34 @@ skip-if = os == "linux"
 [browser_940107_home_button_in_bookmarks_toolbar.js]
 [browser_940307_panel_click_closure_handling.js]
 [browser_940946_removable_from_navbar_customizemode.js]
 [browser_941083_invalidate_wrapper_cache_createWidget.js]
 [browser_942581_unregisterArea_keeps_placements.js]
 [browser_943683_migration_test.js]
 [browser_944887_destroyWidget_should_destroy_in_palette.js]
 [browser_945739_showInPrivateBrowsing_customize_mode.js]
+[browser_947914_button_addons.js]
+[browser_947914_button_copy.js]
+[browser_947914_button_cut.js]
+[browser_947914_button_devtools.js]
+[browser_947914_button_find.js]
+[browser_947914_button_fullscreen.js]
+skip-if = os == "mac"
+
+[browser_947914_button_history.js]
+[browser_947914_button_newPrivateWindow.js]
+[browser_947914_button_newWindow.js]
+[browser_947914_button_paste.js]
+[browser_947914_button_preferences.js]
+[browser_947914_button_print.js]
+[browser_947914_button_savePage.js]
+[browser_947914_button_zoomIn.js]
+[browser_947914_button_zoomOut.js]
+[browser_947914_button_zoomReset.js]
 [browser_947987_removable_default.js]
 [browser_948985_non_removable_defaultArea.js]
 [browser_952963_areaType_getter_no_area.js]
 [browser_956602_remove_special_widget.js]
 [browser_969427_recreate_destroyed_widget_after_reset.js]
 [browser_969661_character_encoding_navbar_disabled.js]
 [browser_970511_undo_restore_default.js]
 [browser_panel_toggle.js]
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_addons.js
@@ -0,0 +1,33 @@
+/* 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() {
+  info("Check addons button existence and functionality");
+
+  let initialLocation = gBrowser.currentURI.spec;
+
+  yield PanelUI.show();
+
+  let addonsButton = document.getElementById("add-ons-button");
+  ok(addonsButton, "Add-ons button exists in Panel Menu");
+  addonsButton.click();
+
+  yield waitForCondition(function() gBrowser.currentURI &&
+                                    gBrowser.currentURI.spec == "about:addons");
+
+  let addonsPage = gBrowser.selectedBrowser.contentWindow.document.
+                            getElementById("addons-page");
+  ok(addonsPage, "Add-ons page was opened");
+
+  // close the add-ons tab
+  if(gBrowser.tabs.length > 1) {
+    gBrowser.removeTab(gBrowser.selectedTab);
+  } else {
+    var tabToRemove = gBrowser.selectedTab;
+    gBrowser.addTab(initialLocation);
+    gBrowser.removeTab(tabToRemove);
+  }
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_copy.js
@@ -0,0 +1,54 @@
+/* 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() {
+  info("Check copy button existence and functionality");
+  var testText = "copy text test";
+  let initialLocation = gBrowser.currentURI.spec;
+
+  yield PanelUI.show();
+
+  let copyButton = document.getElementById("copy-button");
+  ok(copyButton, "Copy button exists in Panel Menu");
+  is(copyButton.getAttribute("disabled"), "true", "Copy button is initially disabled");
+
+  // copy text from URL bar
+  gURLBar.value = testText;
+  gURLBar.focus();
+  gURLBar.select();
+  yield PanelUI.show();
+  ok(!copyButton.hasAttribute("disabled"), "Copy button gets enabled");
+
+  copyButton.click();
+  ok(gURLBar.value == testText, "Selected text is unaltered when clicking copy");
+
+  // check that the text was added to the clipboard
+  let clipboard = Services.clipboard;
+  let transferable = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable);
+  const globalClipboard = clipboard.kGlobalClipboard;
+
+  transferable.init(null);
+  transferable.addDataFlavor("text/unicode");
+  clipboard.getData(transferable, globalClipboard);
+  let str = {}, strLength = {};
+  transferable.getTransferData("text/unicode", str, strLength);
+  let clipboardValue = "";
+
+  if (str.value) {
+    str.value.QueryInterface(Ci.nsISupportsString);
+    clipboardValue = str.value.data;
+  }
+  is(clipboardValue, testText, "Data was copied to the clipboard.");
+
+  // clear the URL value and the clipboard
+  gURLBar.value = "";
+  clipboard.emptyClipboard(globalClipboard);
+
+  // restore the tab as it was at the begining of the test
+  var tabToRemove = gBrowser.selectedTab;
+  gBrowser.addTab(initialLocation);
+  gBrowser.removeTab(tabToRemove);
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_cut.js
@@ -0,0 +1,54 @@
+/* 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() {
+  info("Check cut button existence and functionality");
+  var testText = "cut text test";
+  let initialLocation = gBrowser.currentURI.spec;
+
+  yield PanelUI.show();
+
+  let cutButton = document.getElementById("cut-button");
+  ok(cutButton, "Cut button exists in Panel Menu");
+  ok(cutButton.getAttribute("disabled"), "Cut button is disabled");
+
+  // cut text from URL bar
+  gURLBar.value = testText;
+  gURLBar.focus();
+  gURLBar.select();
+  yield PanelUI.show();
+
+  ok(!cutButton.hasAttribute("disabled"), "Cut button gets enabled");
+  cutButton.click();
+  ok(gURLBar.value == "", "Selected text is removed from source when clicking on cut");
+
+  // check that the text was added to the clipboard
+  let clipboard = Services.clipboard;
+  let transferable = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable);
+  const globalClipboard = clipboard.kGlobalClipboard;
+
+  transferable.init(null);
+  transferable.addDataFlavor("text/unicode");
+  clipboard.getData(transferable, globalClipboard);
+  let str = {}, strLength = {};
+  transferable.getTransferData("text/unicode", str, strLength);
+  let clipboardValue = "";
+
+  if (str.value) {
+    str.value.QueryInterface(Ci.nsISupportsString);
+    clipboardValue = str.value.data;
+  }
+  is(clipboardValue, testText, "Data was copied to the clipboard.");
+
+  // clear the URL value and the clipboard
+  gURLBar.value = "";
+  clipboard.emptyClipboard(globalClipboard);
+
+  // restore the tab as it was at the begining of the test
+  var tabToRemove = gBrowser.selectedTab;
+  gBrowser.addTab(initialLocation);
+  gBrowser.removeTab(tabToRemove);
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_devtools.js
@@ -0,0 +1,19 @@
+/* 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() {
+  info("Check developer tools button existence and functionality");
+  yield PanelUI.show();
+
+  let devtoolsButton = document.getElementById("developer-button");
+  ok(devtoolsButton, "Developer tools button appears in Panel Menu");
+
+  devtoolsButton.click();
+  let devtoolsPanel = document.getElementById("PanelUI-developer");
+  ok(devtoolsPanel.getAttribute("current"), "Developer tools Panel is in view");
+
+  yield PanelUI.hide();
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_find.js
@@ -0,0 +1,19 @@
+/* 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() {
+  info("Check find button existence and functionality");
+  yield PanelUI.show();
+
+  let findButton = document.getElementById("find-button");
+  ok(findButton, "Find button exists in Panel Menu");
+
+  findButton.click();
+  ok(!gFindBar.hasAttribute("hidden"), "Findbar opened successfully");
+
+  // close find bar
+  gFindBar.close();
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_fullscreen.js
@@ -0,0 +1,21 @@
+/* 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() {
+  info("Check fullscreen button existence and functionality");
+  yield PanelUI.show();
+
+  let fullscreenButton = document.getElementById("fullscreen-button");
+  ok(fullscreenButton, "Fullscreen button appears in Panel Menu");
+  fullscreenButton.click();
+
+  yield waitForCondition(function() window.fullScreen);
+  ok(window.fullScreen, "Fullscreen mode was opened");
+
+  // exit full screen mode
+  window.fullScreen = !window.fullScreen;
+  yield waitForCondition(function() !window.fullScreen);
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_history.js
@@ -0,0 +1,19 @@
+/* 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() {
+  info("Check history button existence and functionality");
+  yield PanelUI.show();
+
+  let historyButton = document.getElementById("history-panelmenu");
+  ok(historyButton, "History button appears in Panel Menu");
+
+  historyButton.click();
+  let historyPanel = document.getElementById("PanelUI-history");
+  ok(historyPanel.getAttribute("current"), "History Panel is in view");
+
+  yield PanelUI.hide();
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_newPrivateWindow.js
@@ -0,0 +1,45 @@
+/* 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() {
+  info("Check private browsing button existence and functionality");
+  yield PanelUI.show();
+
+  var windowWasHandled = false;
+
+  let observer = {
+    observe: function(aSubject, aTopic, aData) {
+      if (aTopic == "domwindowopened") {
+        let win = aSubject.QueryInterface(Components.interfaces.nsIDOMWindow);
+        win.addEventListener("load", function newWindowHandler() {
+          win.removeEventListener("load", newWindowHandler, false);
+          is(win.location.href, "chrome://browser/content/browser.xul",
+                                "A new private browser window was opened");
+          ok(PrivateBrowsingUtils.isWindowPrivate(win), "Window is private");
+
+          win.close();
+          windowWasHandled = true;
+        }, false);
+      }
+    }
+  }
+
+  Services.ww.registerNotification(observer);
+
+  let privateBrowsingButton = document.getElementById("privatebrowsing-button");
+  ok(privateBrowsingButton, "Private browsing button exists in Panel Menu");
+  privateBrowsingButton.click();
+
+  try{
+    yield waitForCondition(() => windowWasHandled);
+  }
+  catch(e) {
+    ok(false, "The new private window was not properly handled");
+  }
+  finally {
+    Services.ww.unregisterNotification(observer);
+  }
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_newWindow.js
@@ -0,0 +1,44 @@
+/* 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() {
+  info("Check new window button existence and functionality");
+  yield PanelUI.show();
+
+  var windowWasHandled = false;
+
+  let observer = {
+    observe: function(aSubject, aTopic, aData) {
+      if (aTopic == "domwindowopened") {
+        let win = aSubject.QueryInterface(Components.interfaces.nsIDOMWindow);
+        win.addEventListener("load", function newWindowHandler() {
+          win.removeEventListener("load", newWindowHandler, false);
+          is(win.location.href, "chrome://browser/content/browser.xul",
+                                "A new browser window was opened");
+
+          win.close();
+          windowWasHandled = true;
+        }, false);
+      }
+    }
+  }
+
+  Services.ww.registerNotification(observer);
+
+  let newWindowButton = document.getElementById("new-window-button");
+  ok(newWindowButton, "New Window button exists in Panel Menu");
+  newWindowButton.click();
+
+  try{
+    yield waitForCondition(() => windowWasHandled);
+  }
+  catch(e) {
+    ok(false, "The new browser window was not properly handled");
+  }
+  finally {
+    Services.ww.unregisterNotification(observer);
+  }
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_paste.js
@@ -0,0 +1,33 @@
+/* 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() {
+  info("Check paste button existence and functionality");
+  let initialLocation = gBrowser.currentURI.spec;
+  let clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);
+
+  yield PanelUI.show();
+
+  let pasteButton = document.getElementById("paste-button");
+  ok(pasteButton, "Paste button exists in Panel Menu");
+
+  // add text to clipboard
+  var text = "Sample text for testing";
+  clipboard.copyString(text);
+
+  // test paste button by pasting text to URL bar
+  gURLBar.focus();
+  yield PanelUI.show();
+  ok(!pasteButton.hasAttribute("disabled"), "Paste button is enabled");
+  pasteButton.click();
+
+  is(gURLBar.value, text, "Text pasted successfully");
+
+  // restore the tab as it was at the begining of the test
+  var tabToRemove = gBrowser.selectedTab;
+  gBrowser.addTab(initialLocation);
+  gBrowser.removeTab(tabToRemove);
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_preferences.js
@@ -0,0 +1,44 @@
+/* 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() {
+  info("Check preferences button existence and functionality");
+  yield PanelUI.show();
+
+  var windowWasHandled = false;
+
+  let observer = {
+    observe: function(aSubject, aTopic, aData) {
+      if (aTopic == "domwindowopened") {
+        let win = aSubject.QueryInterface(Components.interfaces.nsIDOMWindow);
+        win.addEventListener("load", function newWindowHandler() {
+          win.removeEventListener("load", newWindowHandler, false);
+          is(win.location.href, "chrome://browser/content/preferences/preferences.xul",
+                                "A new preferences window was opened");
+
+          win.close();
+          windowWasHandled = true;
+        }, false);
+      }
+    }
+  }
+
+  Services.ww.registerNotification(observer);
+
+  let preferencesButton = document.getElementById("preferences-button");
+  ok(preferencesButton, "Preferences button exists in Panel Menu");
+  preferencesButton.click();
+
+  try{
+    yield waitForCondition(() => windowWasHandled);
+  }
+  catch(e) {
+    ok(false, "The preferences window was not properly handled");
+  }
+  finally {
+    Services.ww.unregisterNotification(observer);
+  }
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_print.js
@@ -0,0 +1,28 @@
+/* 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";
+const isOSX = (Services.appinfo.OS === "Darwin");
+
+add_task(function() {
+  info("Check print button existence and functionality");
+  yield PanelUI.show();
+
+  let printButton = document.getElementById("print-button");
+  ok(printButton, "Print button exists in Panel Menu");
+
+  if(isOSX) {
+    yield PanelUI.hide();
+  }
+  else {
+    printButton.click();
+    yield waitForCondition(function() window.gInPrintPreviewMode);
+
+    ok(window.gInPrintPreviewMode, "Entered print preview mode");
+
+    // close print preview
+    PrintUtils.exitPrintPreview();
+    yield waitForCondition(() => !window.gInPrintPreviewMode);
+  }
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_savePage.js
@@ -0,0 +1,15 @@
+/* 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() {
+  info("Check save page button existence");
+  yield PanelUI.show();
+
+  let savePageButton = document.getElementById("save-page-button");
+  ok(savePageButton, "Save Page button exists in Panel Menu");
+
+  yield PanelUI.hide();
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_zoomIn.js
@@ -0,0 +1,28 @@
+/* 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() {
+  info("Check zoom in button existence and functionality");
+  let initialPageZoom = ZoomManager.zoom;
+  is(initialPageZoom, 1, "Initial zoom factor should be 1");
+
+  yield PanelUI.show();
+
+  let zoomInButton = document.getElementById("zoom-in-button");
+  ok(zoomInButton, "Zoom in button exists in Panel Menu");
+
+  zoomInButton.click();
+  let pageZoomLevel = parseInt(ZoomManager.zoom * 100);
+  let zoomResetButton = document.getElementById("zoom-reset-button");
+  let expectedZoomLevel = parseInt(zoomResetButton.getAttribute("label"), 10);
+  ok(pageZoomLevel > 100 && pageZoomLevel == expectedZoomLevel, "Page zoomed in correctly");
+
+  // close the Panel
+  yield PanelUI.hide();
+
+  // reset zoom level
+  ZoomManager.zoom = initialPageZoom;
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_zoomOut.js
@@ -0,0 +1,27 @@
+/* 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() {
+  info("Check zoom out button existence and functionality");
+  let initialPageZoom = ZoomManager.zoom;
+  is(initialPageZoom, 1, "Initial zoom factor should be 1");
+
+  yield PanelUI.show();
+
+  let zoomOutButton = document.getElementById("zoom-out-button");
+  ok(zoomOutButton, "Zoom out button exists in Panel Menu");
+
+  zoomOutButton.click();
+  let pageZoomLevel = parseInt(ZoomManager.zoom * 100);
+  let zoomResetButton = document.getElementById("zoom-reset-button");
+  let expectedZoomLevel = parseInt(zoomResetButton.getAttribute("label"), 10);
+  ok(pageZoomLevel < 100 && pageZoomLevel == expectedZoomLevel, "Page zoomed out correctly");
+
+  // close the panel
+  yield PanelUI.hide();
+
+  // reset zoom level
+  ZoomManager.zoom = initialPageZoom;
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/customizableui/test/browser_947914_button_zoomReset.js
@@ -0,0 +1,23 @@
+/* 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() {
+  info("Check zoom reset button existence and functionality");
+
+  ZoomManager.zoom = 0.5;
+  yield PanelUI.show();
+
+  let zoomResetButton = document.getElementById("zoom-reset-button");
+  ok(zoomResetButton, "Zoom reset button exists in Panel Menu");
+
+  zoomResetButton.click();
+  let pageZoomLevel = parseInt(ZoomManager.zoom * 100);
+  let expectedZoomLevel = parseInt(zoomResetButton.getAttribute("label"), 10);
+  ok(pageZoomLevel == expectedZoomLevel && pageZoomLevel == 100, "Page zoom reset correctly");
+
+  // close the panel
+  yield PanelUI.hide();
+});