Wed, 31 Dec 2014 06:09:35 +0100
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 // Tests manual updates, including the Available Updates pane
7 var gProvider;
8 var gManagerWindow;
9 var gCategoryUtilities;
10 var gAvailableCategory;
12 function test() {
13 waitForExplicitFinish();
15 gProvider = new MockProvider();
17 gProvider.createAddons([{
18 id: "addon1@tests.mozilla.org",
19 name: "auto updating addon",
20 version: "1.0",
21 applyBackgroundUpdates: AddonManager.AUTOUPDATE_ENABLE
22 }]);
24 open_manager("addons://list/extension", function(aWindow) {
25 gManagerWindow = aWindow;
26 gCategoryUtilities = new CategoryUtilities(gManagerWindow);
27 run_next_test();
28 });
29 }
31 function end_test() {
32 close_manager(gManagerWindow, function() {
33 finish();
34 });
35 }
38 add_test(function() {
39 gAvailableCategory = gManagerWindow.gCategories.get("addons://updates/available");
40 is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should initially be hidden");
42 gProvider.createAddons([{
43 id: "addon2@tests.mozilla.org",
44 name: "manually updating addon",
45 version: "1.0",
46 isCompatible: false,
47 blocklistState: Ci.nsIBlocklistService.STATE_BLOCKED,
48 applyBackgroundUpdates: AddonManager.AUTOUPDATE_DISABLE
49 }]);
51 is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should still be hidden");
53 run_next_test();
54 });
57 add_test(function() {
58 gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() {
59 gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false);
60 is(gCategoryUtilities.isVisible(gAvailableCategory), true, "Available Updates category should now be visible");
61 is(gAvailableCategory.badgeCount, 1, "Badge for Available Updates should now be 1");
62 run_next_test();
63 }, false);
65 gCategoryUtilities.openType("extension", function() {
66 gProvider.createInstalls([{
67 name: "manually updating addon (new and improved!)",
68 existingAddon: gProvider.addons[1],
69 version: "1.1",
70 releaseNotesURI: Services.io.newURI(TESTROOT + "thereIsNoFileHere.xhtml", null, null)
71 }]);
73 var item = get_addon_element(gManagerWindow, "addon2@tests.mozilla.org");
74 is(item._version.value, "1.0", "Should still show the old version in the normal list");
75 });
76 });
79 add_test(function() {
80 wait_for_view_load(gManagerWindow, function() {
81 is(gManagerWindow.document.getElementById("categories").selectedItem.value, "addons://updates/available", "Available Updates category should now be selected");
82 is(gManagerWindow.gViewController.currentViewId, "addons://updates/available", "Available Updates view should be the current view");
83 run_next_test();
84 }, true);
85 EventUtils.synthesizeMouseAtCenter(gAvailableCategory, { }, gManagerWindow);
86 });
89 add_test(function() {
90 var list = gManagerWindow.document.getElementById("updates-list");
91 is(list.itemCount, 1, "Should be 1 available update listed");
92 var item = list.firstChild;
93 is(item.mAddon.id, "addon2@tests.mozilla.org", "Update item should be for the manually updating addon");
95 // for manual update items, update-related properties are updated asynchronously,
96 // so we poll for one of the expected changes to know when its done
97 function waitForAsyncInit() {
98 if (item._version.value == "1.1") {
99 run_next_test();
100 return;
101 }
102 info("Update item not initialized yet, checking again in 100ms");
103 setTimeout(waitForAsyncInit, 100);
104 }
105 waitForAsyncInit();
106 });
108 add_test(function() {
109 var list = gManagerWindow.document.getElementById("updates-list");
110 var item = list.firstChild;
111 is(item._version.value, "1.1", "Update item should have version number of the update");
112 var postfix = gManagerWindow.document.getAnonymousElementByAttribute(item, "class", "update-postfix");
113 is_element_visible(postfix, "'Update' postfix should be visible");
114 is_element_visible(item._updateAvailable, "");
115 is_element_visible(item._relNotesToggle, "Release notes toggle should be visible");
116 is_element_hidden(item._warning, "Incompatible warning should be hidden");
117 is_element_hidden(item._error, "Blocklist error should be hidden");
119 info("Opening release notes");
120 item.addEventListener("RelNotesToggle", function() {
121 item.removeEventListener("RelNotesToggle", arguments.callee, false);
122 info("Release notes now open");
124 is_element_hidden(item._relNotesLoading, "Release notes loading message should be hidden");
125 is_element_visible(item._relNotesError, "Release notes error message should be visible");
126 is(item._relNotes.childElementCount, 0, "Release notes should be empty");
128 info("Closing release notes");
129 item.addEventListener("RelNotesToggle", function() {
130 item.removeEventListener("RelNotesToggle", arguments.callee, false);
131 info("Release notes now closed");
132 info("Setting Release notes URI to something that should load");
133 gProvider.installs[0].releaseNotesURI = Services.io.newURI(TESTROOT + "releaseNotes.xhtml", null, null)
135 info("Re-opening release notes");
136 item.addEventListener("RelNotesToggle", function() {
137 item.removeEventListener("RelNotesToggle", arguments.callee, false);
138 info("Release notes now open");
140 is_element_hidden(item._relNotesLoading, "Release notes loading message should be hidden");
141 is_element_hidden(item._relNotesError, "Release notes error message should be hidden");
142 isnot(item._relNotes.childElementCount, 0, "Release notes should have been inserted into container");
143 run_next_test();
145 }, false);
146 EventUtils.synthesizeMouseAtCenter(item._relNotesToggle, { }, gManagerWindow);
147 is_element_visible(item._relNotesLoading, "Release notes loading message should be visible");
149 }, false);
150 EventUtils.synthesizeMouseAtCenter(item._relNotesToggle, { }, gManagerWindow);
152 }, false);
153 EventUtils.synthesizeMouseAtCenter(item._relNotesToggle, { }, gManagerWindow);
154 is_element_visible(item._relNotesLoading, "Release notes loading message should be visible");
155 });
158 add_test(function() {
159 var badgeUpdated = false;
160 var installCompleted = false;
162 gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() {
163 gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false);
164 if (installCompleted)
165 run_next_test();
166 else
167 badgeUpdated = true;
168 }, false);
170 var list = gManagerWindow.document.getElementById("updates-list");
171 var item = list.firstChild;
172 var updateBtn = item._updateBtn;
173 is_element_visible(updateBtn, "Update button should be visible");
175 var install = gProvider.installs[0];
176 var listener = {
177 onInstallStarted: function() {
178 info("Install started");
179 is_element_visible(item._installStatus, "Install progress widget should be visible");
180 },
181 onInstallEnded: function() {
182 install.removeTestListener(this);
183 info("Install ended");
184 is_element_hidden(item._installStatus, "Install progress widget should be hidden");
186 if (badgeUpdated)
187 run_next_test();
188 else
189 installCompleted = true;
190 }
191 };
192 install.addTestListener(listener);
193 EventUtils.synthesizeMouseAtCenter(updateBtn, { }, gManagerWindow);
194 });
197 add_test(function() {
198 is(gCategoryUtilities.isVisible(gAvailableCategory), true, "Available Updates category should still be visible");
199 is(gAvailableCategory.badgeCount, 0, "Badge for Available Updates should now be 0");
201 gCategoryUtilities.openType("extension", function() {
202 is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should be hidden");
204 close_manager(gManagerWindow, function() {
205 open_manager(null, function(aWindow) {
206 gManagerWindow = aWindow;
207 gCategoryUtilities = new CategoryUtilities(gManagerWindow);
208 gAvailableCategory = gManagerWindow.gCategories.get("addons://updates/available");
210 is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should be hidden");
212 run_next_test();
213 });
214 });
215 });
216 });
218 add_test(function() {
219 gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() {
220 gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false);
221 is(gCategoryUtilities.isVisible(gAvailableCategory), true, "Available Updates category should now be visible");
222 is(gAvailableCategory.badgeCount, 1, "Badge for Available Updates should now be 1");
224 gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() {
225 gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false);
226 is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should now be hidden");
228 run_next_test();
229 }, false);
231 AddonManager.getAddonByID("addon2@tests.mozilla.org", function(aAddon) {
232 aAddon.applyBackgroundUpdates = AddonManager.AUTOUPDATE_ENABLE;
233 });
234 }, false);
236 gProvider.createInstalls([{
237 name: "manually updating addon (new and even more improved!)",
238 existingAddon: gProvider.addons[1],
239 version: "1.2",
240 releaseNotesURI: Services.io.newURI(TESTROOT + "thereIsNoFileHere.xhtml", null, null)
241 }]);
242 });