Left: | ||
Right: |
OLD | NEW |
---|---|
(Empty) | |
1 /* | |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | |
3 * Copyright (C) 2006-2016 Eyeo GmbH | |
4 * | |
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 | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * Adblock Plus is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 * GNU General Public License for more details. | |
13 * | |
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/>. | |
16 */ | |
17 | |
18 "use strict"; | |
19 | |
20 let {createSandbox} = require("common"); | |
21 let sandboxedRequire = null; | |
22 | |
23 let FilterStorage = null; | |
24 let Subscription = null; | |
25 let Filter = null; | |
26 let defaultMatcher = null; | |
27 let SpecialSubscription = null; | |
28 | |
29 exports.setUp = function(callback) | |
30 { | |
31 sandboxedRequire = createSandbox(["filterByKey", "exceptions", "filters"]); | |
32 | |
33 // We need to require the filterListener module so that filter changes will be | |
34 // noticed, even though we don't directly use the module here. | |
35 sandboxedRequire("filterListener"); | |
36 | |
37 FilterStorage = sandboxedRequire("filterStorage").FilterStorage; | |
38 ({Subscription, SpecialSubscription} = sandboxedRequire("subscriptionClasses") ); | |
39 Filter = sandboxedRequire("filterClasses").Filter; | |
40 defaultMatcher = sandboxedRequire("matcher").defaultMatcher; | |
Wladimir Palant
2016/09/30 09:37:54
As in the other test, it's probably cleaner to hav
kzar
2016/10/03 13:46:15
Done.
| |
41 | |
42 FilterStorage.addSubscription(Subscription.fromURL("~fl~")); | |
43 FilterStorage.addSubscription(Subscription.fromURL("~wl~")); | |
44 FilterStorage.addSubscription(Subscription.fromURL("~eh~")); | |
45 | |
46 Subscription.fromURL("~fl~").defaults = ["blocking"]; | |
47 Subscription.fromURL("~wl~").defaults = ["whitelist"]; | |
48 Subscription.fromURL("~eh~").defaults = ["elemhide"]; | |
49 | |
50 callback(); | |
51 }; | |
52 | |
53 function checkKnownFilters(test, text, expected) | |
54 { | |
55 let result = {}; | |
56 for (let type of ["blacklist", "whitelist"]) | |
57 { | |
58 let matcher = defaultMatcher[type]; | |
59 let filters = []; | |
60 for (let keyword in matcher.filterByKeyword) | |
61 { | |
62 let list = matcher.filterByKeyword[keyword]; | |
63 for (let i = 0; i < list.length; i++) | |
64 { | |
65 let filter = list[i]; | |
66 test.equal(matcher.getKeywordForFilter(filter), keyword, | |
67 "Keyword of filter " + filter.text); | |
68 filters.push(filter.text); | |
69 } | |
70 } | |
71 result[type] = filters; | |
72 } | |
73 | |
74 let elemHide = sandboxedRequire("elemHide"); | |
75 result.elemhide = []; | |
76 for (let key in elemHide.filterByKey) | |
77 result.elemhide.push(elemHide.filterByKey[key].text); | |
78 | |
79 result.elemhideexception = []; | |
80 for (let selector in elemHide.exceptions) | |
81 { | |
82 let list = elemHide.exceptions[selector]; | |
83 for (let exception of list) | |
84 result.elemhideexception.push(exception.text); | |
85 } | |
86 | |
87 let cssRules = sandboxedRequire("cssRules"); | |
88 result.cssrule = []; | |
89 for (let filterText in cssRules.filters) | |
90 result.cssrule.push(filterText); | |
91 | |
92 let types = ["blacklist", "whitelist", "elemhide", "elemhideexception", | |
93 "cssrule"]; | |
94 for (let type of types) | |
95 { | |
96 if (!(type in expected)) | |
97 expected[type] = []; | |
98 else | |
99 expected[type] = expected[type].sort(); | |
100 result[type] = result[type].sort(); | |
Wladimir Palant
2016/09/30 09:37:54
sort() modifies an array in place, the assignments
kzar
2016/10/03 13:46:15
Done.
| |
101 } | |
102 | |
103 test.deepEqual(result, expected, text); | |
104 } | |
105 | |
106 exports.testAddingAndRemovingFilters = function(test) | |
107 { | |
108 let filter1 = Filter.fromText("filter1"); | |
109 let filter2 = Filter.fromText("@@filter2"); | |
110 let filter3 = Filter.fromText("#filter3"); | |
111 let filter4 = Filter.fromText("!filter4"); | |
112 let filter5 = Filter.fromText("#@#filter5"); | |
113 let filter6 = Filter.fromText("example.com##[-abp-properties='filter6']"); | |
114 let filter7 = Filter.fromText("example.com#@#[-abp-properties='filter7']"); | |
115 | |
116 FilterStorage.addFilter(filter1); | |
117 checkKnownFilters(test, "add filter1", {blacklist: [filter1.text]}); | |
118 FilterStorage.addFilter(filter2); | |
119 checkKnownFilters(test, "add @@filter2", {blacklist: [filter1.text], whitelist : [filter2.text]}); | |
120 FilterStorage.addFilter(filter3); | |
121 checkKnownFilters(test, "add #filter3", {blacklist: [filter1.text], whitelist: [filter2.text], elemhide: [filter3.text]}); | |
122 FilterStorage.addFilter(filter4); | |
123 checkKnownFilters(test, "add !filter4", {blacklist: [filter1.text], whitelist: [filter2.text], elemhide: [filter3.text]}); | |
124 FilterStorage.addFilter(filter5); | |
125 checkKnownFilters(test, "add #@#filter5", {blacklist: [filter1.text], whitelis t: [filter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text]}) ; | |
126 FilterStorage.addFilter(filter6); | |
127 checkKnownFilters(test, "add example.com##[-abp-properties='filter6']", {black list: [filter1.text], whitelist: [filter2.text], elemhide: [filter3.text], elemh ideexception: [filter5.text], cssrule: [filter6.text]}); | |
128 FilterStorage.addFilter(filter7); | |
129 checkKnownFilters(test, "add example.com#@#[-abp-properties='filter7']", {blac klist: [filter1.text], whitelist: [filter2.text], elemhide: [filter3.text], elem hideexception: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
130 | |
131 FilterStorage.removeFilter(filter1); | |
132 checkKnownFilters(test, "remove filter1", {whitelist: [filter2.text], elemhide : [filter3.text], elemhideexception: [filter5.text, filter7.text], cssrule: [fil ter6.text]}); | |
133 filter2.disabled = true; | |
134 checkKnownFilters(test, "disable filter2", {elemhide: [filter3.text], elemhide exception: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
135 FilterStorage.removeFilter(filter2); | |
136 checkKnownFilters(test, "remove filter2", {elemhide: [filter3.text], elemhidee xception: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
137 FilterStorage.removeFilter(filter4); | |
138 checkKnownFilters(test, "remove filter4", {elemhide: [filter3.text], elemhidee xception: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
139 | |
140 test.done(); | |
141 }; | |
142 | |
143 exports.testDisablingEnablingFiltersNotInTheList = function(test) | |
144 { | |
145 let filter1 = Filter.fromText("filter1"); | |
146 let filter2 = Filter.fromText("@@filter2"); | |
147 let filter3 = Filter.fromText("#filter3"); | |
148 let filter4 = Filter.fromText("#@#filter4"); | |
149 let filter5 = Filter.fromText("example.com##[-abp-properties='filter5']"); | |
150 let filter6 = Filter.fromText("example.com#@#[-abp-properties='filter6']"); | |
151 | |
152 filter1.disabled = true; | |
153 checkKnownFilters(test, "disable filter1 while not in list", {}); | |
154 filter1.disabled = false; | |
155 checkKnownFilters(test, "enable filter1 while not in list", {}); | |
156 | |
157 filter2.disabled = true; | |
158 checkKnownFilters(test, "disable @@filter2 while not in list", {}); | |
159 filter2.disabled = false; | |
160 checkKnownFilters(test, "enable @@filter2 while not in list", {}); | |
161 | |
162 filter3.disabled = true; | |
163 checkKnownFilters(test, "disable #filter3 while not in list", {}); | |
164 filter3.disabled = false; | |
165 checkKnownFilters(test, "enable #filter3 while not in list", {}); | |
166 | |
167 filter4.disabled = true; | |
168 checkKnownFilters(test, "disable #@#filter4 while not in list", {}); | |
169 filter4.disabled = false; | |
170 checkKnownFilters(test, "enable #@#filter4 while not in list", {}); | |
171 | |
172 filter5.disabled = true; | |
173 checkKnownFilters(test, "disable example.com##[-abp-properties='filter5'] whil e not in list", {}); | |
174 filter5.disabled = false; | |
175 checkKnownFilters(test, "enable example.com##[-abp-properties='filter5'] while not in list", {}); | |
176 | |
177 filter6.disabled = true; | |
178 checkKnownFilters(test, "disable example.com#@#[-abp-properties='filter6'] whi le not in list", {}); | |
179 filter6.disabled = false; | |
180 checkKnownFilters(test, "enable example.com#@#[-abp-properties='filter6'] whil e not in list", {}); | |
181 | |
182 test.done(); | |
183 }; | |
184 | |
185 exports.testFilterSubscriptionOperations = function(test) | |
186 { | |
187 let filter1 = Filter.fromText("filter1"); | |
188 let filter2 = Filter.fromText("@@filter2"); | |
189 filter2.disabled = true; | |
190 let filter3 = Filter.fromText("#filter3"); | |
191 let filter4 = Filter.fromText("!filter4"); | |
192 let filter5 = Filter.fromText("#@#filter5"); | |
193 let filter6 = Filter.fromText("example.com##[-abp-properties='filter6']"); | |
194 let filter7 = Filter.fromText("example.com#@#[-abp-properties='filter7']"); | |
195 | |
196 let subscription = Subscription.fromURL("http://test1/"); | |
197 subscription.filters = [filter1, filter2, filter3, filter4, filter5, filter6, filter7]; | |
198 | |
199 FilterStorage.addSubscription(subscription); | |
200 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], cssrule: [filter6.text]}); | |
201 | |
202 filter2.disabled = false; | |
203 checkKnownFilters(test, "enable @@filter2", {blacklist: [filter1.text], whitel ist: [filter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
204 | |
205 FilterStorage.addFilter(filter1); | |
206 checkKnownFilters(test, "add filter1", {blacklist: [filter1.text], whitelist: [filter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text, filt er7.text], cssrule: [filter6.text]}); | |
207 | |
208 FilterStorage.updateSubscriptionFilters(subscription, [filter4]); | |
209 checkKnownFilters(test, "change subscription filters to filter4", {blacklist: [filter1.text]}); | |
210 | |
211 FilterStorage.removeFilter(filter1); | |
212 checkKnownFilters(test, "remove filter1", {}); | |
213 | |
214 FilterStorage.updateSubscriptionFilters(subscription, [filter1, filter2]); | |
215 checkKnownFilters(test, "change subscription filters to filter1, filter2", {bl acklist: [filter1.text], whitelist: [filter2.text]}); | |
216 | |
217 filter1.disabled = true; | |
218 checkKnownFilters(test, "disable filter1", {whitelist: [filter2.text]}); | |
219 filter2.disabled = true; | |
220 checkKnownFilters(test, "disable filter2", {}); | |
221 filter1.disabled = false; | |
222 filter2.disabled = false; | |
223 checkKnownFilters(test, "enable filter1, filter2", {blacklist: [filter1.text], whitelist: [filter2.text]}); | |
224 | |
225 FilterStorage.addFilter(filter1); | |
226 checkKnownFilters(test, "add filter1", {blacklist: [filter1.text], whitelist: [filter2.text]}); | |
227 | |
228 subscription.disabled = true; | |
229 checkKnownFilters(test, "disable subscription", {blacklist: [filter1.text]}); | |
230 | |
231 FilterStorage.removeSubscription(subscription); | |
232 checkKnownFilters(test, "remove subscription", {blacklist: [filter1.text]}); | |
233 | |
234 FilterStorage.addSubscription(subscription); | |
235 checkKnownFilters(test, "add subscription", {blacklist: [filter1.text]}); | |
236 | |
237 subscription.disabled = false; | |
238 checkKnownFilters(test, "enable subscription", {blacklist: [filter1.text], whi telist: [filter2.text]}); | |
239 | |
240 subscription.disabled = true; | |
241 checkKnownFilters(test, "disable subscription", {blacklist: [filter1.text]}); | |
242 | |
243 FilterStorage.addFilter(filter2); | |
244 checkKnownFilters(test, "add filter2", {blacklist: [filter1.text], whitelist: [filter2.text]}); | |
245 | |
246 FilterStorage.removeFilter(filter2); | |
247 checkKnownFilters(test, "remove filter2", {blacklist: [filter1.text]}); | |
248 | |
249 subscription.disabled = false; | |
250 checkKnownFilters(test, "enable subscription", {blacklist: [filter1.text], whi telist: [filter2.text]}); | |
251 | |
252 FilterStorage.removeSubscription(subscription); | |
253 checkKnownFilters(test, "remove subscription", {blacklist: [filter1.text]}); | |
254 | |
255 test.done(); | |
256 }; | |
257 | |
258 exports.testFilterGroupOperations = function(test) | |
259 { | |
260 let filter1 = Filter.fromText("filter1"); | |
261 let filter2 = Filter.fromText("@@filter2"); | |
262 let filter3 = Filter.fromText("filter3"); | |
263 let filter4 = Filter.fromText("@@filter4"); | |
264 let filter5 = Filter.fromText("!filter5"); | |
265 | |
266 let subscription = Subscription.fromURL("http://test1/"); | |
267 subscription.filters = [filter1, filter2]; | |
268 | |
269 FilterStorage.addSubscription(subscription); | |
270 FilterStorage.addFilter(filter1); | |
271 checkKnownFilters(test, "initial setup", {blacklist: [filter1.text], whitelist : [filter2.text]}); | |
272 | |
273 let subscription2 = Subscription.fromURL("~fl~"); | |
274 subscription2.disabled = true; | |
275 checkKnownFilters(test, "disable blocking filters", {blacklist: [filter1.text] , whitelist: [filter2.text]}); | |
276 | |
277 FilterStorage.removeSubscription(subscription); | |
278 checkKnownFilters(test, "remove subscription", {}); | |
279 | |
280 subscription2.disabled = false; | |
281 checkKnownFilters(test, "enable blocking filters", {blacklist: [filter1.text]} ); | |
282 | |
283 let subscription3 = Subscription.fromURL("~wl~"); | |
284 subscription3.disabled = true; | |
285 checkKnownFilters(test, "disable exception rules", {blacklist: [filter1.text]} ); | |
286 | |
287 FilterStorage.addFilter(filter2); | |
288 checkKnownFilters(test, "add @@filter2", {blacklist: [filter1.text], whitelist : [filter2.text]}); | |
289 test.equal(filter2.subscriptions.length, 1, "@@filter2.subscription.length"); | |
290 test.ok(filter2.subscriptions[0] instanceof SpecialSubscription, "@@filter2 ad ded to a new filter group"); | |
291 test.ok(filter2.subscriptions[0] != subscription3, "@@filter2 filter group is not the disabled exceptions group"); | |
292 | |
293 subscription3.disabled = false; | |
294 checkKnownFilters(test, "enable exception rules", {blacklist: [filter1.text], whitelist: [filter2.text]}); | |
295 | |
296 FilterStorage.removeFilter(filter2); | |
297 FilterStorage.addFilter(filter2); | |
298 checkKnownFilters(test, "re-add @@filter2", {blacklist: [filter1.text], whitel ist: [filter2.text]}); | |
299 test.equal(filter2.subscriptions.length, 1, "@@filter2.subscription.length"); | |
300 test.ok(filter2.subscriptions[0] == subscription3, "@@filter2 added to the def ault exceptions group"); | |
301 | |
302 let subscription4 = Subscription.fromURL("http://test/"); | |
303 FilterStorage.updateSubscriptionFilters(subscription4, [filter3, filter4, filt er5]); | |
304 checkKnownFilters(test, "update subscription not in the list yet", {blacklist: [filter1.text], whitelist: [filter2.text]}); | |
305 | |
306 FilterStorage.addSubscription(subscription4); | |
307 checkKnownFilters(test, "add subscription to the list", {blacklist: [filter1.t ext, filter3.text], whitelist: [filter2.text, filter4.text]}); | |
308 | |
309 FilterStorage.updateSubscriptionFilters(subscription4, [filter3, filter2, filt er5]); | |
310 checkKnownFilters(test, "update subscription while in the list", {blacklist: [ filter1.text, filter3.text], whitelist: [filter2.text]}); | |
311 | |
312 subscription3.disabled = true; | |
313 checkKnownFilters(test, "disable exception rules", {blacklist: [filter1.text, filter3.text], whitelist: [filter2.text]}); | |
314 | |
315 FilterStorage.removeSubscription(subscription4); | |
316 checkKnownFilters(test, "remove subscription from the list", {blacklist: [filt er1.text]}); | |
317 | |
318 subscription3.disabled = false; | |
319 checkKnownFilters(test, "enable exception rules", {blacklist: [filter1.text], whitelist: [filter2.text]}); | |
320 | |
321 test.done(); | |
322 }; | |
OLD | NEW |