| OLD | NEW |
| 1 /* | 1 /* |
| 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
| 3 * Copyright (C) 2006-present eyeo GmbH | 3 * Copyright (C) 2006-present eyeo GmbH |
| 4 * | 4 * |
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
| 6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
| 7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
| 8 * | 8 * |
| 9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
| 13 * | 13 * |
| 14 * You should have received a copy of the GNU General Public License | 14 * You should have received a copy of the GNU General Public License |
| 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| 16 */ | 16 */ |
| 17 | 17 |
| 18 "use strict"; | 18 "use strict"; |
| 19 | 19 |
| 20 const assert = require("assert"); |
| 20 const {createSandbox} = require("./_common"); | 21 const {createSandbox} = require("./_common"); |
| 21 let sandboxedRequire = null; | 22 let sandboxedRequire = null; |
| 22 | 23 |
| 23 let filterStorage = null; | 24 let filterStorage = null; |
| 24 let Subscription = null; | 25 let Subscription = null; |
| 25 let Filter = null; | 26 let Filter = null; |
| 26 let defaultMatcher = null; | 27 let defaultMatcher = null; |
| 27 let SpecialSubscription = null; | 28 let SpecialSubscription = null; |
| 28 | 29 |
| 29 exports.setUp = function(callback) | 30 describe("Filter Listener", () => |
| 30 { | 31 { |
| 31 sandboxedRequire = createSandbox({ | 32 beforeEach(() => |
| 32 extraExports: { | 33 { |
| 33 elemHide: ["knownFilters"], | 34 sandboxedRequire = createSandbox({ |
| 34 elemHideEmulation: ["filters"], | 35 extraExports: { |
| 35 elemHideExceptions: ["knownExceptions"] | 36 elemHide: ["knownFilters"], |
| 36 } | 37 elemHideEmulation: ["filters"], |
| 37 }); | 38 elemHideExceptions: ["knownExceptions"] |
| 38 | 39 } |
| 39 // We need to require the filterListener module so that filter changes will be | 40 }); |
| 40 // noticed, even though we don't directly use the module here. | 41 |
| 41 sandboxedRequire("../lib/filterListener"); | 42 // We need to require the filterListener module so that filter changes will
be |
| 42 | 43 // noticed, even though we don't directly use the module here. |
| 43 ( | 44 sandboxedRequire("../lib/filterListener"); |
| 44 {filterStorage} = sandboxedRequire("../lib/filterStorage"), | 45 |
| 45 {Subscription, SpecialSubscription} = sandboxedRequire("../lib/subscriptionC
lasses"), | 46 ( |
| 46 {Filter} = sandboxedRequire("../lib/filterClasses"), | 47 {filterStorage} = sandboxedRequire("../lib/filterStorage"), |
| 47 {defaultMatcher} = sandboxedRequire("../lib/matcher") | 48 {Subscription, SpecialSubscription} = sandboxedRequire("../lib/subscriptio
nClasses"), |
| 48 ); | 49 {Filter} = sandboxedRequire("../lib/filterClasses"), |
| 49 | 50 {defaultMatcher} = sandboxedRequire("../lib/matcher") |
| 50 filterStorage.addSubscription(Subscription.fromURL("~fl~")); | 51 ); |
| 51 filterStorage.addSubscription(Subscription.fromURL("~wl~")); | 52 |
| 52 filterStorage.addSubscription(Subscription.fromURL("~eh~")); | 53 filterStorage.addSubscription(Subscription.fromURL("~fl~")); |
| 53 | 54 filterStorage.addSubscription(Subscription.fromURL("~wl~")); |
| 54 Subscription.fromURL("~fl~").defaults = ["blocking"]; | 55 filterStorage.addSubscription(Subscription.fromURL("~eh~")); |
| 55 Subscription.fromURL("~wl~").defaults = ["whitelist"]; | 56 |
| 56 Subscription.fromURL("~eh~").defaults = ["elemhide"]; | 57 Subscription.fromURL("~fl~").defaults = ["blocking"]; |
| 57 | 58 Subscription.fromURL("~wl~").defaults = ["whitelist"]; |
| 58 callback(); | 59 Subscription.fromURL("~eh~").defaults = ["elemhide"]; |
| 59 }; | 60 }); |
| 60 | 61 |
| 61 function checkKnownFilters(test, text, expected) | 62 function checkKnownFilters(text, expected) |
| 62 { | 63 { |
| 63 let result = {}; | 64 let result = {}; |
| 64 for (let type of ["blacklist", "whitelist"]) | 65 for (let type of ["blacklist", "whitelist"]) |
| 65 { | |
| 66 let matcher = defaultMatcher["_" + type]; | |
| 67 let filters = []; | |
| 68 for (let map of [matcher._simpleFiltersByKeyword, | |
| 69 matcher._complexFiltersByKeyword]) | |
| 70 { | 66 { |
| 71 for (let [keyword, set] of map) | 67 let matcher = defaultMatcher["_" + type]; |
| 68 let filters = []; |
| 69 for (let map of [matcher._simpleFiltersByKeyword, |
| 70 matcher._complexFiltersByKeyword]) |
| 72 { | 71 { |
| 73 for (let filter of set) | 72 for (let [keyword, set] of map) |
| 74 { | 73 { |
| 75 test.equal(matcher.findKeyword(filter), keyword, | 74 for (let filter of set) |
| 76 "Keyword of filter " + filter.text); | 75 { |
| 77 filters.push(filter.text); | 76 assert.equal(matcher.findKeyword(filter), keyword, |
| 77 "Keyword of filter " + filter.text); |
| 78 filters.push(filter.text); |
| 79 } |
| 78 } | 80 } |
| 79 } | 81 } |
| 82 result[type] = filters; |
| 80 } | 83 } |
| 81 result[type] = filters; | 84 |
| 85 let elemHide = sandboxedRequire("../lib/elemHide"); |
| 86 result.elemhide = []; |
| 87 for (let filter of elemHide.knownFilters) |
| 88 result.elemhide.push(filter.text); |
| 89 |
| 90 let elemHideExceptions = sandboxedRequire("../lib/elemHideExceptions"); |
| 91 result.elemhideexception = []; |
| 92 for (let exception of elemHideExceptions.knownExceptions) |
| 93 result.elemhideexception.push(exception.text); |
| 94 |
| 95 let elemHideEmulation = sandboxedRequire("../lib/elemHideEmulation"); |
| 96 result.elemhideemulation = []; |
| 97 for (let filter of elemHideEmulation.filters) |
| 98 result.elemhideemulation.push(filter.text); |
| 99 |
| 100 let {snippets} = sandboxedRequire("../lib/snippets"); |
| 101 result.snippets = []; |
| 102 for (let filter of snippets._filters) |
| 103 result.snippets.push(filter.text); |
| 104 |
| 105 let types = ["blacklist", "whitelist", "elemhide", "elemhideexception", |
| 106 "elemhideemulation", "snippets"]; |
| 107 for (let type of types) |
| 108 { |
| 109 if (!(type in expected)) |
| 110 expected[type] = []; |
| 111 else |
| 112 expected[type].sort(); |
| 113 result[type].sort(); |
| 114 } |
| 115 |
| 116 assert.deepEqual(result, expected, text); |
| 82 } | 117 } |
| 83 | 118 |
| 84 let elemHide = sandboxedRequire("../lib/elemHide"); | 119 it("Add and remove filters", () => |
| 85 result.elemhide = []; | 120 { |
| 86 for (let filter of elemHide.knownFilters) | 121 let filter1 = Filter.fromText("filter1"); |
| 87 result.elemhide.push(filter.text); | 122 let filter2 = Filter.fromText("@@filter2"); |
| 88 | 123 let filter3 = Filter.fromText("##filter3"); |
| 89 let elemHideExceptions = sandboxedRequire("../lib/elemHideExceptions"); | 124 let filter4 = Filter.fromText("!filter4"); |
| 90 result.elemhideexception = []; | 125 let filter5 = Filter.fromText("#@#filter5"); |
| 91 for (let exception of elemHideExceptions.knownExceptions) | 126 let filter6 = Filter.fromText("example.com#?#:-abp-properties(filter6')"); |
| 92 result.elemhideexception.push(exception.text); | 127 let filter7 = Filter.fromText("example.com#@#[-abp-properties='filter7']"); |
| 93 | 128 |
| 94 let elemHideEmulation = sandboxedRequire("../lib/elemHideEmulation"); | 129 filterStorage.addFilter(filter1); |
| 95 result.elemhideemulation = []; | 130 checkKnownFilters("add filter1", {blacklist: [filter1.text]}); |
| 96 for (let filter of elemHideEmulation.filters) | 131 filterStorage.addFilter(filter2); |
| 97 result.elemhideemulation.push(filter.text); | 132 checkKnownFilters("add @@filter2", {blacklist: [filter1.text], whitelist: [f
ilter2.text]}); |
| 98 | 133 filterStorage.addFilter(filter3); |
| 99 let {snippets} = sandboxedRequire("../lib/snippets"); | 134 checkKnownFilters("add ##filter3", {blacklist: [filter1.text], whitelist: [f
ilter2.text], elemhide: [filter3.text]}); |
| 100 result.snippets = []; | 135 filterStorage.addFilter(filter4); |
| 101 for (let filter of snippets._filters) | 136 checkKnownFilters("add !filter4", {blacklist: [filter1.text], whitelist: [fi
lter2.text], elemhide: [filter3.text]}); |
| 102 result.snippets.push(filter.text); | 137 filterStorage.addFilter(filter5); |
| 103 | 138 checkKnownFilters("add #@#filter5", {blacklist: [filter1.text], whitelist: [
filter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text]}); |
| 104 let types = ["blacklist", "whitelist", "elemhide", "elemhideexception", | 139 filterStorage.addFilter(filter6); |
| 105 "elemhideemulation", "snippets"]; | 140 checkKnownFilters("add example.com##:-abp-properties(filter6)", {blacklist:
[filter1.text], whitelist: [filter2.text], elemhide: [filter3.text], elemhideexc
eption: [filter5.text], elemhideemulation: [filter6.text]}); |
| 106 for (let type of types) | 141 filterStorage.addFilter(filter7); |
| 107 { | 142 checkKnownFilters("add example.com#@#[-abp-properties='filter7']", {blacklis
t: [filter1.text], whitelist: [filter2.text], elemhide: [filter3.text], elemhide
exception: [filter5.text, filter7.text], elemhideemulation: [filter6.text]}); |
| 108 if (!(type in expected)) | 143 |
| 109 expected[type] = []; | 144 filterStorage.removeFilter(filter1); |
| 110 else | 145 checkKnownFilters("remove filter1", {whitelist: [filter2.text], elemhide: [f
ilter3.text], elemhideexception: [filter5.text, filter7.text], elemhideemulation
: [filter6.text]}); |
| 111 expected[type].sort(); | 146 filter2.disabled = true; |
| 112 result[type].sort(); | 147 checkKnownFilters("disable filter2", {elemhide: [filter3.text], elemhideexce
ption: [filter5.text, filter7.text], elemhideemulation: [filter6.text]}); |
| 113 } | 148 filterStorage.removeFilter(filter2); |
| 114 | 149 checkKnownFilters("remove filter2", {elemhide: [filter3.text], elemhideexcep
tion: [filter5.text, filter7.text], elemhideemulation: [filter6.text]}); |
| 115 test.deepEqual(result, expected, text); | 150 filterStorage.removeFilter(filter4); |
| 116 } | 151 checkKnownFilters("remove filter4", {elemhide: [filter3.text], elemhideexcep
tion: [filter5.text, filter7.text], elemhideemulation: [filter6.text]}); |
| 117 | 152 }); |
| 118 exports.testAddingAndRemovingFilters = function(test) | 153 |
| 119 { | 154 it("Disabling / Enabling Filters not in the list", () => |
| 120 let filter1 = Filter.fromText("filter1"); | 155 { |
| 121 let filter2 = Filter.fromText("@@filter2"); | 156 let filter1 = Filter.fromText("filter1"); |
| 122 let filter3 = Filter.fromText("##filter3"); | 157 let filter2 = Filter.fromText("@@filter2"); |
| 123 let filter4 = Filter.fromText("!filter4"); | 158 let filter3 = Filter.fromText("##filter3"); |
| 124 let filter5 = Filter.fromText("#@#filter5"); | 159 let filter4 = Filter.fromText("#@#filter4"); |
| 125 let filter6 = Filter.fromText("example.com#?#:-abp-properties(filter6')"); | 160 let filter5 = Filter.fromText("example.com#?#:-abp-properties(filter5)"); |
| 126 let filter7 = Filter.fromText("example.com#@#[-abp-properties='filter7']"); | 161 let filter6 = Filter.fromText("example.com#@#[-abp-properties='filter6']"); |
| 127 | 162 |
| 128 filterStorage.addFilter(filter1); | 163 filter1.disabled = true; |
| 129 checkKnownFilters(test, "add filter1", {blacklist: [filter1.text]}); | 164 checkKnownFilters("disable filter1 while not in list", {}); |
| 130 filterStorage.addFilter(filter2); | 165 filter1.disabled = false; |
| 131 checkKnownFilters(test, "add @@filter2", {blacklist: [filter1.text], whitelist
: [filter2.text]}); | 166 checkKnownFilters("enable filter1 while not in list", {}); |
| 132 filterStorage.addFilter(filter3); | 167 |
| 133 checkKnownFilters(test, "add ##filter3", {blacklist: [filter1.text], whitelist
: [filter2.text], elemhide: [filter3.text]}); | 168 filter2.disabled = true; |
| 134 filterStorage.addFilter(filter4); | 169 checkKnownFilters("disable @@filter2 while not in list", {}); |
| 135 checkKnownFilters(test, "add !filter4", {blacklist: [filter1.text], whitelist:
[filter2.text], elemhide: [filter3.text]}); | 170 filter2.disabled = false; |
| 136 filterStorage.addFilter(filter5); | 171 checkKnownFilters("enable @@filter2 while not in list", {}); |
| 137 checkKnownFilters(test, "add #@#filter5", {blacklist: [filter1.text], whitelis
t: [filter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text]})
; | 172 |
| 138 filterStorage.addFilter(filter6); | 173 filter3.disabled = true; |
| 139 checkKnownFilters(test, "add example.com##:-abp-properties(filter6)", {blackli
st: [filter1.text], whitelist: [filter2.text], elemhide: [filter3.text], elemhid
eexception: [filter5.text], elemhideemulation: [filter6.text]}); | 174 checkKnownFilters("disable ##filter3 while not in list", {}); |
| 140 filterStorage.addFilter(filter7); | 175 filter3.disabled = false; |
| 141 checkKnownFilters(test, "add example.com#@#[-abp-properties='filter7']", {blac
klist: [filter1.text], whitelist: [filter2.text], elemhide: [filter3.text], elem
hideexception: [filter5.text, filter7.text], elemhideemulation: [filter6.text]})
; | 176 checkKnownFilters("enable ##filter3 while not in list", {}); |
| 142 | 177 |
| 143 filterStorage.removeFilter(filter1); | 178 filter4.disabled = true; |
| 144 checkKnownFilters(test, "remove filter1", {whitelist: [filter2.text], elemhide
: [filter3.text], elemhideexception: [filter5.text, filter7.text], elemhideemula
tion: [filter6.text]}); | 179 checkKnownFilters("disable #@#filter4 while not in list", {}); |
| 145 filter2.disabled = true; | 180 filter4.disabled = false; |
| 146 checkKnownFilters(test, "disable filter2", {elemhide: [filter3.text], elemhide
exception: [filter5.text, filter7.text], elemhideemulation: [filter6.text]}); | 181 checkKnownFilters("enable #@#filter4 while not in list", {}); |
| 147 filterStorage.removeFilter(filter2); | 182 |
| 148 checkKnownFilters(test, "remove filter2", {elemhide: [filter3.text], elemhidee
xception: [filter5.text, filter7.text], elemhideemulation: [filter6.text]}); | 183 filter5.disabled = true; |
| 149 filterStorage.removeFilter(filter4); | 184 checkKnownFilters("disable example.com#?#:-abp-properties(filter5) while not
in list", {}); |
| 150 checkKnownFilters(test, "remove filter4", {elemhide: [filter3.text], elemhidee
xception: [filter5.text, filter7.text], elemhideemulation: [filter6.text]}); | 185 filter5.disabled = false; |
| 151 | 186 checkKnownFilters("enable example.com#?#:-abp-properties(filter5) while not
in list", {}); |
| 152 test.done(); | 187 |
| 153 }; | 188 filter6.disabled = true; |
| 154 | 189 checkKnownFilters("disable example.com#@#[-abp-properties='filter6'] while n
ot in list", {}); |
| 155 exports.testDisablingEnablingFiltersNotInTheList = function(test) | 190 filter6.disabled = false; |
| 156 { | 191 checkKnownFilters("enable example.com#@#[-abp-properties='filter6'] while no
t in list", {}); |
| 157 let filter1 = Filter.fromText("filter1"); | 192 }); |
| 158 let filter2 = Filter.fromText("@@filter2"); | 193 |
| 159 let filter3 = Filter.fromText("##filter3"); | 194 it("Filter subscription Operations", () => |
| 160 let filter4 = Filter.fromText("#@#filter4"); | 195 { |
| 161 let filter5 = Filter.fromText("example.com#?#:-abp-properties(filter5)"); | 196 let filter1 = Filter.fromText("filter1"); |
| 162 let filter6 = Filter.fromText("example.com#@#[-abp-properties='filter6']"); | 197 let filter2 = Filter.fromText("@@filter2"); |
| 163 | 198 filter2.disabled = true; |
| 164 filter1.disabled = true; | 199 let filter3 = Filter.fromText("##filter3"); |
| 165 checkKnownFilters(test, "disable filter1 while not in list", {}); | 200 let filter4 = Filter.fromText("!filter4"); |
| 166 filter1.disabled = false; | 201 let filter5 = Filter.fromText("#@#filter5"); |
| 167 checkKnownFilters(test, "enable filter1 while not in list", {}); | 202 let filter6 = Filter.fromText("example.com#?#:-abp-properties(filter6)"); |
| 168 | 203 let filter7 = Filter.fromText("example.com#@#[-abp-properties='filter7']"); |
| 169 filter2.disabled = true; | 204 |
| 170 checkKnownFilters(test, "disable @@filter2 while not in list", {}); | 205 let subscription = Subscription.fromURL("http://test1/"); |
| 171 filter2.disabled = false; | 206 subscription.addFilter(filter1); |
| 172 checkKnownFilters(test, "enable @@filter2 while not in list", {}); | 207 subscription.addFilter(filter2); |
| 173 | 208 subscription.addFilter(filter3); |
| 174 filter3.disabled = true; | 209 subscription.addFilter(filter4); |
| 175 checkKnownFilters(test, "disable ##filter3 while not in list", {}); | 210 subscription.addFilter(filter5); |
| 176 filter3.disabled = false; | 211 subscription.addFilter(filter6); |
| 177 checkKnownFilters(test, "enable ##filter3 while not in list", {}); | 212 subscription.addFilter(filter7); |
| 178 | 213 |
| 179 filter4.disabled = true; | 214 filterStorage.addSubscription(subscription); |
| 180 checkKnownFilters(test, "disable #@#filter4 while not in list", {}); | 215 checkKnownFilters("add subscription with filter1, @@filter2, ##filter3, !fil
ter4, #@#filter5, example.com#?#:-abp-properties(filter6), example.com#@#[-abp-p
roperties='filter7']", {blacklist: [filter1.text], elemhide: [filter3.text], ele
mhideexception: [filter5.text, filter7.text], elemhideemulation: [filter6.text]}
); |
| 181 filter4.disabled = false; | 216 |
| 182 checkKnownFilters(test, "enable #@#filter4 while not in list", {}); | 217 filter2.disabled = false; |
| 183 | 218 checkKnownFilters("enable @@filter2", {blacklist: [filter1.text], whitelist:
[filter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text, fil
ter7.text], elemhideemulation: [filter6.text]}); |
| 184 filter5.disabled = true; | 219 |
| 185 checkKnownFilters(test, "disable example.com#?#:-abp-properties(filter5) while
not in list", {}); | 220 filterStorage.addFilter(filter1); |
| 186 filter5.disabled = false; | 221 checkKnownFilters("add filter1", {blacklist: [filter1.text], whitelist: [fil
ter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text, filter7.
text], elemhideemulation: [filter6.text]}); |
| 187 checkKnownFilters(test, "enable example.com#?#:-abp-properties(filter5) while
not in list", {}); | 222 |
| 188 | 223 filterStorage.updateSubscriptionFilters(subscription, [filter4.text]); |
| 189 filter6.disabled = true; | 224 checkKnownFilters("change subscription filters to filter4", {blacklist: [fil
ter1.text]}); |
| 190 checkKnownFilters(test, "disable example.com#@#[-abp-properties='filter6'] whi
le not in list", {}); | 225 |
| 191 filter6.disabled = false; | 226 filterStorage.removeFilter(filter1); |
| 192 checkKnownFilters(test, "enable example.com#@#[-abp-properties='filter6'] whil
e not in list", {}); | 227 checkKnownFilters("remove filter1", {}); |
| 193 | 228 |
| 194 test.done(); | 229 filterStorage.updateSubscriptionFilters(subscription, [filter1.text, filter2
.text]); |
| 195 }; | 230 checkKnownFilters("change subscription filters to filter1, filter2", {blackl
ist: [filter1.text], whitelist: [filter2.text]}); |
| 196 | 231 |
| 197 exports.testFilterSubscriptionOperations = function(test) | 232 filter1.disabled = true; |
| 198 { | 233 checkKnownFilters("disable filter1", {whitelist: [filter2.text]}); |
| 199 let filter1 = Filter.fromText("filter1"); | 234 filter2.disabled = true; |
| 200 let filter2 = Filter.fromText("@@filter2"); | 235 checkKnownFilters("disable filter2", {}); |
| 201 filter2.disabled = true; | 236 filter1.disabled = false; |
| 202 let filter3 = Filter.fromText("##filter3"); | 237 filter2.disabled = false; |
| 203 let filter4 = Filter.fromText("!filter4"); | 238 checkKnownFilters("enable filter1, filter2", {blacklist: [filter1.text], whi
telist: [filter2.text]}); |
| 204 let filter5 = Filter.fromText("#@#filter5"); | 239 |
| 205 let filter6 = Filter.fromText("example.com#?#:-abp-properties(filter6)"); | 240 filterStorage.addFilter(filter1); |
| 206 let filter7 = Filter.fromText("example.com#@#[-abp-properties='filter7']"); | 241 checkKnownFilters("add filter1", {blacklist: [filter1.text], whitelist: [fil
ter2.text]}); |
| 207 | 242 |
| 208 let subscription = Subscription.fromURL("http://test1/"); | 243 subscription.disabled = true; |
| 209 subscription.addFilter(filter1); | 244 checkKnownFilters("disable subscription", {blacklist: [filter1.text]}); |
| 210 subscription.addFilter(filter2); | 245 |
| 211 subscription.addFilter(filter3); | 246 filterStorage.removeSubscription(subscription); |
| 212 subscription.addFilter(filter4); | 247 checkKnownFilters("remove subscription", {blacklist: [filter1.text]}); |
| 213 subscription.addFilter(filter5); | 248 |
| 214 subscription.addFilter(filter6); | 249 filterStorage.addSubscription(subscription); |
| 215 subscription.addFilter(filter7); | 250 checkKnownFilters("add subscription", {blacklist: [filter1.text]}); |
| 216 | 251 |
| 217 filterStorage.addSubscription(subscription); | 252 subscription.disabled = false; |
| 218 checkKnownFilters(test, "add subscription with filter1, @@filter2, ##filter3,
!filter4, #@#filter5, example.com#?#:-abp-properties(filter6), example.com#@#[-a
bp-properties='filter7']", {blacklist: [filter1.text], elemhide: [filter3.text],
elemhideexception: [filter5.text, filter7.text], elemhideemulation: [filter6.te
xt]}); | 253 checkKnownFilters("enable subscription", {blacklist: [filter1.text], whiteli
st: [filter2.text]}); |
| 219 | 254 |
| 220 filter2.disabled = false; | 255 subscription.disabled = true; |
| 221 checkKnownFilters(test, "enable @@filter2", {blacklist: [filter1.text], whitel
ist: [filter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text,
filter7.text], elemhideemulation: [filter6.text]}); | 256 checkKnownFilters("disable subscription", {blacklist: [filter1.text]}); |
| 222 | 257 |
| 223 filterStorage.addFilter(filter1); | 258 filterStorage.addFilter(filter2); |
| 224 checkKnownFilters(test, "add filter1", {blacklist: [filter1.text], whitelist:
[filter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text, filt
er7.text], elemhideemulation: [filter6.text]}); | 259 checkKnownFilters("add filter2", {blacklist: [filter1.text], whitelist: [fil
ter2.text]}); |
| 225 | 260 |
| 226 filterStorage.updateSubscriptionFilters(subscription, [filter4.text]); | 261 filterStorage.removeFilter(filter2); |
| 227 checkKnownFilters(test, "change subscription filters to filter4", {blacklist:
[filter1.text]}); | 262 checkKnownFilters("remove filter2", {blacklist: [filter1.text]}); |
| 228 | 263 |
| 229 filterStorage.removeFilter(filter1); | 264 subscription.disabled = false; |
| 230 checkKnownFilters(test, "remove filter1", {}); | 265 checkKnownFilters("enable subscription", {blacklist: [filter1.text], whiteli
st: [filter2.text]}); |
| 231 | 266 |
| 232 filterStorage.updateSubscriptionFilters(subscription, [filter1.text, filter2.t
ext]); | 267 filterStorage.removeSubscription(subscription); |
| 233 checkKnownFilters(test, "change subscription filters to filter1, filter2", {bl
acklist: [filter1.text], whitelist: [filter2.text]}); | 268 checkKnownFilters("remove subscription", {blacklist: [filter1.text]}); |
| 234 | 269 }); |
| 235 filter1.disabled = true; | 270 |
| 236 checkKnownFilters(test, "disable filter1", {whitelist: [filter2.text]}); | 271 it("Filter Group operations", () => |
| 237 filter2.disabled = true; | 272 { |
| 238 checkKnownFilters(test, "disable filter2", {}); | 273 let filter1 = Filter.fromText("filter1"); |
| 239 filter1.disabled = false; | 274 let filter2 = Filter.fromText("@@filter2"); |
| 240 filter2.disabled = false; | 275 let filter3 = Filter.fromText("filter3"); |
| 241 checkKnownFilters(test, "enable filter1, filter2", {blacklist: [filter1.text],
whitelist: [filter2.text]}); | 276 let filter4 = Filter.fromText("@@filter4"); |
| 242 | 277 let filter5 = Filter.fromText("!filter5"); |
| 243 filterStorage.addFilter(filter1); | 278 |
| 244 checkKnownFilters(test, "add filter1", {blacklist: [filter1.text], whitelist:
[filter2.text]}); | 279 let subscription = Subscription.fromURL("http://test1/"); |
| 245 | 280 subscription.addFilter(filter1); |
| 246 subscription.disabled = true; | 281 subscription.addFilter(filter2); |
| 247 checkKnownFilters(test, "disable subscription", {blacklist: [filter1.text]}); | 282 |
| 248 | 283 filterStorage.addSubscription(subscription); |
| 249 filterStorage.removeSubscription(subscription); | 284 filterStorage.addFilter(filter1); |
| 250 checkKnownFilters(test, "remove subscription", {blacklist: [filter1.text]}); | 285 checkKnownFilters("initial setup", {blacklist: [filter1.text], whitelist: [f
ilter2.text]}); |
| 251 | 286 |
| 252 filterStorage.addSubscription(subscription); | 287 let subscription2 = Subscription.fromURL("~fl~"); |
| 253 checkKnownFilters(test, "add subscription", {blacklist: [filter1.text]}); | 288 subscription2.disabled = true; |
| 254 | 289 checkKnownFilters("disable blocking filters", {blacklist: [filter1.text], wh
itelist: [filter2.text]}); |
| 255 subscription.disabled = false; | 290 |
| 256 checkKnownFilters(test, "enable subscription", {blacklist: [filter1.text], whi
telist: [filter2.text]}); | 291 filterStorage.removeSubscription(subscription); |
| 257 | 292 checkKnownFilters("remove subscription", {}); |
| 258 subscription.disabled = true; | 293 |
| 259 checkKnownFilters(test, "disable subscription", {blacklist: [filter1.text]}); | 294 subscription2.disabled = false; |
| 260 | 295 checkKnownFilters("enable blocking filters", {blacklist: [filter1.text]}); |
| 261 filterStorage.addFilter(filter2); | 296 |
| 262 checkKnownFilters(test, "add filter2", {blacklist: [filter1.text], whitelist:
[filter2.text]}); | 297 let subscription3 = Subscription.fromURL("~wl~"); |
| 263 | 298 subscription3.disabled = true; |
| 264 filterStorage.removeFilter(filter2); | 299 checkKnownFilters("disable exception rules", {blacklist: [filter1.text]}); |
| 265 checkKnownFilters(test, "remove filter2", {blacklist: [filter1.text]}); | 300 |
| 266 | 301 filterStorage.addFilter(filter2); |
| 267 subscription.disabled = false; | 302 checkKnownFilters("add @@filter2", {blacklist: [filter1.text], whitelist: [f
ilter2.text]}); |
| 268 checkKnownFilters(test, "enable subscription", {blacklist: [filter1.text], whi
telist: [filter2.text]}); | 303 assert.equal([...filterStorage.subscriptions(filter2.text)].length, 1, "@@fi
lter2.subscriptionCount"); |
| 269 | 304 assert.ok([...filterStorage.subscriptions(filter2.text)][0] instanceof Speci
alSubscription, "@@filter2 added to a new filter group"); |
| 270 filterStorage.removeSubscription(subscription); | 305 assert.ok([...filterStorage.subscriptions(filter2.text)][0] != subscription3
, "@@filter2 filter group is not the disabled exceptions group"); |
| 271 checkKnownFilters(test, "remove subscription", {blacklist: [filter1.text]}); | 306 |
| 272 | 307 subscription3.disabled = false; |
| 273 test.done(); | 308 checkKnownFilters("enable exception rules", {blacklist: [filter1.text], whit
elist: [filter2.text]}); |
| 274 }; | 309 |
| 275 | 310 filterStorage.removeFilter(filter2); |
| 276 exports.testFilterGroupOperations = function(test) | 311 filterStorage.addFilter(filter2); |
| 277 { | 312 checkKnownFilters("re-add @@filter2", {blacklist: [filter1.text], whitelist:
[filter2.text]}); |
| 278 let filter1 = Filter.fromText("filter1"); | 313 assert.equal([...filterStorage.subscriptions(filter2.text)].length, 1, "@@fi
lter2.subscriptionCount"); |
| 279 let filter2 = Filter.fromText("@@filter2"); | 314 assert.ok([...filterStorage.subscriptions(filter2.text)][0] == subscription3
, "@@filter2 added to the default exceptions group"); |
| 280 let filter3 = Filter.fromText("filter3"); | 315 |
| 281 let filter4 = Filter.fromText("@@filter4"); | 316 let subscription4 = Subscription.fromURL("http://test/"); |
| 282 let filter5 = Filter.fromText("!filter5"); | 317 filterStorage.updateSubscriptionFilters(subscription4, [filter3.text, filter
4.text, filter5.text]); |
| 283 | 318 checkKnownFilters("update subscription not in the list yet", {blacklist: [fi
lter1.text], whitelist: [filter2.text]}); |
| 284 let subscription = Subscription.fromURL("http://test1/"); | 319 |
| 285 subscription.addFilter(filter1); | 320 filterStorage.addSubscription(subscription4); |
| 286 subscription.addFilter(filter2); | 321 checkKnownFilters("add subscription to the list", {blacklist: [filter1.text,
filter3.text], whitelist: [filter2.text, filter4.text]}); |
| 287 | 322 |
| 288 filterStorage.addSubscription(subscription); | 323 filterStorage.updateSubscriptionFilters(subscription4, [filter3.text, filter
2.text, filter5.text]); |
| 289 filterStorage.addFilter(filter1); | 324 checkKnownFilters("update subscription while in the list", {blacklist: [filt
er1.text, filter3.text], whitelist: [filter2.text]}); |
| 290 checkKnownFilters(test, "initial setup", {blacklist: [filter1.text], whitelist
: [filter2.text]}); | 325 |
| 291 | 326 subscription3.disabled = true; |
| 292 let subscription2 = Subscription.fromURL("~fl~"); | 327 checkKnownFilters("disable exception rules", {blacklist: [filter1.text, filt
er3.text], whitelist: [filter2.text]}); |
| 293 subscription2.disabled = true; | 328 |
| 294 checkKnownFilters(test, "disable blocking filters", {blacklist: [filter1.text]
, whitelist: [filter2.text]}); | 329 filterStorage.removeSubscription(subscription4); |
| 295 | 330 checkKnownFilters("remove subscription from the list", {blacklist: [filter1.
text]}); |
| 296 filterStorage.removeSubscription(subscription); | 331 |
| 297 checkKnownFilters(test, "remove subscription", {}); | 332 subscription3.disabled = false; |
| 298 | 333 checkKnownFilters("enable exception rules", {blacklist: [filter1.text], whit
elist: [filter2.text]}); |
| 299 subscription2.disabled = false; | 334 }); |
| 300 checkKnownFilters(test, "enable blocking filters", {blacklist: [filter1.text]}
); | 335 |
| 301 | 336 it("Snippet Filters", () => |
| 302 let subscription3 = Subscription.fromURL("~wl~"); | 337 { |
| 303 subscription3.disabled = true; | 338 let filter1 = Filter.fromText("example.com#$#filter1"); |
| 304 checkKnownFilters(test, "disable exception rules", {blacklist: [filter1.text]}
); | 339 let filter2 = Filter.fromText("example.com#$#filter2"); |
| 305 | 340 let filter3 = Filter.fromText("example.com#$#filter3"); |
| 306 filterStorage.addFilter(filter2); | 341 |
| 307 checkKnownFilters(test, "add @@filter2", {blacklist: [filter1.text], whitelist
: [filter2.text]}); | 342 let subscription1 = Subscription.fromURL("http://test1/"); |
| 308 test.equal([...filterStorage.subscriptions(filter2.text)].length, 1, "@@filter
2 subscription count"); | 343 subscription1.addFilter(filter1); |
| 309 test.ok([...filterStorage.subscriptions(filter2.text)][0] instanceof SpecialSu
bscription, "@@filter2 added to a new filter group"); | 344 subscription1.addFilter(filter2); |
| 310 test.ok([...filterStorage.subscriptions(filter2.text)][0] != subscription3, "@
@filter2 filter group is not the disabled exceptions group"); | 345 |
| 311 | 346 filterStorage.addSubscription(subscription1); |
| 312 subscription3.disabled = false; | 347 checkKnownFilters("add subscription with filter1 and filter2", {}); |
| 313 checkKnownFilters(test, "enable exception rules", {blacklist: [filter1.text],
whitelist: [filter2.text]}); | 348 |
| 314 | 349 let subscription2 = Subscription.fromURL("http://test2/"); |
| 315 filterStorage.removeFilter(filter2); | 350 subscription2.type = "circumvention"; |
| 316 filterStorage.addFilter(filter2); | 351 subscription2.addFilter(filter1); |
| 317 checkKnownFilters(test, "re-add @@filter2", {blacklist: [filter1.text], whitel
ist: [filter2.text]}); | 352 |
| 318 test.equal([...filterStorage.subscriptions(filter2.text)].length, 1, "@@filter
2 subscription count"); | 353 filterStorage.addSubscription(subscription2); |
| 319 test.ok([...filterStorage.subscriptions(filter2.text)][0] == subscription3, "@
@filter2 added to the default exceptions group"); | 354 checkKnownFilters("add subscription of type circumvention with filter1", {sn
ippets: [filter1.text]}); |
| 320 | 355 |
| 321 let subscription4 = Subscription.fromURL("http://test/"); | 356 let subscription3 = Subscription.fromURL("~foo"); |
| 322 filterStorage.updateSubscriptionFilters(subscription4, [filter3.text, filter4.
text, filter5.text]); | 357 subscription3.addFilter(filter2); |
| 323 checkKnownFilters(test, "update subscription not in the list yet", {blacklist:
[filter1.text], whitelist: [filter2.text]}); | 358 |
| 324 | 359 filterStorage.addSubscription(subscription3); |
| 325 filterStorage.addSubscription(subscription4); | 360 checkKnownFilters("add special subscription with filter2", {snippets: [filte
r1.text, filter2.text]}); |
| 326 checkKnownFilters(test, "add subscription to the list", {blacklist: [filter1.t
ext, filter3.text], whitelist: [filter2.text, filter4.text]}); | 361 |
| 327 | 362 let subscription4 = Subscription.fromURL("https://easylist-downloads.adblock
plus.org/abp-filters-anti-cv.txt"); |
| 328 filterStorage.updateSubscriptionFilters(subscription4, [filter3.text, filter2.
text, filter5.text]); | 363 subscription4.addFilter(filter3); |
| 329 checkKnownFilters(test, "update subscription while in the list", {blacklist: [
filter1.text, filter3.text], whitelist: [filter2.text]}); | 364 |
| 330 | 365 filterStorage.addSubscription(subscription4); |
| 331 subscription3.disabled = true; | 366 checkKnownFilters("add ABP anti-circumvention subscription with filter3", {s
nippets: [filter1.text, filter2.text, filter3.text]}); |
| 332 checkKnownFilters(test, "disable exception rules", {blacklist: [filter1.text,
filter3.text], whitelist: [filter2.text]}); | 367 }); |
| 333 | 368 }); |
| 334 filterStorage.removeSubscription(subscription4); | |
| 335 checkKnownFilters(test, "remove subscription from the list", {blacklist: [filt
er1.text]}); | |
| 336 | |
| 337 subscription3.disabled = false; | |
| 338 checkKnownFilters(test, "enable exception rules", {blacklist: [filter1.text],
whitelist: [filter2.text]}); | |
| 339 | |
| 340 test.done(); | |
| 341 }; | |
| 342 | |
| 343 exports.testSnippetFilters = function(test) | |
| 344 { | |
| 345 let filter1 = Filter.fromText("example.com#$#filter1"); | |
| 346 let filter2 = Filter.fromText("example.com#$#filter2"); | |
| 347 let filter3 = Filter.fromText("example.com#$#filter3"); | |
| 348 | |
| 349 let subscription1 = Subscription.fromURL("http://test1/"); | |
| 350 subscription1.addFilter(filter1); | |
| 351 subscription1.addFilter(filter2); | |
| 352 | |
| 353 filterStorage.addSubscription(subscription1); | |
| 354 checkKnownFilters(test, "add subscription with filter1 and filter2", {}); | |
| 355 | |
| 356 let subscription2 = Subscription.fromURL("http://test2/"); | |
| 357 subscription2.type = "circumvention"; | |
| 358 subscription2.addFilter(filter1); | |
| 359 | |
| 360 filterStorage.addSubscription(subscription2); | |
| 361 checkKnownFilters(test, "add subscription of type circumvention with filter1",
{snippets: [filter1.text]}); | |
| 362 | |
| 363 let subscription3 = Subscription.fromURL("~foo"); | |
| 364 subscription3.addFilter(filter2); | |
| 365 | |
| 366 filterStorage.addSubscription(subscription3); | |
| 367 checkKnownFilters(test, "add special subscription with filter2", {snippets: [f
ilter1.text, filter2.text]}); | |
| 368 | |
| 369 let subscription4 = Subscription.fromURL("https://easylist-downloads.adblockpl
us.org/abp-filters-anti-cv.txt"); | |
| 370 subscription4.addFilter(filter3); | |
| 371 | |
| 372 filterStorage.addSubscription(subscription4); | |
| 373 checkKnownFilters(test, "add ABP anti-circumvention subscription with filter3"
, {snippets: [filter1.text, filter2.text, filter3.text]}); | |
| 374 | |
| 375 test.done(); | |
| 376 }; | |
| OLD | NEW |