Index: test/subscriptionClasses.js |
=================================================================== |
--- a/test/subscriptionClasses.js |
+++ b/test/subscriptionClasses.js |
@@ -20,26 +20,28 @@ |
let {createSandbox} = require("./_common"); |
let Filter = null; |
let Subscription = null; |
let SpecialSubscription = null; |
let DownloadableSubscription = null; |
let RegularSubscription = null; |
let ExternalSubscription = null; |
+let FilterNotifier = null; |
exports.setUp = function(callback) |
{ |
let sandboxedRequire = createSandbox(); |
({Filter} = sandboxedRequire("../lib/filterClasses")); |
( |
{ |
Subscription, SpecialSubscription, DownloadableSubscription |
} = sandboxedRequire("../lib/subscriptionClasses") |
); |
+ ({FilterNotifier} = sandboxedRequire("../lib/filterNotifier")); |
callback(); |
}; |
function compareSubscription(test, url, expected, postInit) |
{ |
expected.push("[Subscription]") |
let subscription = Subscription.fromURL(url); |
if (postInit) |
@@ -253,8 +255,117 @@ exports.testFilterSerialization = functi |
test.equal(subscription.serializeFilters(), "[Subscription filters]\nfilter2\nfilter1\n", "One filter removed"); |
subscription.delete(); |
filter1.delete(); |
filter2.delete(); |
test.done(); |
}; |
+ |
+exports.testNotifications = function(test) |
+{ |
+ function checkNotifications(action, expected, message) |
+ { |
+ let result = null; |
+ let listener = (topic, subscription, newValue, oldValue) => |
+ { |
+ if (result) |
+ test.ok(false, "Got more that one notification - " + message); |
+ else |
+ result = [topic, subscription.url, newValue, oldValue]; |
+ }; |
+ FilterNotifier.addListener(listener); |
+ action(); |
+ FilterNotifier.removeListener(listener); |
+ test.deepEqual(result, expected, message); |
+ } |
+ |
+ let subscription = Subscription.fromURL("http://example.com/"); |
+ checkNotifications(() => |
+ { |
+ subscription.title = "foobar"; |
+ }, ["subscription.title", "http://example.com/", "foobar", "http://example.com/"], "Changing subscription title"); |
+ checkNotifications(() => |
+ { |
+ subscription.title = "foobar"; |
+ }, null, "Setting subscription title to same value"); |
+ checkNotifications(() => |
+ { |
+ subscription.title = null; |
+ }, ["subscription.title", "http://example.com/", "", "foobar"], "Resetting subscription title"); |
+ |
+ checkNotifications(() => |
+ { |
+ subscription.disabled = true; |
+ }, ["subscription.disabled", "http://example.com/", true, false], "Disabling subscription"); |
+ checkNotifications(() => |
+ { |
+ subscription.disabled = true; |
+ }, null, "Disabling already disabled subscription"); |
+ checkNotifications(() => |
+ { |
+ subscription.disabled = false; |
+ }, ["subscription.disabled", "http://example.com/", false, true], "Enabling subscription"); |
+ |
+ checkNotifications(() => |
+ { |
+ subscription.fixedTitle = true; |
+ }, ["subscription.fixedTitle", "http://example.com/", true, false], "Marking title as fixed"); |
+ checkNotifications(() => |
+ { |
+ subscription.fixedTitle = false; |
+ }, ["subscription.fixedTitle", "http://example.com/", false, true], "Marking title as editable"); |
+ |
+ checkNotifications(() => |
+ { |
+ subscription.homepage = "http://example.info/"; |
+ }, ["subscription.homepage", "http://example.com/", "http://example.info/", ""], "Changing subscription homepage"); |
+ checkNotifications(() => |
+ { |
+ subscription.homepage = null; |
+ }, ["subscription.homepage", "http://example.com/", "", "http://example.info/"], "Resetting subscription homepage"); |
+ |
+ checkNotifications(() => |
+ { |
+ // Using a large number that will only fit into double but not int |
+ subscription.lastCheck = 123456789012345; |
+ }, ["subscription.lastCheck", "http://example.com/", 123456789012345, 0], "Changing subscription.lastCheck"); |
+ checkNotifications(() => |
+ { |
+ subscription.lastCheck = 123456789012345; |
+ }, null, "Setting subscription.lastCheck to same value"); |
+ checkNotifications(() => |
+ { |
+ subscription.lastCheck = 0; |
+ }, ["subscription.lastCheck", "http://example.com/", 0, 123456789012345], "Resetting subscription.lastCheck"); |
+ |
+ checkNotifications(() => |
+ { |
+ // Using a large number that will only fit into double but not int |
+ subscription.lastDownload = 543210987654321; |
+ }, ["subscription.lastDownload", "http://example.com/", 543210987654321, 0], "Changing subscription.lastDownload"); |
+ checkNotifications(() => |
+ { |
+ subscription.lastDownload = 0; |
+ }, ["subscription.lastDownload", "http://example.com/", 0, 543210987654321], "Resetting subscription.lastDownload"); |
+ |
+ checkNotifications(() => |
+ { |
+ subscription.downloadStatus = "ok"; |
+ }, ["subscription.downloadStatus", "http://example.com/", "ok", ""], "Changing subscription.downloadStatus"); |
+ checkNotifications(() => |
+ { |
+ subscription.downloadStatus = null; |
+ }, ["subscription.downloadStatus", "http://example.com/", "", "ok"], "Resetting subscription.downloadStatus"); |
+ |
+ checkNotifications(() => |
+ { |
+ subscription.errors++; |
+ }, ["subscription.errors", "http://example.com/", 1, 0], "Increasing subscription.errors"); |
+ checkNotifications(() => |
+ { |
+ subscription.errors = 0; |
+ }, ["subscription.errors", "http://example.com/", 0, 1], "Resetting subscription.erros"); |
+ |
+ subscription.delete(); |
+ test.done(); |
+}; |