OLD | NEW |
| (Empty) |
1 (function() | |
2 { | |
3 module("Filter listener", { | |
4 setup: function() | |
5 { | |
6 prepareFilterComponents.call(this, true); | |
7 preparePrefs.call(this); | |
8 | |
9 FilterStorage.addSubscription(Subscription.fromURL("~fl~")); | |
10 FilterStorage.addSubscription(Subscription.fromURL("~wl~")); | |
11 FilterStorage.addSubscription(Subscription.fromURL("~eh~")); | |
12 | |
13 Subscription.fromURL("~fl~").defaults = ["blocking"]; | |
14 Subscription.fromURL("~wl~").defaults = ["whitelist"]; | |
15 Subscription.fromURL("~eh~").defaults = ["elemhide"]; | |
16 }, | |
17 teardown: function() | |
18 { | |
19 restoreFilterComponents.call(this); | |
20 restorePrefs.call(this); | |
21 } | |
22 }); | |
23 | |
24 function checkKnownFilters(text, expected) | |
25 { | |
26 let result = {}; | |
27 for (let type of ["blacklist", "whitelist"]) | |
28 { | |
29 let matcher = defaultMatcher[type] | |
30 let filters = []; | |
31 for (let keyword in matcher.filterByKeyword) | |
32 { | |
33 let list = matcher.filterByKeyword[keyword]; | |
34 for (let i = 0; i < list.length; i++) | |
35 { | |
36 let filter = list[i]; | |
37 equal(matcher.getKeywordForFilter(filter), keyword, "Keyword of filter
" + filter.text); | |
38 filters.push(filter.text); | |
39 } | |
40 } | |
41 result[type] = filters; | |
42 } | |
43 | |
44 let ElemHideGlobal = getModuleGlobal("elemHide"); | |
45 result.elemhide = []; | |
46 for (let key in ElemHideGlobal.filterByKey) | |
47 result.elemhide.push(ElemHideGlobal.filterByKey[key].text); | |
48 | |
49 result.elemhideexception = []; | |
50 for (let selector in ElemHideGlobal.exceptions) | |
51 { | |
52 let list = ElemHideGlobal.exceptions[selector]; | |
53 for (let exception of list) | |
54 result.elemhideexception.push(exception.text); | |
55 } | |
56 | |
57 let CSSRulesGlobal = getModuleGlobal("cssRules"); | |
58 result.cssrule = []; | |
59 for (let filterText in CSSRulesGlobal.filters) | |
60 result.cssrule.push(filterText); | |
61 | |
62 let types = ["blacklist", "whitelist", "elemhide", "elemhideexception", | |
63 "cssrule"]; | |
64 for (let type of types) | |
65 if (!(type in expected)) | |
66 expected[type] = []; | |
67 | |
68 deepEqual(result, expected, text); | |
69 } | |
70 | |
71 test("Adding and removing filters", function() | |
72 { | |
73 let filter1 = Filter.fromText("filter1"); | |
74 let filter2 = Filter.fromText("@@filter2"); | |
75 let filter3 = Filter.fromText("#filter3"); | |
76 let filter4 = Filter.fromText("!filter4"); | |
77 let filter5 = Filter.fromText("#@#filter5"); | |
78 let filter6 = Filter.fromText("example.com##[-abp-properties='filter6']"); | |
79 let filter7 = Filter.fromText("example.com#@#[-abp-properties='filter7']"); | |
80 | |
81 FilterStorage.addFilter(filter1); | |
82 checkKnownFilters("add filter1", {blacklist: [filter1.text]}); | |
83 FilterStorage.addFilter(filter2); | |
84 checkKnownFilters("add @@filter2", {blacklist: [filter1.text], whitelist: [f
ilter2.text]}); | |
85 FilterStorage.addFilter(filter3); | |
86 checkKnownFilters("add #filter3", {blacklist: [filter1.text], whitelist: [fi
lter2.text], elemhide: [filter3.text]}); | |
87 FilterStorage.addFilter(filter4); | |
88 checkKnownFilters("add !filter4", {blacklist: [filter1.text], whitelist: [fi
lter2.text], elemhide: [filter3.text]}); | |
89 FilterStorage.addFilter(filter5); | |
90 checkKnownFilters("add #@#filter5", {blacklist: [filter1.text], whitelist: [
filter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text]}); | |
91 FilterStorage.addFilter(filter6); | |
92 checkKnownFilters("add example.com##[-abp-properties='filter6']", {blacklist
: [filter1.text], whitelist: [filter2.text], elemhide: [filter3.text], elemhidee
xception: [filter5.text], cssrule: [filter6.text]}); | |
93 FilterStorage.addFilter(filter7); | |
94 checkKnownFilters("add example.com#@#[-abp-properties='filter7']", {blacklis
t: [filter1.text], whitelist: [filter2.text], elemhide: [filter3.text], elemhide
exception: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
95 | |
96 FilterStorage.removeFilter(filter1); | |
97 checkKnownFilters("remove filter1", {whitelist: [filter2.text], elemhide: [f
ilter3.text], elemhideexception: [filter5.text, filter7.text], cssrule: [filter6
.text]}); | |
98 filter2.disabled = true; | |
99 checkKnownFilters("disable filter2", {elemhide: [filter3.text], elemhideexce
ption: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
100 FilterStorage.removeFilter(filter2); | |
101 checkKnownFilters("remove filter2", {elemhide: [filter3.text], elemhideexcep
tion: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
102 FilterStorage.removeFilter(filter4); | |
103 checkKnownFilters("remove filter4", {elemhide: [filter3.text], elemhideexcep
tion: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
104 }); | |
105 | |
106 test("Disabling/enabling filters not in the list", function() | |
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("example.com##[-abp-properties='filter5']"); | |
113 let filter6 = Filter.fromText("example.com#@#[-abp-properties='filter6']"); | |
114 | |
115 filter1.disabled = true; | |
116 checkKnownFilters("disable filter1 while not in list", {}); | |
117 filter1.disabled = false; | |
118 checkKnownFilters("enable filter1 while not in list", {}); | |
119 | |
120 filter2.disabled = true; | |
121 checkKnownFilters("disable @@filter2 while not in list", {}); | |
122 filter2.disabled = false; | |
123 checkKnownFilters("enable @@filter2 while not in list", {}); | |
124 | |
125 filter3.disabled = true; | |
126 checkKnownFilters("disable #filter3 while not in list", {}); | |
127 filter3.disabled = false; | |
128 checkKnownFilters("enable #filter3 while not in list", {}); | |
129 | |
130 filter4.disabled = true; | |
131 checkKnownFilters("disable #@#filter4 while not in list", {}); | |
132 filter4.disabled = false; | |
133 checkKnownFilters("enable #@#filter4 while not in list", {}); | |
134 | |
135 filter5.disabled = true; | |
136 checkKnownFilters("disable example.com##[-abp-properties='filter5'] while no
t in list", {}); | |
137 filter5.disabled = false; | |
138 checkKnownFilters("enable example.com##[-abp-properties='filter5'] while not
in list", {}); | |
139 | |
140 filter6.disabled = true; | |
141 checkKnownFilters("disable example.com#@#[-abp-properties='filter6'] while n
ot in list", {}); | |
142 filter6.disabled = false; | |
143 checkKnownFilters("enable example.com#@#[-abp-properties='filter6'] while no
t in list", {}); | |
144 }); | |
145 | |
146 test("Filter subscription operations", function() | |
147 { | |
148 let filter1 = Filter.fromText("filter1"); | |
149 let filter2 = Filter.fromText("@@filter2"); | |
150 filter2.disabled = true; | |
151 let filter3 = Filter.fromText("#filter3"); | |
152 let filter4 = Filter.fromText("!filter4"); | |
153 let filter5 = Filter.fromText("#@#filter5"); | |
154 let filter6 = Filter.fromText("example.com##[-abp-properties='filter6']"); | |
155 let filter7 = Filter.fromText("example.com#@#[-abp-properties='filter7']"); | |
156 | |
157 let subscription = Subscription.fromURL("http://test1/"); | |
158 subscription.filters = [filter1, filter2, filter3, filter4, filter5, filter6
, filter7]; | |
159 | |
160 FilterStorage.addSubscription(subscription); | |
161 checkKnownFilters("add subscription with filter1, @@filter2, #filter3, !filt
er4, #@#filter5, example.com##[-abp-properties='filter6'], example.com#@#[-abp-p
roperties='filter7']", {blacklist: [filter1.text], elemhide: [filter3.text], ele
mhideexception: [filter5.text, filter7.text], cssrule: [filter6.text]}); | |
162 | |
163 filter2.disabled = false; | |
164 checkKnownFilters("enable @@filter2", {blacklist: [filter1.text], whitelist:
[filter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text, fil
ter7.text], cssrule: [filter6.text]}); | |
165 | |
166 FilterStorage.addFilter(filter1); | |
167 checkKnownFilters("add filter1", {blacklist: [filter1.text], whitelist: [fil
ter2.text], elemhide: [filter3.text], elemhideexception: [filter5.text, filter7.
text], cssrule: [filter6.text]}); | |
168 | |
169 FilterStorage.updateSubscriptionFilters(subscription, [filter4]); | |
170 checkKnownFilters("change subscription filters to filter4", {blacklist: [fil
ter1.text]}); | |
171 | |
172 FilterStorage.removeFilter(filter1); | |
173 checkKnownFilters("remove filter1", {}); | |
174 | |
175 FilterStorage.updateSubscriptionFilters(subscription, [filter1, filter2]); | |
176 checkKnownFilters("change subscription filters to filter1, filter2", {blackl
ist: [filter1.text], whitelist: [filter2.text]}); | |
177 | |
178 filter1.disabled = true; | |
179 checkKnownFilters("disable filter1", {whitelist: [filter2.text]}); | |
180 filter2.disabled = true; | |
181 checkKnownFilters("disable filter2", {}); | |
182 filter1.disabled = false; | |
183 filter2.disabled = false; | |
184 checkKnownFilters("enable filter1, filter2", {blacklist: [filter1.text], whi
telist: [filter2.text]}); | |
185 | |
186 FilterStorage.addFilter(filter1); | |
187 checkKnownFilters("add filter1", {blacklist: [filter1.text], whitelist: [fil
ter2.text]}); | |
188 | |
189 subscription.disabled = true; | |
190 checkKnownFilters("disable subscription", {blacklist: [filter1.text]}); | |
191 | |
192 FilterStorage.removeSubscription(subscription); | |
193 checkKnownFilters("remove subscription", {blacklist: [filter1.text]}); | |
194 | |
195 FilterStorage.addSubscription(subscription); | |
196 checkKnownFilters("add subscription", {blacklist: [filter1.text]}); | |
197 | |
198 subscription.disabled = false; | |
199 checkKnownFilters("enable subscription", {blacklist: [filter1.text], whiteli
st: [filter2.text]}); | |
200 | |
201 subscription.disabled = true; | |
202 checkKnownFilters("disable subscription", {blacklist: [filter1.text]}); | |
203 | |
204 FilterStorage.addFilter(filter2); | |
205 checkKnownFilters("add filter2", {blacklist: [filter1.text], whitelist: [fil
ter2.text]}); | |
206 | |
207 FilterStorage.removeFilter(filter2); | |
208 checkKnownFilters("remove filter2", {blacklist: [filter1.text]}); | |
209 | |
210 subscription.disabled = false; | |
211 checkKnownFilters("enable subscription", {blacklist: [filter1.text], whiteli
st: [filter2.text]}); | |
212 | |
213 FilterStorage.removeSubscription(subscription); | |
214 checkKnownFilters("remove subscription", {blacklist: [filter1.text]}); | |
215 }); | |
216 | |
217 test("Filter group operations", function() | |
218 { | |
219 let filter1 = Filter.fromText("filter1"); | |
220 let filter2 = Filter.fromText("@@filter2"); | |
221 let filter3 = Filter.fromText("filter3"); | |
222 let filter4 = Filter.fromText("@@filter4"); | |
223 let filter5 = Filter.fromText("!filter5"); | |
224 | |
225 let subscription = Subscription.fromURL("http://test1/"); | |
226 subscription.filters = [filter1, filter2]; | |
227 | |
228 FilterStorage.addSubscription(subscription); | |
229 FilterStorage.addFilter(filter1); | |
230 checkKnownFilters("initial setup", {blacklist: [filter1.text], whitelist: [f
ilter2.text]}); | |
231 | |
232 let subscription2 = Subscription.fromURL("~fl~"); | |
233 subscription2.disabled = true; | |
234 checkKnownFilters("disable blocking filters", {blacklist: [filter1.text], wh
itelist: [filter2.text]}); | |
235 | |
236 FilterStorage.removeSubscription(subscription); | |
237 checkKnownFilters("remove subscription", {}); | |
238 | |
239 subscription2.disabled = false; | |
240 checkKnownFilters("enable blocking filters", {blacklist: [filter1.text]}); | |
241 | |
242 let subscription3 = Subscription.fromURL("~wl~"); | |
243 subscription3.disabled = true; | |
244 checkKnownFilters("disable exception rules", {blacklist: [filter1.text]}); | |
245 | |
246 FilterStorage.addFilter(filter2); | |
247 checkKnownFilters("add @@filter2", {blacklist: [filter1.text], whitelist: [f
ilter2.text]}); | |
248 equal(filter2.subscriptions.length, 1, "@@filter2.subscription.length"); | |
249 ok(filter2.subscriptions[0] instanceof SpecialSubscription, "@@filter2 added
to a new filter group"); | |
250 ok(filter2.subscriptions[0] != subscription3, "@@filter2 filter group is not
the disabled exceptions group"); | |
251 | |
252 subscription3.disabled = false; | |
253 checkKnownFilters("enable exception rules", {blacklist: [filter1.text], whit
elist: [filter2.text]}); | |
254 | |
255 FilterStorage.removeFilter(filter2); | |
256 FilterStorage.addFilter(filter2); | |
257 checkKnownFilters("re-add @@filter2", {blacklist: [filter1.text], whitelist:
[filter2.text]}); | |
258 equal(filter2.subscriptions.length, 1, "@@filter2.subscription.length"); | |
259 ok(filter2.subscriptions[0] == subscription3, "@@filter2 added to the defaul
t exceptions group"); | |
260 | |
261 let subscription4 = Subscription.fromURL("http://test/"); | |
262 FilterStorage.updateSubscriptionFilters(subscription4, [filter3, filter4, fi
lter5]); | |
263 checkKnownFilters("update subscription not in the list yet", {blacklist: [fi
lter1.text], whitelist: [filter2.text]}); | |
264 | |
265 FilterStorage.addSubscription(subscription4); | |
266 checkKnownFilters("add subscription to the list", {blacklist: [filter1.text,
filter3.text], whitelist: [filter2.text, filter4.text]}); | |
267 | |
268 FilterStorage.updateSubscriptionFilters(subscription4, [filter3, filter2, fi
lter5]); | |
269 checkKnownFilters("update subscription while in the list", {blacklist: [filt
er1.text, filter3.text], whitelist: [filter2.text]}); | |
270 | |
271 subscription3.disabled = true; | |
272 checkKnownFilters("disable exception rules", {blacklist: [filter1.text, filt
er3.text], whitelist: [filter2.text]}); | |
273 | |
274 FilterStorage.removeSubscription(subscription4); | |
275 checkKnownFilters("remove subscription from the list", {blacklist: [filter1.
text]}); | |
276 | |
277 subscription3.disabled = false; | |
278 checkKnownFilters("enable exception rules", {blacklist: [filter1.text], whit
elist: [filter2.text]}); | |
279 }); | |
280 })(); | |
OLD | NEW |