services/sync/tests/unit/test_addons_tracker.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:8684f8c75d7b
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
3
4 "use strict";
5
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");
11
12 loadAddonTestFunctions();
13 startupManager();
14 Svc.Prefs.set("addons.ignoreRepositoryChecking", true);
15 Svc.Prefs.set("engine.addons", true);
16
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;
22
23 // Don't write out by default.
24 tracker.persistChangedIDs = false;
25
26 const addon1ID = "addon1@tests.mozilla.org";
27
28 function cleanup_and_advance() {
29 Svc.Obs.notify("weave:engine:stop-tracking");
30 tracker.stopTracking();
31
32 tracker.resetScore();
33 tracker.clearChangedIDs();
34
35 reconciler._addons = {};
36 reconciler._changes = [];
37 let cb = Async.makeSpinningCallback();
38 reconciler.saveState(null, cb);
39 cb.wait();
40
41 run_next_test();
42 }
43
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;
49
50 cleanup_and_advance();
51 }
52
53 add_test(function test_empty() {
54 _("Verify the tracker is empty to start with.");
55
56 do_check_eq(0, Object.keys(tracker.changedIDs).length);
57 do_check_eq(0, tracker.score);
58
59 cleanup_and_advance();
60 });
61
62 add_test(function test_not_tracking() {
63 _("Ensures the tracker doesn't do anything when it isn't tracking.");
64
65 let addon = installAddon("test_bootstrap1_1");
66 uninstallAddon(addon);
67
68 do_check_eq(0, Object.keys(tracker.changedIDs).length);
69 do_check_eq(0, tracker.score);
70
71 cleanup_and_advance();
72 });
73
74 add_test(function test_track_install() {
75 _("Ensure that installing an add-on notifies tracker.");
76
77 reconciler.startListening();
78
79 Svc.Obs.notify("weave:engine:start-tracking");
80
81 do_check_eq(0, tracker.score);
82 let addon = installAddon("test_bootstrap1_1");
83 let changed = tracker.changedIDs;
84
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);
88
89 uninstallAddon(addon);
90 cleanup_and_advance();
91 });
92
93 add_test(function test_track_uninstall() {
94 _("Ensure that uninstalling an add-on notifies tracker.");
95
96 reconciler.startListening();
97
98 let addon = installAddon("test_bootstrap1_1");
99 let guid = addon.syncGUID;
100 do_check_eq(0, tracker.score);
101
102 Svc.Obs.notify("weave:engine:start-tracking");
103
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);
109
110 cleanup_and_advance();
111 });
112
113 add_test(function test_track_user_disable() {
114 _("Ensure that tracker sees disabling of add-on");
115
116 reconciler.startListening();
117
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);
122
123 Svc.Obs.notify("weave:engine:start-tracking");
124 do_check_eq(0, tracker.score);
125
126 let cb = Async.makeSyncCallback();
127
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);
141
142 _("Disabling add-on");
143 addon.userDisabled = true;
144 _("Disabling started...");
145 Async.waitForSyncCallback(cb);
146
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);
151
152 uninstallAddon(addon);
153 cleanup_and_advance();
154 });
155
156 add_test(function test_track_enable() {
157 _("Ensure that enabling a disabled add-on notifies tracker.");
158
159 reconciler.startListening();
160
161 let addon = installAddon("test_bootstrap1_1");
162 addon.userDisabled = true;
163 store._sleep(0);
164
165 do_check_eq(0, tracker.score);
166
167 Svc.Obs.notify("weave:engine:start-tracking");
168 addon.userDisabled = false;
169 store._sleep(0);
170
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);
175
176 uninstallAddon(addon);
177 cleanup_and_advance();
178 });

mercurial