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 common = require("common"); | |
21 | |
22 let {CSSRules} = require("cssRules"); | |
23 let {ElemHide} = require("elemHide"); | |
24 let {FilterListener} = require("filterListener"); | |
25 let {FilterStorage} = require("filterStorage"); | |
26 let {Subscription} = require("subscriptionClasses"); | |
27 let {Filter} = require("filterClasses"); | |
28 let {defaultMatcher} = require("matcher"); | |
29 let {SpecialSubscription} = require("subscriptionClasses"); | |
30 | |
31 | |
32 exports.setUp = function(callback) | |
33 { | |
34 common.prepareFilterComponents.call(this, true); | |
35 common.preparePrefs.call(this); | |
36 | |
37 FilterStorage.addSubscription(Subscription.fromURL("~fl~")); | |
38 FilterStorage.addSubscription(Subscription.fromURL("~wl~")); | |
39 FilterStorage.addSubscription(Subscription.fromURL("~eh~")); | |
40 | |
41 Subscription.fromURL("~fl~").defaults = ["blocking"]; | |
42 Subscription.fromURL("~wl~").defaults = ["whitelist"]; | |
43 Subscription.fromURL("~eh~").defaults = ["elemhide"]; | |
44 | |
45 callback(); | |
46 }; | |
47 | |
48 exports.tearDown = function(callback) | |
49 { | |
50 common.restoreFilterComponents.call(this); | |
51 common.restorePrefs.call(this); | |
52 | |
53 callback(); | |
54 }; | |
55 | |
56 function checkKnownFilters(test, text, expected) | |
57 { | |
58 let result = {}; | |
59 for (let type of ["blacklist", "whitelist"]) | |
60 { | |
61 let matcher = defaultMatcher[type]; | |
62 let filters = []; | |
63 for (let keyword in matcher.filterByKeyword) | |
64 { | |
65 let list = matcher.filterByKeyword[keyword]; | |
66 for (let i = 0; i < list.length; i++) | |
67 { | |
68 let filter = list[i]; | |
69 test.equal(matcher.getKeywordForFilter(filter), keyword, | |
70 "Keyword of filter " + filter.text); | |
71 filters.push(filter.text); | |
72 } | |
73 } | |
74 result[type] = filters; | |
75 } | |
76 | |
77 let ElemHideFilterByKey = ElemHide._getFilterByKey(); | |
78 let ElemHideExceptions = ElemHide._getExceptions(); | |
79 result.elemhide = []; | |
80 for (let key in ElemHideFilterByKey) | |
81 result.elemhide.push(ElemHideFilterByKey[key].text); | |
82 | |
83 result.elemhideexception = []; | |
84 for (let selector in ElemHideExceptions) | |
85 { | |
86 let list = ElemHideExceptions[selector]; | |
87 for (let exception of list) | |
88 result.elemhideexception.push(exception.text); | |
89 } | |
90 | |
91 let allCSSRules = CSSRules._getAllRules(); | |
92 result.cssrule = []; | |
93 for (let filterText in allCSSRules) | |
94 result.cssrule.push(filterText); | |
95 | |
96 let types = ["blacklist", "whitelist", "elemhide", "elemhideexception", | |
97 "cssrule"]; | |
98 for (let type of types) | |
99 if (!(type in expected)) | |
100 expected[type] = []; | |
101 | |
102 test.deepEqual(result, expected, text); | |
103 } | |
104 | |
105 exports.testAddingAndRemovingFilters = function(test) | |
106 { | |
107 let filter1 = Filter.fromText("filter1"); | |
108 let filter2 = Filter.fromText("@@filter2"); | |
109 let filter3 = Filter.fromText("#filter3"); | |
110 let filter4 = Filter.fromText("!filter4"); | |
111 let filter5 = Filter.fromText("#@#filter5"); | |
112 let filter6 = Filter.fromText("example.com##[-abp-properties='filter6']"); | |
113 let filter7 = Filter.fromText("example.com#@#[-abp-properties='filter7']"); | |
114 | |
115 FilterStorage.addFilter(filter1); | |
116 checkKnownFilters(test, "add filter1", {blacklist: [filter1.text]}); | |
117 FilterStorage.addFilter(filter2); | |
118 checkKnownFilters(test, "add @@filter2", {blacklist: [filter1.text], whitelist : [filter2.text]}); | |
119 FilterStorage.addFilter(filter3); | |
120 checkKnownFilters(test, "add #filter3", {blacklist: [filter1.text], whitelist: [filter2.text], elemhide: [filter3.text]}); | |
121 FilterStorage.addFilter(filter4); | |
122 checkKnownFilters(test, "add !filter4", {blacklist: [filter1.text], whitelist: [filter2.text], elemhide: [filter3.text]}); | |
123 FilterStorage.addFilter(filter5); | |
124 checkKnownFilters(test, "add #@#filter5", {blacklist: [filter1.text], whitelis t: [filter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text]}) ; | |
125 FilterStorage.addFilter(filter6); | |
126 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]}); | |
127 FilterStorage.addFilter(filter7); | |
128 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]}); | |
129 | |
130 FilterStorage.removeFilter(filter1); | |
131 checkKnownFilters(test, "remove filter1", {whitelist: [filter2.text], elemhide : [filter3.text], elemhideexception: [filter5.text, filter7.text], cssrule: [fil ter6.text]}); | |
132 filter2.disabled = true; | |
133 checkKnownFilters(test, "disable filter2", {elemhide: [filter3.text], elemhide exception: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
134 FilterStorage.removeFilter(filter2); | |
135 checkKnownFilters(test, "remove filter2", {elemhide: [filter3.text], elemhidee xception: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
136 FilterStorage.removeFilter(filter4); | |
137 checkKnownFilters(test, "remove filter4", {elemhide: [filter3.text], elemhidee xception: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
138 | |
139 test.done(); | |
140 }; | |
141 | |
142 exports.testDisablingEnablingFiltersNotInTheList = function(test) | |
143 { | |
144 let filter1 = Filter.fromText("filter1"); | |
145 let filter2 = Filter.fromText("@@filter2"); | |
146 let filter3 = Filter.fromText("#filter3"); | |
147 let filter4 = Filter.fromText("#@#filter4"); | |
148 let filter5 = Filter.fromText("example.com##[-abp-properties='filter5']"); | |
149 let filter6 = Filter.fromText("example.com#@#[-abp-properties='filter6']"); | |
150 | |
151 filter1.disabled = true; | |
152 checkKnownFilters(test, "disable filter1 while not in list", {}); | |
153 filter1.disabled = false; | |
154 checkKnownFilters(test, "enable filter1 while not in list", {}); | |
155 | |
156 filter2.disabled = true; | |
157 checkKnownFilters(test, "disable @@filter2 while not in list", {}); | |
158 filter2.disabled = false; | |
159 checkKnownFilters(test, "enable @@filter2 while not in list", {}); | |
160 | |
161 filter3.disabled = true; | |
162 checkKnownFilters(test, "disable #filter3 while not in list", {}); | |
163 filter3.disabled = false; | |
164 checkKnownFilters(test, "enable #filter3 while not in list", {}); | |
165 | |
166 filter4.disabled = true; | |
167 checkKnownFilters(test, "disable #@#filter4 while not in list", {}); | |
168 filter4.disabled = false; | |
169 checkKnownFilters(test, "enable #@#filter4 while not in list", {}); | |
170 | |
171 filter5.disabled = true; | |
172 checkKnownFilters(test, "disable example.com##[-abp-properties='filter5'] whil e not in list", {}); | |
173 filter5.disabled = false; | |
174 checkKnownFilters(test, "enable example.com##[-abp-properties='filter5'] while not in list", {}); | |
175 | |
176 filter6.disabled = true; | |
177 checkKnownFilters(test, "disable example.com#@#[-abp-properties='filter6'] whi le not in list", {}); | |
178 filter6.disabled = false; | |
179 checkKnownFilters(test, "enable example.com#@#[-abp-properties='filter6'] whil e not in list", {}); | |
180 | |
181 test.done(); | |
182 }; | |
183 | |
184 exports.testFilterSubscriptionOperations = function(test) | |
185 { | |
186 let filter1 = Filter.fromText("filter1"); | |
187 let filter2 = Filter.fromText("@@filter2"); | |
188 filter2.disabled = true; | |
189 let filter3 = Filter.fromText("#filter3"); | |
190 let filter4 = Filter.fromText("!filter4"); | |
191 let filter5 = Filter.fromText("#@#filter5"); | |
192 let filter6 = Filter.fromText("example.com##[-abp-properties='filter6']"); | |
193 let filter7 = Filter.fromText("example.com#@#[-abp-properties='filter7']"); | |
194 | |
195 let subscription = Subscription.fromURL("http://test1/"); | |
196 subscription.filters = [filter1, filter2, filter3, filter4, filter5, filter6, filter7]; | |
197 | |
198 FilterStorage.addSubscription(subscription); | |
199 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]}); | |
kzar
2016/09/25 13:49:39
This test and the two below it fail occasionally.
kzar
2016/09/29 15:53:09
Still not got to the bottom of this.
kzar
2016/09/29 15:58:56
Ah, was simply that the order varied! Fixed.
| |
200 | |
201 filter2.disabled = false; | |
202 checkKnownFilters(test, "enable @@filter2", {blacklist: [filter1.text], whitel ist: [filter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
203 | |
204 FilterStorage.addFilter(filter1); | |
205 checkKnownFilters(test, "add filter1", {blacklist: [filter1.text], whitelist: [filter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text, filt er7.text], cssrule: [filter6.text]}); | |
206 | |
207 FilterStorage.updateSubscriptionFilters(subscription, [filter4]); | |
208 checkKnownFilters(test, "change subscription filters to filter4", {blacklist: [filter1.text]}); | |
209 | |
210 FilterStorage.removeFilter(filter1); | |
211 checkKnownFilters(test, "remove filter1", {}); | |
212 | |
213 FilterStorage.updateSubscriptionFilters(subscription, [filter1, filter2]); | |
214 checkKnownFilters(test, "change subscription filters to filter1, filter2", {bl acklist: [filter1.text], whitelist: [filter2.text]}); | |
215 | |
216 filter1.disabled = true; | |
217 checkKnownFilters(test, "disable filter1", {whitelist: [filter2.text]}); | |
218 filter2.disabled = true; | |
219 checkKnownFilters(test, "disable filter2", {}); | |
220 filter1.disabled = false; | |
221 filter2.disabled = false; | |
222 checkKnownFilters(test, "enable filter1, filter2", {blacklist: [filter1.text], whitelist: [filter2.text]}); | |
223 | |
224 FilterStorage.addFilter(filter1); | |
225 checkKnownFilters(test, "add filter1", {blacklist: [filter1.text], whitelist: [filter2.text]}); | |
226 | |
227 subscription.disabled = true; | |
228 checkKnownFilters(test, "disable subscription", {blacklist: [filter1.text]}); | |
229 | |
230 FilterStorage.removeSubscription(subscription); | |
231 checkKnownFilters(test, "remove subscription", {blacklist: [filter1.text]}); | |
232 | |
233 FilterStorage.addSubscription(subscription); | |
234 checkKnownFilters(test, "add subscription", {blacklist: [filter1.text]}); | |
235 | |
236 subscription.disabled = false; | |
237 checkKnownFilters(test, "enable subscription", {blacklist: [filter1.text], whi telist: [filter2.text]}); | |
238 | |
239 subscription.disabled = true; | |
240 checkKnownFilters(test, "disable subscription", {blacklist: [filter1.text]}); | |
241 | |
242 FilterStorage.addFilter(filter2); | |
243 checkKnownFilters(test, "add filter2", {blacklist: [filter1.text], whitelist: [filter2.text]}); | |
244 | |
245 FilterStorage.removeFilter(filter2); | |
246 checkKnownFilters(test, "remove filter2", {blacklist: [filter1.text]}); | |
247 | |
248 subscription.disabled = false; | |
249 checkKnownFilters(test, "enable subscription", {blacklist: [filter1.text], whi telist: [filter2.text]}); | |
250 | |
251 FilterStorage.removeSubscription(subscription); | |
252 checkKnownFilters(test, "remove subscription", {blacklist: [filter1.text]}); | |
253 | |
254 test.done(); | |
255 }; | |
256 | |
257 exports.testFilterGroupOperations = function(test) | |
258 { | |
259 let filter1 = Filter.fromText("filter1"); | |
260 let filter2 = Filter.fromText("@@filter2"); | |
261 let filter3 = Filter.fromText("filter3"); | |
262 let filter4 = Filter.fromText("@@filter4"); | |
263 let filter5 = Filter.fromText("!filter5"); | |
264 | |
265 let subscription = Subscription.fromURL("http://test1/"); | |
266 subscription.filters = [filter1, filter2]; | |
267 | |
268 FilterStorage.addSubscription(subscription); | |
269 FilterStorage.addFilter(filter1); | |
270 checkKnownFilters(test, "initial setup", {blacklist: [filter1.text], whitelist : [filter2.text]}); | |
271 | |
272 let subscription2 = Subscription.fromURL("~fl~"); | |
273 subscription2.disabled = true; | |
274 checkKnownFilters(test, "disable blocking filters", {blacklist: [filter1.text] , whitelist: [filter2.text]}); | |
275 | |
276 FilterStorage.removeSubscription(subscription); | |
277 checkKnownFilters(test, "remove subscription", {}); | |
278 | |
279 subscription2.disabled = false; | |
280 checkKnownFilters(test, "enable blocking filters", {blacklist: [filter1.text]} ); | |
281 | |
282 let subscription3 = Subscription.fromURL("~wl~"); | |
283 subscription3.disabled = true; | |
284 checkKnownFilters(test, "disable exception rules", {blacklist: [filter1.text]} ); | |
285 | |
286 FilterStorage.addFilter(filter2); | |
287 checkKnownFilters(test, "add @@filter2", {blacklist: [filter1.text], whitelist : [filter2.text]}); | |
288 test.equal(filter2.subscriptions.length, 1, "@@filter2.subscription.length"); | |
289 test.ok(filter2.subscriptions[0] instanceof SpecialSubscription, "@@filter2 ad ded to a new filter group"); | |
290 test.ok(filter2.subscriptions[0] != subscription3, "@@filter2 filter group is not the disabled exceptions group"); | |
291 | |
292 subscription3.disabled = false; | |
293 checkKnownFilters(test, "enable exception rules", {blacklist: [filter1.text], whitelist: [filter2.text]}); | |
294 | |
295 FilterStorage.removeFilter(filter2); | |
296 FilterStorage.addFilter(filter2); | |
297 checkKnownFilters(test, "re-add @@filter2", {blacklist: [filter1.text], whitel ist: [filter2.text]}); | |
298 test.equal(filter2.subscriptions.length, 1, "@@filter2.subscription.length"); | |
299 test.ok(filter2.subscriptions[0] == subscription3, "@@filter2 added to the def ault exceptions group"); | |
300 | |
301 let subscription4 = Subscription.fromURL("http://test/"); | |
302 FilterStorage.updateSubscriptionFilters(subscription4, [filter3, filter4, filt er5]); | |
303 checkKnownFilters(test, "update subscription not in the list yet", {blacklist: [filter1.text], whitelist: [filter2.text]}); | |
304 | |
305 FilterStorage.addSubscription(subscription4); | |
306 checkKnownFilters(test, "add subscription to the list", {blacklist: [filter1.t ext, filter3.text], whitelist: [filter2.text, filter4.text]}); | |
307 | |
308 FilterStorage.updateSubscriptionFilters(subscription4, [filter3, filter2, filt er5]); | |
309 checkKnownFilters(test, "update subscription while in the list", {blacklist: [ filter1.text, filter3.text], whitelist: [filter2.text]}); | |
310 | |
311 subscription3.disabled = true; | |
312 checkKnownFilters(test, "disable exception rules", {blacklist: [filter1.text, filter3.text], whitelist: [filter2.text]}); | |
313 | |
314 FilterStorage.removeSubscription(subscription4); | |
315 checkKnownFilters(test, "remove subscription from the list", {blacklist: [filt er1.text]}); | |
316 | |
317 subscription3.disabled = false; | |
318 checkKnownFilters(test, "enable exception rules", {blacklist: [filter1.text], whitelist: [filter2.text]}); | |
319 | |
320 test.done(); | |
321 }; | |
OLD | NEW |