| OLD | NEW |
| 1 (function() | 1 (function() |
| 2 { | 2 { |
| 3 let testRunner = null; | 3 let testRunner = null; |
| 4 let randomResult = 0.5; | 4 let randomResult = 0.5; |
| 5 | 5 |
| 6 let originalInfo; | 6 let originalInfo; |
| 7 let info = require("info"); | 7 let info = require("info"); |
| 8 | 8 |
| 9 module("Notification handling", | 9 module("Notification handling", |
| 10 { | 10 { |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 | 88 |
| 89 test("No data", function() | 89 test("No data", function() |
| 90 { | 90 { |
| 91 equal(Notification.getNextToShow(), null, "null should be returned if there
is no data"); | 91 equal(Notification.getNextToShow(), null, "null should be returned if there
is no data"); |
| 92 }); | 92 }); |
| 93 | 93 |
| 94 test("Single notification", function() | 94 test("Single notification", function() |
| 95 { | 95 { |
| 96 let information = fixConstructors({ | 96 let information = fixConstructors({ |
| 97 id: 1, | 97 id: 1, |
| 98 severity: "information", | 98 type: "information", |
| 99 message: {"en-US": "Information"} | 99 message: {"en-US": "Information"} |
| 100 }); | 100 }); |
| 101 | 101 |
| 102 registerHandler([information]); | 102 registerHandler([information]); |
| 103 testRunner.runScheduledTasks(1); | 103 testRunner.runScheduledTasks(1); |
| 104 | 104 |
| 105 deepEqual(Notification.getNextToShow(), information, "The notification is sh
own"); | 105 deepEqual(Notification.getNextToShow(), information, "The notification is sh
own"); |
| 106 equal(Notification.getNextToShow(), null, "Informational notifications aren'
t shown more than once"); | 106 equal(Notification.getNextToShow(), null, "Informational notifications aren'
t shown more than once"); |
| 107 }); | 107 }); |
| 108 | 108 |
| 109 test("Information and critical", function() | 109 test("Information and critical", function() |
| 110 { | 110 { |
| 111 let information = fixConstructors({ | 111 let information = fixConstructors({ |
| 112 id: 1, | 112 id: 1, |
| 113 severity: "information", | 113 type: "information", |
| 114 message: {"en-US": "Information"} | 114 message: {"en-US": "Information"} |
| 115 }); | 115 }); |
| 116 let critical = fixConstructors({ | 116 let critical = fixConstructors({ |
| 117 id: 2, | 117 id: 2, |
| 118 severity: "critical", | 118 type: "critical", |
| 119 message: {"en-US": "Critical"} | 119 message: {"en-US": "Critical"} |
| 120 }); | 120 }); |
| 121 | 121 |
| 122 registerHandler([information, critical]); | 122 registerHandler([information, critical]); |
| 123 testRunner.runScheduledTasks(1); | 123 testRunner.runScheduledTasks(1); |
| 124 | 124 |
| 125 deepEqual(Notification.getNextToShow(), critical, "The critical notification
is given priority"); | 125 deepEqual(Notification.getNextToShow(), critical, "The critical notification
is given priority"); |
| 126 deepEqual(Notification.getNextToShow(), critical, "Critical notifications ca
n be shown multiple times"); | 126 deepEqual(Notification.getNextToShow(), critical, "Critical notifications ca
n be shown multiple times"); |
| 127 }); | 127 }); |
| 128 | 128 |
| 129 test("No severity", function() | 129 test("No type", function() |
| 130 { | 130 { |
| 131 let information = fixConstructors({ | 131 let information = fixConstructors({ |
| 132 id: 1, | 132 id: 1, |
| 133 message: {"en-US": "Information"} | 133 message: {"en-US": "Information"} |
| 134 }); | 134 }); |
| 135 | 135 |
| 136 registerHandler([information]); | 136 registerHandler([information]); |
| 137 testRunner.runScheduledTasks(1); | 137 testRunner.runScheduledTasks(1); |
| 138 | 138 |
| 139 deepEqual(Notification.getNextToShow(), information, "The notification is sh
own"); | 139 deepEqual(Notification.getNextToShow(), information, "The notification is sh
own"); |
| 140 equal(Notification.getNextToShow(), null, "Notification is treated as severi
ty information"); | 140 equal(Notification.getNextToShow(), null, "Notification is treated as type i
nformation"); |
| 141 }); | 141 }); |
| 142 | 142 |
| 143 test("Target selection", function() | 143 test("Target selection", function() |
| 144 { | 144 { |
| 145 let targets = [ | 145 let targets = [ |
| 146 ["extension", "adblockpluschrome", true], | 146 ["extension", "adblockpluschrome", true], |
| 147 ["extension", "adblockplus", false], | 147 ["extension", "adblockplus", false], |
| 148 ["extension", "adblockpluschrome2", false], | 148 ["extension", "adblockpluschrome2", false], |
| 149 ["extensionMinVersion", "1.4", true], | 149 ["extensionMinVersion", "1.4", true], |
| 150 ["extensionMinVersion", "1.4.1", true], | 150 ["extensionMinVersion", "1.4.1", true], |
| (...skipping 26 matching lines...) Expand all Loading... |
| 177 ["platformMaxVersion", "11", false], | 177 ["platformMaxVersion", "11", false], |
| 178 ]; | 178 ]; |
| 179 | 179 |
| 180 for each (let [propName, value, result] in targets) | 180 for each (let [propName, value, result] in targets) |
| 181 { | 181 { |
| 182 let targetInfo = {}; | 182 let targetInfo = {}; |
| 183 targetInfo[propName] = value; | 183 targetInfo[propName] = value; |
| 184 | 184 |
| 185 let information = fixConstructors({ | 185 let information = fixConstructors({ |
| 186 id: 1, | 186 id: 1, |
| 187 severity: "information", | 187 type: "information", |
| 188 message: {"en-US": "Information"}, | 188 message: {"en-US": "Information"}, |
| 189 targets: [targetInfo] | 189 targets: [targetInfo] |
| 190 }); | 190 }); |
| 191 | 191 |
| 192 Prefs.notificationdata = {}; | 192 Prefs.notificationdata = {}; |
| 193 registerHandler([information]); | 193 registerHandler([information]); |
| 194 testRunner.runScheduledTasks(1); | 194 testRunner.runScheduledTasks(1); |
| 195 | 195 |
| 196 let expected = (result ? information : null); | 196 let expected = (result ? information : null); |
| 197 deepEqual(Notification.getNextToShow(), expected, "Selected notification f
or " + JSON.stringify(information.targets)); | 197 deepEqual(Notification.getNextToShow(), expected, "Selected notification f
or " + JSON.stringify(information.targets)); |
| 198 deepEqual(Notification.getNextToShow(), null, "No notification on second c
all"); | 198 deepEqual(Notification.getNextToShow(), null, "No notification on second c
all"); |
| 199 } | 199 } |
| 200 | 200 |
| 201 function pairs(array) | 201 function pairs(array) |
| 202 { | 202 { |
| 203 for each (let element1 in array) | 203 for each (let element1 in array) |
| 204 for each (let element2 in array) | 204 for each (let element2 in array) |
| 205 yield [element1, element2]; | 205 yield [element1, element2]; |
| 206 } | 206 } |
| 207 for (let [[propName1, value1, result1], [propName2, value2, result2]] in pai
rs(targets)) | 207 for (let [[propName1, value1, result1], [propName2, value2, result2]] in pai
rs(targets)) |
| 208 { | 208 { |
| 209 let targetInfo1 = {}; | 209 let targetInfo1 = {}; |
| 210 targetInfo1[propName1] = value1; | 210 targetInfo1[propName1] = value1; |
| 211 let targetInfo2 = {}; | 211 let targetInfo2 = {}; |
| 212 targetInfo2[propName2] = value2; | 212 targetInfo2[propName2] = value2; |
| 213 | 213 |
| 214 let information = fixConstructors({ | 214 let information = fixConstructors({ |
| 215 id: 1, | 215 id: 1, |
| 216 severity: "information", | 216 type: "information", |
| 217 message: {"en-US": "Information"}, | 217 message: {"en-US": "Information"}, |
| 218 targets: [targetInfo1, targetInfo2] | 218 targets: [targetInfo1, targetInfo2] |
| 219 }); | 219 }); |
| 220 | 220 |
| 221 Prefs.notificationdata = {}; | 221 Prefs.notificationdata = {}; |
| 222 registerHandler([information]); | 222 registerHandler([information]); |
| 223 testRunner.runScheduledTasks(1); | 223 testRunner.runScheduledTasks(1); |
| 224 | 224 |
| 225 let expected = (result1 || result2 ? information : null) | 225 let expected = (result1 || result2 ? information : null) |
| 226 deepEqual(Notification.getNextToShow(), expected, "Selected notification f
or " + JSON.stringify(information.targets)); | 226 deepEqual(Notification.getNextToShow(), expected, "Selected notification f
or " + JSON.stringify(information.targets)); |
| 227 deepEqual(Notification.getNextToShow(), null, "No notification on second c
all"); | 227 deepEqual(Notification.getNextToShow(), null, "No notification on second c
all"); |
| 228 | 228 |
| 229 information = fixConstructors({ | 229 information = fixConstructors({ |
| 230 id: 1, | 230 id: 1, |
| 231 severity: "information", | 231 type: "information", |
| 232 message: {"en-US": "Information"}, | 232 message: {"en-US": "Information"}, |
| 233 targets: [targetInfo1] | 233 targets: [targetInfo1] |
| 234 }); | 234 }); |
| 235 let critical = fixConstructors({ | 235 let critical = fixConstructors({ |
| 236 id: 2, | 236 id: 2, |
| 237 severity: "critical", | 237 type: "critical", |
| 238 message: {"en-US": "Critical"}, | 238 message: {"en-US": "Critical"}, |
| 239 targets: [targetInfo2] | 239 targets: [targetInfo2] |
| 240 }); | 240 }); |
| 241 | 241 |
| 242 Prefs.notificationdata = {}; | 242 Prefs.notificationdata = {}; |
| 243 registerHandler([information, critical]); | 243 registerHandler([information, critical]); |
| 244 testRunner.runScheduledTasks(1); | 244 testRunner.runScheduledTasks(1); |
| 245 | 245 |
| 246 expected = (result2 ? critical : (result1 ? information : null)); | 246 expected = (result2 ? critical : (result1 ? information : null)); |
| 247 deepEqual(Notification.getNextToShow(), expected, "Selected notification f
or information with " + JSON.stringify(information.targets) + " and critical wit
h " + JSON.stringify(critical.targets)); | 247 deepEqual(Notification.getNextToShow(), expected, "Selected notification f
or information with " + JSON.stringify(information.targets) + " and critical wit
h " + JSON.stringify(critical.targets)); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 randomResult = test.randomResult; | 310 randomResult = test.randomResult; |
| 311 | 311 |
| 312 let maxHours = Math.round(Math.max.apply(null, test.requests)) + 1; | 312 let maxHours = Math.round(Math.max.apply(null, test.requests)) + 1; |
| 313 testRunner.runScheduledTasks(maxHours, test.skipAfter, test.skip); | 313 testRunner.runScheduledTasks(maxHours, test.skipAfter, test.skip); |
| 314 | 314 |
| 315 let skipAddendum = (typeof test.skip != "number" ? "" : " skipping " + tes
t.skip + " hours after " + test.skipAfter + " hours"); | 315 let skipAddendum = (typeof test.skip != "number" ? "" : " skipping " + tes
t.skip + " hours after " + test.skipAfter + " hours"); |
| 316 deepEqual(requests, test.requests, "Requests with Math.random() returning
" + randomResult + skipAddendum); | 316 deepEqual(requests, test.requests, "Requests with Math.random() returning
" + randomResult + skipAddendum); |
| 317 } | 317 } |
| 318 }); | 318 }); |
| 319 | 319 |
| 320 test("Uses severity instead of type", 3, function() |
| 321 { |
| 322 let severityNotification = { |
| 323 id: 1, |
| 324 severity: "information", |
| 325 message: {"en-US": "Information"} |
| 326 }; |
| 327 |
| 328 function listener(name) |
| 329 { |
| 330 if (name !== "notificationdata") |
| 331 return; |
| 332 |
| 333 Prefs.removeListener(listener); |
| 334 let notification = Prefs.notificationdata.data.notifications[0]; |
| 335 ok(!("severity" in notification), "Severity property was removed"); |
| 336 ok("type" in notification, "Type property was added"); |
| 337 equal(notification.type, severityNotification.severity, "Type property has
correct value"); |
| 338 } |
| 339 Prefs.addListener(listener); |
| 340 |
| 341 let responseText = JSON.stringify({ |
| 342 notifications: [severityNotification] |
| 343 }); |
| 344 Notification._onDownloadSuccess(null, responseText, function() {}, function(
) {}); |
| 345 }); |
| 346 |
| 347 test("URL-specific notification", function() |
| 348 { |
| 349 let withURLFilterFoo = fixConstructors({ |
| 350 id: 1, |
| 351 urlFilters: ["foo.com"] |
| 352 }); |
| 353 let withoutURLFilter = fixConstructors({ |
| 354 id: 2 |
| 355 }); |
| 356 let withURLFilterBar = fixConstructors({ |
| 357 id: 3, |
| 358 urlFilters: ["bar.com"] |
| 359 }); |
| 360 let subdomainURLFilter = fixConstructors({ |
| 361 id: 4, |
| 362 urlFilters: ["||example.com"] |
| 363 }); |
| 364 |
| 365 registerHandler([ |
| 366 withURLFilterFoo, |
| 367 withoutURLFilter, |
| 368 withURLFilterBar, |
| 369 subdomainURLFilter |
| 370 ]); |
| 371 testRunner.runScheduledTasks(1); |
| 372 |
| 373 deepEqual(Notification.getNextToShow(), withoutURLFilter, "URL-specific noti
fications are skipped"); |
| 374 deepEqual(Notification.getNextToShow("http://foo.com"), withURLFilterFoo, "U
RL-specific notification is retrieved"); |
| 375 deepEqual(Notification.getNextToShow("http://foo.com"), null, "URL-specific
notification is not retrieved"); |
| 376 deepEqual(Notification.getNextToShow("http://www.example.com"), subdomainURL
Filter, "URL-specific notification matches subdomain"); |
| 377 }); |
| 378 |
| 320 module("Notification localization"); | 379 module("Notification localization"); |
| 321 | 380 |
| 381 test("Message without localization", function() |
| 382 { |
| 383 let notification = {message: "non-localized"}; |
| 384 let texts = Notification.getLocalizedTexts(notification, "en-US"); |
| 385 equal(texts.message, "non-localized"); |
| 386 }); |
| 387 |
| 322 test("Language only", function() | 388 test("Language only", function() |
| 323 { | 389 { |
| 324 let notification = {message: {fr: "fr"}}; | 390 let notification = {message: {fr: "fr"}}; |
| 325 let texts = Notification.getLocalizedTexts(notification, "fr"); | 391 let texts = Notification.getLocalizedTexts(notification, "fr"); |
| 326 equal(texts.message, "fr"); | 392 equal(texts.message, "fr"); |
| 327 texts = Notification.getLocalizedTexts(notification, "fr-CA"); | 393 texts = Notification.getLocalizedTexts(notification, "fr-CA"); |
| 328 equal(texts.message, "fr"); | 394 equal(texts.message, "fr"); |
| 329 }); | 395 }); |
| 330 | 396 |
| 331 test("Language and country", function() | 397 test("Language and country", function() |
| 332 { | 398 { |
| 333 let notification = {message: {fr: "fr", "fr-CA": "fr-CA"}}; | 399 let notification = {message: {fr: "fr", "fr-CA": "fr-CA"}}; |
| 334 let texts = Notification.getLocalizedTexts(notification, "fr-CA"); | 400 let texts = Notification.getLocalizedTexts(notification, "fr-CA"); |
| 335 equal(texts.message, "fr-CA"); | 401 equal(texts.message, "fr-CA"); |
| 336 texts = Notification.getLocalizedTexts(notification, "fr"); | 402 texts = Notification.getLocalizedTexts(notification, "fr"); |
| 337 equal(texts.message, "fr"); | 403 equal(texts.message, "fr"); |
| 338 }); | 404 }); |
| 339 | 405 |
| 340 test("Missing translation", function() | 406 test("Missing translation", function() |
| 341 { | 407 { |
| 342 let notification = {message: {"en-US": "en-US"}}; | 408 let notification = {message: {"en-US": "en-US"}}; |
| 343 let texts = Notification.getLocalizedTexts(notification, "fr"); | 409 let texts = Notification.getLocalizedTexts(notification, "fr"); |
| 344 equal(texts.message, "en-US"); | 410 equal(texts.message, "en-US"); |
| 345 }); | 411 }); |
| 346 })(); | 412 })(); |
| OLD | NEW |