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 +});