services/sync/tests/unit/test_addons_tracker.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 "use strict";
     6 Cu.import("resource://gre/modules/AddonManager.jsm");
     7 Cu.import("resource://services-sync/engines/addons.js");
     8 Cu.import("resource://services-sync/constants.js");
     9 Cu.import("resource://services-sync/service.js");
    10 Cu.import("resource://services-sync/util.js");
    12 loadAddonTestFunctions();
    13 startupManager();
    14 Svc.Prefs.set("addons.ignoreRepositoryChecking", true);
    15 Svc.Prefs.set("engine.addons", true);
    17 Service.engineManager.register(AddonsEngine);
    18 let engine     = Service.engineManager.get("addons");
    19 let reconciler = engine._reconciler;
    20 let store      = engine._store;
    21 let tracker    = engine._tracker;
    23 // Don't write out by default.
    24 tracker.persistChangedIDs = false;
    26 const addon1ID = "addon1@tests.mozilla.org";
    28 function cleanup_and_advance() {
    29   Svc.Obs.notify("weave:engine:stop-tracking");
    30   tracker.stopTracking();
    32   tracker.resetScore();
    33   tracker.clearChangedIDs();
    35   reconciler._addons = {};
    36   reconciler._changes = [];
    37   let cb = Async.makeSpinningCallback();
    38   reconciler.saveState(null, cb);
    39   cb.wait();
    41   run_next_test();
    42 }
    44 function run_test() {
    45   initTestLogging("Trace");
    46   Log.repository.getLogger("Sync.Engine.Addons").level = Log.Level.Trace;
    47   Log.repository.getLogger("Sync.AddonsReconciler").level =
    48     Log.Level.Trace;
    50   cleanup_and_advance();
    51 }
    53 add_test(function test_empty() {
    54   _("Verify the tracker is empty to start with.");
    56   do_check_eq(0, Object.keys(tracker.changedIDs).length);
    57   do_check_eq(0, tracker.score);
    59   cleanup_and_advance();
    60 });
    62 add_test(function test_not_tracking() {
    63   _("Ensures the tracker doesn't do anything when it isn't tracking.");
    65   let addon = installAddon("test_bootstrap1_1");
    66   uninstallAddon(addon);
    68   do_check_eq(0, Object.keys(tracker.changedIDs).length);
    69   do_check_eq(0, tracker.score);
    71   cleanup_and_advance();
    72 });
    74 add_test(function test_track_install() {
    75   _("Ensure that installing an add-on notifies tracker.");
    77   reconciler.startListening();
    79   Svc.Obs.notify("weave:engine:start-tracking");
    81   do_check_eq(0, tracker.score);
    82   let addon = installAddon("test_bootstrap1_1");
    83   let changed = tracker.changedIDs;
    85   do_check_eq(1, Object.keys(changed).length);
    86   do_check_true(addon.syncGUID in changed);
    87   do_check_eq(SCORE_INCREMENT_XLARGE, tracker.score);
    89   uninstallAddon(addon);
    90   cleanup_and_advance();
    91 });
    93 add_test(function test_track_uninstall() {
    94   _("Ensure that uninstalling an add-on notifies tracker.");
    96   reconciler.startListening();
    98   let addon = installAddon("test_bootstrap1_1");
    99   let guid = addon.syncGUID;
   100   do_check_eq(0, tracker.score);
   102   Svc.Obs.notify("weave:engine:start-tracking");
   104   uninstallAddon(addon);
   105   let changed = tracker.changedIDs;
   106   do_check_eq(1, Object.keys(changed).length);
   107   do_check_true(guid in changed);
   108   do_check_eq(SCORE_INCREMENT_XLARGE, tracker.score);
   110   cleanup_and_advance();
   111 });
   113 add_test(function test_track_user_disable() {
   114   _("Ensure that tracker sees disabling of add-on");
   116   reconciler.startListening();
   118   let addon = installAddon("test_bootstrap1_1");
   119   do_check_false(addon.userDisabled);
   120   do_check_false(addon.appDisabled);
   121   do_check_true(addon.isActive);
   123   Svc.Obs.notify("weave:engine:start-tracking");
   124   do_check_eq(0, tracker.score);
   126   let cb = Async.makeSyncCallback();
   128   let listener = {
   129     onDisabled: function(disabled) {
   130       _("onDisabled");
   131       if (disabled.id == addon.id) {
   132         AddonManager.removeAddonListener(listener);
   133         cb();
   134       }
   135     },
   136     onDisabling: function(disabling) {
   137       _("onDisabling add-on");
   138     }
   139   };
   140   AddonManager.addAddonListener(listener);
   142   _("Disabling add-on");
   143   addon.userDisabled = true;
   144   _("Disabling started...");
   145   Async.waitForSyncCallback(cb);
   147   let changed = tracker.changedIDs;
   148   do_check_eq(1, Object.keys(changed).length);
   149   do_check_true(addon.syncGUID in changed);
   150   do_check_eq(SCORE_INCREMENT_XLARGE, tracker.score);
   152   uninstallAddon(addon);
   153   cleanup_and_advance();
   154 });
   156 add_test(function test_track_enable() {
   157   _("Ensure that enabling a disabled add-on notifies tracker.");
   159   reconciler.startListening();
   161   let addon = installAddon("test_bootstrap1_1");
   162   addon.userDisabled = true;
   163   store._sleep(0);
   165   do_check_eq(0, tracker.score);
   167   Svc.Obs.notify("weave:engine:start-tracking");
   168   addon.userDisabled = false;
   169   store._sleep(0);
   171   let changed = tracker.changedIDs;
   172   do_check_eq(1, Object.keys(changed).length);
   173   do_check_true(addon.syncGUID in changed);
   174   do_check_eq(SCORE_INCREMENT_XLARGE, tracker.score);
   176   uninstallAddon(addon);
   177   cleanup_and_advance();
   178 });

mercurial