toolkit/mozapps/extensions/test/xpcshell/test_distribution.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 // This verifies that add-ons distributed with the application get installed
     6 // correctly
     8 // Allow distributed add-ons to install
     9 Services.prefs.setBoolPref("extensions.installDistroAddons", true);
    11 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
    13 const profileDir = gProfD.clone();
    14 profileDir.append("extensions");
    15 const distroDir = gProfD.clone();
    16 distroDir.append("distribution");
    17 distroDir.append("extensions");
    18 registerDirectory("XREAppDist", distroDir.parent);
    20 var addon1_1 = {
    21   id: "addon1@tests.mozilla.org",
    22   version: "1.0",
    23   name: "Test version 1",
    24   targetApplications: [{
    25     id: "xpcshell@tests.mozilla.org",
    26     minVersion: "1",
    27     maxVersion: "5"
    28   }]
    29 };
    31 var addon1_2 = {
    32   id: "addon1@tests.mozilla.org",
    33   version: "2.0",
    34   name: "Test version 2",
    35   targetApplications: [{
    36     id: "xpcshell@tests.mozilla.org",
    37     minVersion: "1",
    38     maxVersion: "5"
    39   }]
    40 };
    42 var addon1_3 = {
    43   id: "addon1@tests.mozilla.org",
    44   version: "3.0",
    45   name: "Test version 3",
    46   targetApplications: [{
    47     id: "xpcshell@tests.mozilla.org",
    48     minVersion: "1",
    49     maxVersion: "5"
    50   }]
    51 };
    53 function getActiveVersion() {
    54   return Services.prefs.getIntPref("bootstraptest.active_version");
    55 }
    57 function getInstalledVersion() {
    58   return Services.prefs.getIntPref("bootstraptest.installed_version");
    59 }
    61 function setOldModificationTime() {
    62   // Make sure the installed extension has an old modification time so any
    63   // changes will be detected
    64   shutdownManager()
    65   let extension = gProfD.clone();
    66   extension.append("extensions");
    67   if (Services.prefs.getBoolPref("extensions.alwaysUnpack"))
    68     extension.append("addon1@tests.mozilla.org");
    69   else
    70     extension.append("addon1@tests.mozilla.org.xpi");
    71   setExtensionModifiedTime(extension, Date.now - 10000);
    72   startupManager(false);
    73 }
    75 function run_test() {
    76   do_test_pending();
    78   run_test_1();
    79 }
    81 // Tests that on the first startup the add-on gets installed
    82 function run_test_1() {
    83   writeInstallRDFForExtension(addon1_1, distroDir);
    85   startupManager();
    87   AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
    88     do_check_neq(a1, null);
    89     do_check_eq(a1.version, "1.0");
    90     do_check_true(a1.isActive);
    91     do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
    92     do_check_false(a1.foreignInstall);
    94     do_execute_soon(run_test_2);
    95   });
    96 }
    98 // Tests that starting with a newer version in the distribution dir doesn't
    99 // install it yet
   100 function run_test_2() {
   101   setOldModificationTime();
   103   writeInstallRDFForExtension(addon1_2, distroDir);
   105   restartManager();
   107   AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
   108     do_check_neq(a1, null);
   109     do_check_eq(a1.version, "1.0");
   110     do_check_true(a1.isActive);
   111     do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
   113     do_execute_soon(run_test_3);
   114   });
   115 }
   117 // Test that an app upgrade installs the newer version
   118 function run_test_3() {
   119   restartManager("2");
   121   AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
   122     do_check_neq(a1, null);
   123     do_check_eq(a1.version, "2.0");
   124     do_check_true(a1.isActive);
   125     do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
   126     do_check_false(a1.foreignInstall);
   128     do_execute_soon(run_test_4);
   129   });
   130 }
   132 // Test that an app upgrade doesn't downgrade the extension
   133 function run_test_4() {
   134   setOldModificationTime();
   136   writeInstallRDFForExtension(addon1_1, distroDir);
   138   restartManager("3");
   140   AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
   141     do_check_neq(a1, null);
   142     do_check_eq(a1.version, "2.0");
   143     do_check_true(a1.isActive);
   144     do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
   146     do_execute_soon(run_test_5);
   147   });
   148 }
   150 // Tests that after uninstalling a restart doesn't re-install the extension
   151 function run_test_5() {
   152   AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(a1) {
   153     a1.uninstall();
   155     restartManager();
   157     AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
   158       do_check_eq(a1, null);
   160       do_execute_soon(run_test_6);
   161     });
   162   }));
   163 }
   165 // Tests that upgrading the application still doesn't re-install the uninstalled
   166 // extension
   167 function run_test_6() {
   168   restartManager("4");
   170   AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
   171     do_check_eq(a1, null);
   173     do_execute_soon(run_test_7);
   174   });
   175 }
   177 // Tests that a pending install of a newer version of a distributed add-on
   178 // at app change still gets applied
   179 function run_test_7() {
   180   Services.prefs.clearUserPref("extensions.installedDistroAddon.addon1@tests.mozilla.org");
   182   installAllFiles([do_get_addon("test_distribution1_2")], function() {
   183     restartManager(2);
   185     AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
   186       do_check_neq(a1, null);
   187       do_check_eq(a1.version, "2.0");
   188       do_check_true(a1.isActive);
   189       do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
   191       a1.uninstall();
   192       do_execute_soon(run_test_8);
   193     });
   194   });
   195 }
   197 // Tests that a pending install of a older version of a distributed add-on
   198 // at app change gets replaced by the distributed version
   199 function run_test_8() {
   200   restartManager();
   202   writeInstallRDFForExtension(addon1_3, distroDir);
   204   installAllFiles([do_get_addon("test_distribution1_2")], function() {
   205     restartManager(3);
   207     AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
   208       do_check_neq(a1, null);
   209       do_check_eq(a1.version, "3.0");
   210       do_check_true(a1.isActive);
   211       do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
   213       a1.uninstall();
   214       do_execute_soon(run_test_9);
   215     });
   216   });
   217 }
   219 // Tests that bootstrapped add-ons distributed start up correctly, also that
   220 // add-ons with multiple directories get copied fully
   221 function run_test_9() {
   222   restartManager();
   224   // Copy the test add-on to the distro dir
   225   let addon = do_get_file("data/test_distribution2_2");
   226   addon.copyTo(distroDir, "addon2@tests.mozilla.org");
   228   restartManager("5");
   230   AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) {
   231     do_check_neq(a2, null);
   232     do_check_true(a2.isActive);
   234     do_check_eq(getInstalledVersion(), 2);
   235     do_check_eq(getActiveVersion(), 2);
   237     do_check_true(a2.hasResource("bootstrap.js"));
   238     do_check_true(a2.hasResource("subdir/dummy.txt"));
   239     do_check_true(a2.hasResource("subdir/subdir2/dummy2.txt"));
   241     // Currently installs are unpacked if the source is a directory regardless
   242     // of the install.rdf property or the global preference
   244     let addonDir = profileDir.clone();
   245     addonDir.append("addon2@tests.mozilla.org");
   246     do_check_true(addonDir.exists());
   247     do_check_true(addonDir.isDirectory());
   248     addonDir.append("subdir");
   249     do_check_true(addonDir.exists());
   250     do_check_true(addonDir.isDirectory());
   251     addonDir.append("subdir2");
   252     do_check_true(addonDir.exists());
   253     do_check_true(addonDir.isDirectory());
   254     addonDir.append("dummy2.txt");
   255     do_check_true(addonDir.exists());
   256     do_check_true(addonDir.isFile());
   258     a2.uninstall();
   260     do_execute_soon(do_test_finished);
   261   });
   262 }

mercurial