toolkit/mozapps/extensions/test/browser/browser_manualupdates.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* Any copyright is dedicated to the Public Domain.
     2  * http://creativecommons.org/publicdomain/zero/1.0/
     3  */
     5 // Tests manual updates, including the Available Updates pane
     7 var gProvider;
     8 var gManagerWindow;
     9 var gCategoryUtilities;
    10 var gAvailableCategory;
    12 function test() {
    13   waitForExplicitFinish();
    15   gProvider = new MockProvider();
    17   gProvider.createAddons([{
    18     id: "addon1@tests.mozilla.org",
    19     name: "auto updating addon",
    20     version: "1.0",
    21     applyBackgroundUpdates: AddonManager.AUTOUPDATE_ENABLE
    22   }]);
    24   open_manager("addons://list/extension", function(aWindow) {
    25     gManagerWindow = aWindow;
    26     gCategoryUtilities = new CategoryUtilities(gManagerWindow);
    27     run_next_test();
    28   });
    29 }
    31 function end_test() {
    32   close_manager(gManagerWindow, function() {
    33     finish();
    34   });
    35 }
    38 add_test(function() {
    39   gAvailableCategory = gManagerWindow.gCategories.get("addons://updates/available");
    40   is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should initially be hidden");
    42   gProvider.createAddons([{
    43     id: "addon2@tests.mozilla.org",
    44     name: "manually updating addon",
    45     version: "1.0",
    46     isCompatible: false,
    47     blocklistState: Ci.nsIBlocklistService.STATE_BLOCKED,
    48     applyBackgroundUpdates: AddonManager.AUTOUPDATE_DISABLE
    49   }]);
    51   is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should still be hidden");
    53   run_next_test();
    54 });
    57 add_test(function() {
    58   gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() {
    59     gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false);
    60     is(gCategoryUtilities.isVisible(gAvailableCategory), true, "Available Updates category should now be visible");
    61     is(gAvailableCategory.badgeCount, 1, "Badge for Available Updates should now be 1");
    62     run_next_test();
    63   }, false);
    65   gCategoryUtilities.openType("extension", function() {
    66     gProvider.createInstalls([{
    67       name: "manually updating addon (new and improved!)",
    68       existingAddon: gProvider.addons[1],
    69       version: "1.1",
    70       releaseNotesURI: Services.io.newURI(TESTROOT + "thereIsNoFileHere.xhtml", null, null)
    71     }]);
    73     var item = get_addon_element(gManagerWindow, "addon2@tests.mozilla.org");
    74     is(item._version.value, "1.0", "Should still show the old version in the normal list");
    75   });
    76 });
    79 add_test(function() {
    80   wait_for_view_load(gManagerWindow, function() {
    81     is(gManagerWindow.document.getElementById("categories").selectedItem.value, "addons://updates/available", "Available Updates category should now be selected");
    82     is(gManagerWindow.gViewController.currentViewId, "addons://updates/available", "Available Updates view should be the current view");
    83     run_next_test();
    84   }, true);
    85   EventUtils.synthesizeMouseAtCenter(gAvailableCategory, { }, gManagerWindow);
    86 });
    89 add_test(function() {
    90   var list = gManagerWindow.document.getElementById("updates-list");
    91   is(list.itemCount, 1, "Should be 1 available update listed");
    92   var item = list.firstChild;
    93   is(item.mAddon.id, "addon2@tests.mozilla.org", "Update item should be for the manually updating addon");
    95   // for manual update items, update-related properties are updated asynchronously,
    96   // so we poll for one of the expected changes to know when its done
    97   function waitForAsyncInit() {
    98     if (item._version.value == "1.1") {
    99       run_next_test();
   100       return;
   101     }
   102     info("Update item not initialized yet, checking again in 100ms");
   103     setTimeout(waitForAsyncInit, 100);
   104   }
   105   waitForAsyncInit();
   106 });
   108 add_test(function() {
   109   var list = gManagerWindow.document.getElementById("updates-list");
   110   var item = list.firstChild;
   111   is(item._version.value, "1.1", "Update item should have version number of the update");
   112   var postfix = gManagerWindow.document.getAnonymousElementByAttribute(item, "class", "update-postfix");
   113   is_element_visible(postfix, "'Update' postfix should be visible");
   114   is_element_visible(item._updateAvailable, "");
   115   is_element_visible(item._relNotesToggle, "Release notes toggle should be visible");
   116   is_element_hidden(item._warning, "Incompatible warning should be hidden");
   117   is_element_hidden(item._error, "Blocklist error should be hidden");
   119   info("Opening release notes");
   120   item.addEventListener("RelNotesToggle", function() {
   121     item.removeEventListener("RelNotesToggle", arguments.callee, false);
   122     info("Release notes now open");
   124     is_element_hidden(item._relNotesLoading, "Release notes loading message should be hidden");
   125     is_element_visible(item._relNotesError, "Release notes error message should be visible");
   126     is(item._relNotes.childElementCount, 0, "Release notes should be empty");
   128     info("Closing release notes");
   129     item.addEventListener("RelNotesToggle", function() {
   130       item.removeEventListener("RelNotesToggle", arguments.callee, false);
   131       info("Release notes now closed");
   132       info("Setting Release notes URI to something that should load");
   133       gProvider.installs[0].releaseNotesURI = Services.io.newURI(TESTROOT + "releaseNotes.xhtml", null, null)
   135       info("Re-opening release notes");
   136       item.addEventListener("RelNotesToggle", function() {
   137         item.removeEventListener("RelNotesToggle", arguments.callee, false);
   138         info("Release notes now open");
   140         is_element_hidden(item._relNotesLoading, "Release notes loading message should be hidden");
   141         is_element_hidden(item._relNotesError, "Release notes error message should be hidden");
   142         isnot(item._relNotes.childElementCount, 0, "Release notes should have been inserted into container");
   143         run_next_test();
   145       }, false);
   146       EventUtils.synthesizeMouseAtCenter(item._relNotesToggle, { }, gManagerWindow);
   147       is_element_visible(item._relNotesLoading, "Release notes loading message should be visible");
   149     }, false);
   150     EventUtils.synthesizeMouseAtCenter(item._relNotesToggle, { }, gManagerWindow);
   152   }, false);
   153   EventUtils.synthesizeMouseAtCenter(item._relNotesToggle, { }, gManagerWindow);
   154   is_element_visible(item._relNotesLoading, "Release notes loading message should be visible");
   155 });
   158 add_test(function() {
   159   var badgeUpdated = false;
   160   var installCompleted = false;
   162   gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() {
   163     gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false);
   164     if (installCompleted)
   165       run_next_test();
   166     else
   167       badgeUpdated = true;
   168   }, false);
   170   var list = gManagerWindow.document.getElementById("updates-list");
   171   var item = list.firstChild;
   172   var updateBtn = item._updateBtn;
   173   is_element_visible(updateBtn, "Update button should be visible");
   175   var install = gProvider.installs[0];
   176   var listener = {
   177     onInstallStarted: function() {
   178       info("Install started");
   179       is_element_visible(item._installStatus, "Install progress widget should be visible");
   180     },
   181     onInstallEnded: function() {
   182       install.removeTestListener(this);
   183       info("Install ended");
   184       is_element_hidden(item._installStatus, "Install progress widget should be hidden");
   186       if (badgeUpdated)
   187         run_next_test();
   188       else
   189         installCompleted = true;
   190     }
   191   };
   192   install.addTestListener(listener);
   193   EventUtils.synthesizeMouseAtCenter(updateBtn, { }, gManagerWindow);
   194 });
   197 add_test(function() {
   198   is(gCategoryUtilities.isVisible(gAvailableCategory), true, "Available Updates category should still be visible");
   199   is(gAvailableCategory.badgeCount, 0, "Badge for Available Updates should now be 0");
   201   gCategoryUtilities.openType("extension", function() {
   202     is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should be hidden");
   204     close_manager(gManagerWindow, function() {
   205       open_manager(null, function(aWindow) {
   206         gManagerWindow = aWindow;
   207         gCategoryUtilities = new CategoryUtilities(gManagerWindow);
   208         gAvailableCategory = gManagerWindow.gCategories.get("addons://updates/available");
   210         is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should be hidden");
   212         run_next_test();
   213       });
   214     });
   215   });
   216 });
   218 add_test(function() {
   219   gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() {
   220     gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false);
   221     is(gCategoryUtilities.isVisible(gAvailableCategory), true, "Available Updates category should now be visible");
   222     is(gAvailableCategory.badgeCount, 1, "Badge for Available Updates should now be 1");
   224     gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() {
   225       gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false);
   226       is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should now be hidden");
   228       run_next_test();
   229     }, false);
   231     AddonManager.getAddonByID("addon2@tests.mozilla.org", function(aAddon) {
   232       aAddon.applyBackgroundUpdates = AddonManager.AUTOUPDATE_ENABLE;
   233     });
   234   }, false);
   236   gProvider.createInstalls([{
   237     name: "manually updating addon (new and even more improved!)",
   238     existingAddon: gProvider.addons[1],
   239     version: "1.2",
   240     releaseNotesURI: Services.io.newURI(TESTROOT + "thereIsNoFileHere.xhtml", null, null)
   241   }]);
   242 });

mercurial