| Index: test/filterClasses.js | 
| =================================================================== | 
| --- a/test/filterClasses.js | 
| +++ b/test/filterClasses.js | 
| @@ -25,27 +25,29 @@ let CommentFilter = null; | 
| let ActiveFilter = null; | 
| let RegExpFilter = null; | 
| let BlockingFilter = null; | 
| let WhitelistFilter = null; | 
| let ElemHideBase = null; | 
| let ElemHideFilter = null; | 
| let ElemHideException = null; | 
| let ElemHideEmulationFilter = null; | 
| +let FilterNotifier = null; | 
| exports.setUp = function(callback) | 
| { | 
| let sandboxedRequire = createSandbox(); | 
| ( | 
| { | 
| Filter, InvalidFilter, CommentFilter, ActiveFilter, RegExpFilter, | 
| BlockingFilter, WhitelistFilter, ElemHideBase, ElemHideFilter, | 
| ElemHideException, ElemHideEmulationFilter | 
| } = sandboxedRequire("../lib/filterClasses") | 
| ); | 
| + ({FilterNotifier} = sandboxedRequire("../lib/filterNotifier")); | 
| callback(); | 
| }; | 
| exports.testFromText = function(test) | 
| { | 
| let tests = [ | 
| ["!asdf", CommentFilter, "comment"], | 
| ["asdf", BlockingFilter, "blocking"], | 
| @@ -364,8 +366,66 @@ exports.testElemHideSelector = function( | 
| for (let [text, selector, selectorDomain] of tests) | 
| { | 
| doTest(text, selector, selectorDomain); | 
| doTest(text.replace("##", "#@#"), selector, selectorDomain); | 
| } | 
| test.done(); | 
| }; | 
| + | 
| +exports.testNotifications = function(test) | 
| +{ | 
| + function checkNotifications(action, expected, message) | 
| + { | 
| + let result = null; | 
| + let listener = (topic, filter, newValue, oldValue) => | 
| + { | 
| + if (result) | 
| + test.ok(false, "Got more that one notification - " + message); | 
| + else | 
| + result = [topic, filter.text, newValue, oldValue]; | 
| + }; | 
| + FilterNotifier.addListener(listener); | 
| + action(); | 
| + FilterNotifier.removeListener(listener); | 
| + test.deepEqual(result, expected, message); | 
| + } | 
| + | 
| + let filter = Filter.fromText("foobar"); | 
| + checkNotifications(() => | 
| + { | 
| + filter.disabled = true; | 
| + }, ["filter.disabled", "foobar", true, false], "Disabling filter"); | 
| + checkNotifications(() => | 
| + { | 
| + filter.disabled = true; | 
| + }, null, "Disabling already disabled filter"); | 
| + checkNotifications(() => | 
| + { | 
| + filter.disabled = false; | 
| + }, ["filter.disabled", "foobar", false, true], "Enabling filter"); | 
| + | 
| + checkNotifications(() => | 
| + { | 
| + filter.lastHit = 1234; | 
| + }, ["filter.lastHit", "foobar", 1234, 0], "Changing last filter hit"); | 
| + checkNotifications(() => | 
| + { | 
| + filter.lastHit = 1234; | 
| + }, null, "Changing last filter hit to same value"); | 
| + checkNotifications(() => | 
| + { | 
| + filter.lastHit = 0; | 
| + }, ["filter.lastHit", "foobar", 0, 1234], "Resetting last filter hit"); | 
| + | 
| + checkNotifications(() => | 
| + { | 
| + filter.hitCount++; | 
| + }, ["filter.hitCount", "foobar", 1, 0], "Increasing filter hit counts"); | 
| + checkNotifications(() => | 
| + { | 
| + filter.hitCount = 0; | 
| + }, ["filter.hitCount", "foobar", 0, 1], "Resetting filter hit counts"); | 
| + | 
| + filter.delete(); | 
| + test.done(); | 
| +}; |