toolkit/mozapps/extensions/test/xpcshell/test_experiment.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/toolkit/mozapps/extensions/test/xpcshell/test_experiment.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,96 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +let scope = Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm");
     1.8 +const XPIProvider = scope.XPIProvider;
     1.9 +
    1.10 +function run_test() {
    1.11 +  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
    1.12 +  startupManager();
    1.13 +
    1.14 +  run_next_test();
    1.15 +}
    1.16 +
    1.17 +add_test(function test_experiment() {
    1.18 +  AddonManager.getInstallForFile(do_get_addon("test_experiment1"), (install) => {
    1.19 +    completeAllInstalls([install], () => {
    1.20 +      AddonManager.getAddonByID("experiment1@tests.mozilla.org", (addon) => {
    1.21 +        Assert.ok(addon, "Addon is found.");
    1.22 +
    1.23 +        Assert.ok(addon.userDisabled, "Experiments are userDisabled by default.");
    1.24 +        Assert.equal(addon.isActive, false, "Add-on is not active.");
    1.25 +        Assert.equal(addon.updateURL, null, "No updateURL for experiments.");
    1.26 +        Assert.equal(addon.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DISABLE,
    1.27 +                     "Background updates are disabled.");
    1.28 +        Assert.equal(addon.permissions, AddonManager.PERM_CAN_UNINSTALL,
    1.29 +                     "Permissions are minimal.");
    1.30 +
    1.31 +        // Setting applyBackgroundUpdates should not work.
    1.32 +        addon.applyBackgroundUpdates = AddonManager.AUTOUPDATE_ENABLE;
    1.33 +        Assert.equal(addon.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DISABLE,
    1.34 +                     "Setting applyBackgroundUpdates shouldn't do anything.");
    1.35 +
    1.36 +        let noCompatibleCalled = false;
    1.37 +        let noUpdateCalled = false;
    1.38 +        let finishedCalled = false;
    1.39 +
    1.40 +        let listener = {
    1.41 +          onNoCompatibilityUpdateAvailable: () => { noCompatibleCalled = true; },
    1.42 +          onNoUpdateAvailable: () => { noUpdateCalled = true; },
    1.43 +          onUpdateFinished: () => { finishedCalled = true; },
    1.44 +        };
    1.45 +
    1.46 +        addon.findUpdates(listener, "testing", null, null);
    1.47 +        Assert.ok(noCompatibleCalled, "Listener called.");
    1.48 +        Assert.ok(noUpdateCalled, "Listener called.");
    1.49 +        Assert.ok(finishedCalled, "Listener called.");
    1.50 +
    1.51 +        run_next_test();
    1.52 +      });
    1.53 +    });
    1.54 +  });
    1.55 +});
    1.56 +
    1.57 +// Changes to userDisabled should not be persisted to the database.
    1.58 +add_test(function test_userDisabledNotPersisted() {
    1.59 +  AddonManager.getAddonByID("experiment1@tests.mozilla.org", (addon) => {
    1.60 +    Assert.ok(addon, "Add-on is found.");
    1.61 +    Assert.ok(addon.userDisabled, "Add-on is user disabled.");
    1.62 +
    1.63 +    let listener = {
    1.64 +      onEnabled: (addon2) => {
    1.65 +        AddonManager.removeAddonListener(listener);
    1.66 +
    1.67 +        Assert.equal(addon2.id, addon.id, "Changed add-on matches expected.");
    1.68 +        Assert.equal(addon2.userDisabled, false, "Add-on is no longer user disabled.");
    1.69 +        Assert.ok(addon2.isActive, "Add-on is active.");
    1.70 +
    1.71 +        Assert.ok("experiment1@tests.mozilla.org" in XPIProvider.bootstrappedAddons,
    1.72 +                  "Experiment add-on listed in XPIProvider bootstrapped list.");
    1.73 +
    1.74 +        AddonManager.getAddonByID("experiment1@tests.mozilla.org", (addon) => {
    1.75 +          Assert.ok(addon, "Add-on retrieved.");
    1.76 +          Assert.equal(addon.userDisabled, false, "Add-on is still enabled after API retrieve.");
    1.77 +          Assert.ok(addon.isActive, "Add-on is still active.");
    1.78 +
    1.79 +          // Now when we restart the manager the add-on should revert state.
    1.80 +          restartManager();
    1.81 +          let persisted = JSON.parse(Services.prefs.getCharPref("extensions.bootstrappedAddons"));
    1.82 +          Assert.ok(!("experiment1@tests.mozilla.org" in persisted),
    1.83 +                    "Experiment add-on not persisted to bootstrappedAddons.");
    1.84 +
    1.85 +          AddonManager.getAddonByID("experiment1@tests.mozilla.org", (addon) => {
    1.86 +            Assert.ok(addon, "Add-on retrieved.");
    1.87 +            Assert.ok(addon.userDisabled, "Add-on is disabled after restart.");
    1.88 +            Assert.equal(addon.isActive, false, "Add-on is not active after restart.");
    1.89 +
    1.90 +            run_next_test();
    1.91 +          });
    1.92 +        });
    1.93 +      },
    1.94 +    };
    1.95 +
    1.96 +    AddonManager.addAddonListener(listener);
    1.97 +    addon.userDisabled = false;
    1.98 +  });
    1.99 +});

mercurial