Index: chrome/content/tests/notification.js |
=================================================================== |
--- a/chrome/content/tests/notification.js |
+++ b/chrome/content/tests/notification.js |
@@ -6,6 +6,20 @@ |
let originalInfo; |
let info = require("info"); |
+ function showNotifications(url) |
+ { |
+ let shownNotifications = []; |
+ function showListener(notification) |
+ { |
+ shownNotifications.push(notification); |
+ Notification.markAsShown(notification.id); |
+ } |
+ Notification.addShowListener(showListener); |
+ Notification.showNext(url); |
+ Notification.removeShowListener(showListener); |
+ return shownNotifications; |
+ } |
+ |
module("Notification handling", |
{ |
setup: function() |
@@ -40,6 +54,10 @@ |
this._origRandom = DownloaderGlobal.Math.random; |
DownloaderGlobal.Math.random = () => randomResult; |
randomResult = 0.5; |
+ |
+ let NotificationGlobal = getModuleGlobal("notification"); |
+ this._origShowListeners = NotificationGlobal.showListeners; |
+ NotificationGlobal.showListeners = []; |
}, |
teardown: function() |
@@ -58,6 +76,13 @@ |
delete this._origRandom; |
} |
+ if (this._origShowListeners) |
+ { |
+ let NotificationGlobal = getModuleGlobal("notification"); |
+ NotificationGlobal.showListeners = this._origShowListeners; |
+ delete this._origShowListeners; |
+ } |
+ |
Notification.init(); |
} |
}); |
@@ -89,7 +114,7 @@ |
test("No data", function() |
{ |
- equal(Notification.getNextToShow(), null, "null should be returned if there is no data"); |
+ deepEqual(showNotifications(), [], "No notifications should be returned if there is no data"); |
}); |
test("Single notification", function() |
@@ -103,8 +128,8 @@ |
registerHandler([information]); |
testRunner.runScheduledTasks(1); |
- deepEqual(Notification.getNextToShow(), information, "The notification is shown"); |
- equal(Notification.getNextToShow(), null, "Informational notifications aren't shown more than once"); |
+ deepEqual(showNotifications(), [information], "The notification is shown"); |
+ deepEqual(showNotifications(), [], "Informational notifications aren't shown more than once"); |
}); |
test("Information and critical", function() |
@@ -123,8 +148,8 @@ |
registerHandler([information, critical]); |
testRunner.runScheduledTasks(1); |
- deepEqual(Notification.getNextToShow(), critical, "The critical notification is given priority"); |
- deepEqual(Notification.getNextToShow(), critical, "Critical notifications can be shown multiple times"); |
+ deepEqual(showNotifications(), [critical], "The critical notification is given priority"); |
+ deepEqual(showNotifications(), [critical], "Critical notifications can be shown multiple times"); |
}); |
test("No type", function() |
@@ -137,8 +162,8 @@ |
registerHandler([information]); |
testRunner.runScheduledTasks(1); |
- deepEqual(Notification.getNextToShow(), information, "The notification is shown"); |
- equal(Notification.getNextToShow(), null, "Notification is treated as type information"); |
+ deepEqual(showNotifications(), [information], "The notification is shown"); |
+ deepEqual(showNotifications(), [], "Notification is treated as type information"); |
}); |
test("Target selection", function() |
@@ -194,9 +219,9 @@ |
registerHandler([information]); |
testRunner.runScheduledTasks(1); |
- let expected = (result ? information : null); |
- deepEqual(Notification.getNextToShow(), expected, "Selected notification for " + JSON.stringify(information.targets)); |
- deepEqual(Notification.getNextToShow(), null, "No notification on second call"); |
+ let expected = (result ? [information] : []); |
+ deepEqual(showNotifications(), expected, "Selected notification for " + JSON.stringify(information.targets)); |
+ deepEqual(showNotifications(), [], "No notification on second call"); |
} |
function pairs(array) |
@@ -223,9 +248,9 @@ |
registerHandler([information]); |
testRunner.runScheduledTasks(1); |
- let expected = (result1 || result2 ? information : null) |
- deepEqual(Notification.getNextToShow(), expected, "Selected notification for " + JSON.stringify(information.targets)); |
- deepEqual(Notification.getNextToShow(), null, "No notification on second call"); |
+ let expected = (result1 || result2 ? [information] : []) |
+ deepEqual(showNotifications(), expected, "Selected notification for " + JSON.stringify(information.targets)); |
+ deepEqual(showNotifications(), [], "No notification on second call"); |
information = fixConstructors({ |
id: 1, |
@@ -244,8 +269,8 @@ |
registerHandler([information, critical]); |
testRunner.runScheduledTasks(1); |
- expected = (result2 ? critical : (result1 ? information : null)); |
- deepEqual(Notification.getNextToShow(), expected, "Selected notification for information with " + JSON.stringify(information.targets) + " and critical with " + JSON.stringify(critical.targets)); |
+ expected = (result2 ? [critical] : (result1 ? [information] : [])); |
+ deepEqual(showNotifications(), expected, "Selected notification for information with " + JSON.stringify(information.targets) + " and critical with " + JSON.stringify(critical.targets)); |
} |
}); |
@@ -371,10 +396,10 @@ |
]); |
testRunner.runScheduledTasks(1); |
- deepEqual(Notification.getNextToShow(), withoutURLFilter, "URL-specific notifications are skipped"); |
- deepEqual(Notification.getNextToShow("http://foo.com"), withURLFilterFoo, "URL-specific notification is retrieved"); |
- deepEqual(Notification.getNextToShow("http://foo.com"), null, "URL-specific notification is not retrieved"); |
- deepEqual(Notification.getNextToShow("http://www.example.com"), subdomainURLFilter, "URL-specific notification matches subdomain"); |
+ deepEqual(showNotifications(), [withoutURLFilter], "URL-specific notifications are skipped"); |
+ deepEqual(showNotifications("http://foo.com"), [withURLFilterFoo], "URL-specific notification is retrieved"); |
+ deepEqual(showNotifications("http://foo.com"), [], "URL-specific notification is not retrieved"); |
+ deepEqual(showNotifications("http://www.example.com"), [subdomainURLFilter], "URL-specific notification matches subdomain"); |
}); |
test("Global opt-out", function() |
@@ -413,16 +438,16 @@ |
registerHandler([information]); |
testRunner.runScheduledTasks(1); |
- deepEqual(Notification.getNextToShow(), null, "Information notifications are ignored after enabling global opt-out"); |
+ deepEqual(showNotifications(), [], "Information notifications are ignored after enabling global opt-out"); |
Felix Dahlke
2015/06/08 19:36:53
This and the following changes are the result of r
|
Notification.toggleIgnoreCategory("*", false); |
- deepEqual(Notification.getNextToShow(), information, "Information notifications are shown after disabling global opt-out"); |
+ deepEqual(showNotifications(), [information], "Information notifications are shown after disabling global opt-out"); |
Notification.toggleIgnoreCategory("*", true); |
Prefs.notificationdata = {}; |
registerHandler([critical]); |
testRunner.runScheduledTasks(1); |
- deepEqual(Notification.getNextToShow(), critical, "Critical notifications are not ignored"); |
+ deepEqual(showNotifications(), [critical], "Critical notifications are not ignored"); |
}); |
module("Notification localization"); |