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

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/toolkit/mozapps/extensions/test/browser/browser_select_update.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,181 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 + * http://creativecommons.org/publicdomain/zero/1.0/
     1.6 + */
     1.7 +
     1.8 +// Tests the update part of the post-app-update dialog
     1.9 +
    1.10 +var gProvider;
    1.11 +var gWin;
    1.12 +
    1.13 +function waitForView(aView, aCallback) {
    1.14 +  var view = gWin.document.getElementById(aView);
    1.15 +  if (view.parentNode.selectedPanel == view) {
    1.16 +    aCallback();
    1.17 +    return;
    1.18 +  }
    1.19 +
    1.20 +  view.addEventListener("ViewChanged", function() {
    1.21 +    view.removeEventListener("ViewChanged", arguments.callee, false);
    1.22 +    aCallback();
    1.23 +  }, false);
    1.24 +}
    1.25 +
    1.26 +function waitForClose(aCallback) {
    1.27 +  gWin.addEventListener("unload", function() {
    1.28 +    gWin.removeEventListener("unload", arguments.callee, false);
    1.29 +
    1.30 +    aCallback();
    1.31 +  }, false);
    1.32 +}
    1.33 +
    1.34 +/**
    1.35 + * Creates 4 test add-ons. Two are disabled and two enabled.
    1.36 + */
    1.37 +function setupUI(aFailDownloads, aFailInstalls, aCallback) {
    1.38 +  if (gProvider)
    1.39 +    gProvider.unregister();
    1.40 +
    1.41 +  gProvider = new MockProvider();
    1.42 +
    1.43 +  for (var i = 1; i < 5; i++) {
    1.44 +    var addon = new MockAddon("test" + i + "@tests.mozilla.org",
    1.45 +                              "Test Add-on " + i, "extension");
    1.46 +    addon.version = "1.0";
    1.47 +    addon.userDisabled = (i > 2);
    1.48 +    addon.appDisabled = false;
    1.49 +    addon.isActive = !addon.userDisabled && !addon.appDisabled;
    1.50 +
    1.51 +    addon.findUpdates = function(aListener, aReason, aAppVersion, aPlatformVersion) {
    1.52 +      var newAddon = new MockAddon(this.id, this.name, "extension");
    1.53 +      newAddon.version = "2.0";
    1.54 +      var install = new MockInstall(this.name, this.type, newAddon);
    1.55 +      install.existingAddon = this;
    1.56 +
    1.57 +      install.install = function() {
    1.58 +        this.state = AddonManager.STATE_DOWNLOADING;
    1.59 +        this.callListeners("onDownloadStarted");
    1.60 +
    1.61 +        var self = this;
    1.62 +        executeSoon(function() {
    1.63 +          if (aFailDownloads) {
    1.64 +            self.state = AddonManager.STATE_DOWNLOAD_FAILED;
    1.65 +            self.callListeners("onDownloadFailed");
    1.66 +            return;
    1.67 +          }
    1.68 +
    1.69 +          self.type = self._type;
    1.70 +          self.addon = new MockAddon(self.existingAddon.id, self.name, self.type);
    1.71 +          self.addon.version = self.version;
    1.72 +          self.addon.pendingOperations = AddonManager.PENDING_INSTALL;
    1.73 +          self.addon.install = self;
    1.74 +
    1.75 +          self.existingAddon.pendingUpgrade = self.addon;
    1.76 +          self.existingAddon.pendingOperations |= AddonManager.PENDING_UPGRADE;
    1.77 +
    1.78 +          self.state = AddonManager.STATE_DOWNLOADED;
    1.79 +          self.callListeners("onDownloadEnded");
    1.80 +
    1.81 +          self.state = AddonManager.STATE_INSTALLING;
    1.82 +          self.callListeners("onInstallStarted");
    1.83 +
    1.84 +          if (aFailInstalls) {
    1.85 +            self.state = AddonManager.STATE_INSTALL_FAILED;
    1.86 +            self.callListeners("onInstallFailed");
    1.87 +            return;
    1.88 +          }
    1.89 +
    1.90 +          self.state = AddonManager.STATE_INSTALLED;
    1.91 +          self.callListeners("onInstallEnded");
    1.92 +        });
    1.93 +      }
    1.94 +
    1.95 +      aListener.onUpdateAvailable(this, install);
    1.96 +
    1.97 +      aListener.onUpdateFinished(this, AddonManager.UPDATE_STATUS_NO_ERROR);
    1.98 +    };
    1.99 +
   1.100 +    gProvider.addAddon(addon);
   1.101 +  }
   1.102 +
   1.103 +  gWin = Services.ww.openWindow(null,
   1.104 +                                "chrome://mozapps/content/extensions/selectAddons.xul",
   1.105 +                                "",
   1.106 +                                "chrome,centerscreen,dialog,titlebar",
   1.107 +                                null);
   1.108 +  waitForFocus(function() {
   1.109 +    waitForView("select", function() {
   1.110 +      var row = gWin.document.getElementById("select-rows").firstChild.nextSibling;
   1.111 +      while (row) {
   1.112 +        if (!row.id || row.id.indexOf("@tests.mozilla.org") < 0) {
   1.113 +          // not a test add-on
   1.114 +          row = row.nextSibling;
   1.115 +          continue;
   1.116 +        }
   1.117 +
   1.118 +        if (row.id == "test2@tests.mozilla.org" ||
   1.119 +            row.id == "test4@tests.mozilla.org") {
   1.120 +          row.disable();
   1.121 +        }
   1.122 +        else {
   1.123 +          row.keep();
   1.124 +        }
   1.125 +        row = row.nextSibling;
   1.126 +      }
   1.127 +
   1.128 +      waitForView("confirm", function() {
   1.129 +        waitForView("update", aCallback);
   1.130 +        EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin);
   1.131 +      });
   1.132 +      EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin);
   1.133 +    });
   1.134 +  }, gWin);
   1.135 +}
   1.136 +
   1.137 +function test() {
   1.138 +  waitForExplicitFinish();
   1.139 +  run_next_test();
   1.140 +}
   1.141 +
   1.142 +function end_test() {
   1.143 +  finish();
   1.144 +}
   1.145 +
   1.146 +// Test for working updates
   1.147 +add_test(function working_test() {
   1.148 +  setupUI(false, false, function() {
   1.149 +    waitForClose(function() {
   1.150 +      is(gWin.document.getElementById("update-progress").value, 2, "Should have finished 2 downloads");
   1.151 +      run_next_test();
   1.152 +    });
   1.153 +
   1.154 +    EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin);
   1.155 +  });
   1.156 +});
   1.157 +
   1.158 +// Test for failed updates
   1.159 +add_test(function working_test() {
   1.160 +  setupUI(true, false, function() {
   1.161 +    waitForView("errors", function() {
   1.162 +      is(gWin.document.getElementById("update-progress").value, 2, "Should have finished 2 downloads");
   1.163 +      gWin.close();
   1.164 +
   1.165 +      run_next_test();
   1.166 +    });
   1.167 +
   1.168 +    EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin);
   1.169 +  });
   1.170 +});
   1.171 +
   1.172 +// Test for failed updates
   1.173 +add_test(function working_test() {
   1.174 +  setupUI(false, true, function() {
   1.175 +    waitForView("errors", function() {
   1.176 +      is(gWin.document.getElementById("update-progress").value, 2, "Should have finished 2 downloads");
   1.177 +      gWin.close();
   1.178 +
   1.179 +      run_next_test();
   1.180 +    });
   1.181 +
   1.182 +    EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin);
   1.183 +  });
   1.184 +});

mercurial