summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/webextensions/test/browser/browser_bug591663.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/webextensions/test/browser/browser_bug591663.js')
-rw-r--r--toolkit/mozapps/webextensions/test/browser/browser_bug591663.js161
1 files changed, 161 insertions, 0 deletions
diff --git a/toolkit/mozapps/webextensions/test/browser/browser_bug591663.js b/toolkit/mozapps/webextensions/test/browser/browser_bug591663.js
new file mode 100644
index 000000000..4a4f735af
--- /dev/null
+++ b/toolkit/mozapps/webextensions/test/browser/browser_bug591663.js
@@ -0,0 +1,161 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// Test that the empty notice in the list view disappears as it should
+
+// Don't use a standard list view (e.g. "extension") to ensure that the list is
+// initially empty. Don't need to worry about the list of categories displayed
+// since only the list view itself is tested.
+var VIEW_ID = "addons://list/mock-addon";
+
+var LIST_ID = "addon-list";
+var EMPTY_ID = "addon-list-empty";
+
+var gManagerWindow;
+var gProvider;
+var gItem;
+
+var gInstallProperties = {
+ name: "Bug 591663 Mock Install",
+ type: "mock-addon"
+};
+var gAddonProperties = {
+ id: "test1@tests.mozilla.org",
+ name: "Bug 591663 Mock Add-on",
+ type: "mock-addon"
+};
+var gExtensionProperties = {
+ name: "Bug 591663 Extension Install",
+ type: "extension"
+};
+
+function test() {
+ waitForExplicitFinish();
+
+ gProvider = new MockProvider(true, [{
+ id: "mock-addon",
+ name: "Mock Add-ons",
+ uiPriority: 4500,
+ flags: AddonManager.TYPE_UI_VIEW_LIST
+ }]);
+
+ open_manager(VIEW_ID, function(aWindow) {
+ gManagerWindow = aWindow;
+ run_next_test();
+ });
+}
+
+function end_test() {
+ close_manager(gManagerWindow, finish);
+}
+
+/**
+ * Check that the list view is as expected
+ *
+ * @param aItem
+ * The expected item in the list, or null if list should be empty
+ */
+function check_list(aItem) {
+ // Check state of the empty notice
+ let emptyNotice = gManagerWindow.document.getElementById(EMPTY_ID);
+ ok(emptyNotice != null, "Should have found the empty notice");
+ is(!emptyNotice.hidden, (aItem == null), "Empty notice should be showing if list empty");
+
+ // Check the children of the list
+ let list = gManagerWindow.document.getElementById(LIST_ID);
+ is(list.childNodes.length, aItem ? 1 : 0, "Should get expected number of items in list");
+ if (aItem != null) {
+ let itemName = list.firstChild.getAttribute("name");
+ is(itemName, aItem.name, "List item should have correct name");
+ }
+}
+
+
+// Test that the empty notice is showing and no items are showing in list
+add_test(function() {
+ check_list(null);
+ run_next_test();
+});
+
+// Test that a new, non-active, install does not affect the list view
+add_test(function() {
+ gItem = gProvider.createInstalls([gInstallProperties])[0];
+ check_list(null);
+ run_next_test();
+});
+
+// Test that onInstallStarted properly hides empty notice and adds install to list
+add_test(function() {
+ gItem.addTestListener({
+ onDownloadStarted: function() {
+ // Install type unknown until download complete
+ check_list(null);
+ },
+ onInstallStarted: function() {
+ check_list(gItem);
+ },
+ onInstallEnded: function() {
+ check_list(gItem);
+ run_next_test();
+ }
+ });
+
+ gItem.install();
+});
+
+// Test that restarting the manager does not change list
+add_test(function() {
+ restart_manager(gManagerWindow, VIEW_ID, function(aManagerWindow) {
+ gManagerWindow = aManagerWindow;
+ check_list(gItem);
+ run_next_test();
+ });
+});
+
+// Test that onInstallCancelled removes install and shows empty notice
+add_test(function() {
+ gItem.cancel();
+ gItem = null;
+ check_list(null);
+ run_next_test();
+});
+
+// Test that add-ons of a different type do not show up in the list view
+add_test(function() {
+ let extension = gProvider.createInstalls([gExtensionProperties])[0];
+ check_list(null);
+
+ extension.addTestListener({
+ onDownloadStarted: function() {
+ check_list(null);
+ },
+ onInstallStarted: function() {
+ check_list(null);
+ },
+ onInstallEnded: function() {
+ check_list(null);
+ extension.cancel();
+ run_next_test();
+ }
+ });
+
+ extension.install();
+});
+
+// Test that onExternalInstall properly hides empty notice and adds install to list
+add_test(function() {
+ gItem = gProvider.createAddons([gAddonProperties])[0];
+ check_list(gItem);
+ run_next_test();
+});
+
+// Test that restarting the manager does not change list
+add_test(function() {
+ restart_manager(gManagerWindow, VIEW_ID, function(aManagerWindow) {
+ gManagerWindow = aManagerWindow;
+ check_list(gItem);
+ run_next_test();
+ });
+});
+