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