Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: test/filterStorage.js

Issue 29426559: Issue 5137 - [emscripten] Added basic filter storage implementation (Closed) Base URL: https://hg.adblockplus.org/adblockpluscore
Patch Set: Rebased Created May 10, 2017, 12:36 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/subscriptionClasses.js ('k') | test/subscriptionClasses.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2017 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 const {createSandbox} = require("./_common");
21
22 let Filter = null;
23 let FilterNotifier = null;
24 let FilterStorage = null;
25 let Subscription = null;
26
27 exports.setUp = function(callback)
28 {
29 let sandboxedRequire = createSandbox();
30
31 (
32 {Filter} = sandboxedRequire("../lib/filterClasses"),
33 {FilterNotifier} = sandboxedRequire("../lib/filterNotifier"),
34 {FilterStorage} = sandboxedRequire("../lib/filterStorage"),
35 {Subscription} = sandboxedRequire("../lib/subscriptionClasses")
36 );
37
38 callback();
39 };
40
41 function compareSubscriptionList(test, testMessage, list)
42 {
43 let result = Array.from(FilterStorage.subscriptions, subscription => subscript ion.url);
44 let expected = list.map(subscription => subscription.url);
45 test.deepEqual(result, expected, testMessage);
46 }
47
48 function compareFiltersList(test, testMessage, list)
49 {
50 let result = Array.from(FilterStorage.subscriptions, subscription =>
51 {
52 return Array.from(subscription.filters, filter => filter.text);
53 });
54 test.deepEqual(result, list, testMessage);
55 }
56
57 exports.testAddingRemovingSubscriptions = function(test)
58 {
59 let subscription1 = Subscription.fromURL("http://test1/");
60 let subscription2 = Subscription.fromURL("http://test2/");
61 test.ok(!subscription1.listed, "First subscription not listed");
62 test.ok(!subscription2.listed, "Second subscription not listed");
63
64 let changes = [];
65 function listener(action, subscription)
66 {
67 if (action.indexOf("subscription.") == 0)
68 changes.push(action + " " + subscription.url);
69 }
70 FilterNotifier.addListener(listener);
71
72 compareSubscriptionList(test, "Initial state", []);
73 test.deepEqual(changes, [], "Received changes");
74
75 changes = [];
76 FilterStorage.addSubscription(subscription1);
77 compareSubscriptionList(test, "Adding first subscription", [subscription1]);
78 test.deepEqual(changes, ["subscription.added http://test1/"], "Received change s");
79 test.ok(subscription1.listed, "First subscription listed");
80 test.ok(!subscription2.listed, "Second subscription not listed");
81
82 changes = [];
83 FilterStorage.addSubscription(subscription1);
84 compareSubscriptionList(test, "Adding already added subscription", [subscripti on1]);
85 test.deepEqual(changes, [], "Received changes");
86 test.ok(subscription1.listed, "First subscription listed");
87 test.ok(!subscription2.listed, "Second subscription not listed");
88
89 changes = [];
90 FilterStorage.addSubscription(subscription2);
91 compareSubscriptionList(test, "Adding second", [subscription1, subscription2]) ;
92 test.deepEqual(changes, ["subscription.added http://test2/"], "Received change s");
93 test.ok(subscription1.listed, "First subscription listed");
94 test.ok(subscription2.listed, "Second subscription listed");
95
96 changes = [];
97 FilterStorage.removeSubscription(subscription1);
98 compareSubscriptionList(test, "Remove", [subscription2]);
99 test.deepEqual(changes, ["subscription.removed http://test1/"], "Received chan ges");
100 test.ok(!subscription1.listed, "First subscription not listed");
101 test.ok(subscription2.listed, "Second subscription listed");
102
103 changes = [];
104 FilterStorage.removeSubscription(subscription1);
105 compareSubscriptionList(test, "Removing already removed subscription", [subscr iption2]);
106 test.deepEqual(changes, [], "Received changes");
107 test.ok(!subscription1.listed, "First subscription not listed");
108 test.ok(subscription2.listed, "Second subscription listed");
109
110 changes = [];
111 FilterStorage.removeSubscription(subscription2);
112 compareSubscriptionList(test, "Removing remaining subscription", []);
113 test.deepEqual(changes, ["subscription.removed http://test2/"], "Received chan ges");
114 test.ok(!subscription1.listed, "First subscription not listed");
115 test.ok(!subscription2.listed, "Second subscription not listed");
116
117 changes = [];
118 FilterStorage.addSubscription(subscription2);
119 compareSubscriptionList(test, "Re-adding previously removed subscription", [su bscription2]);
120 test.deepEqual(changes, ["subscription.added http://test2/"], "Received change s");
121 test.ok(!subscription1.listed, "First subscription not listed");
122 test.ok(subscription2.listed, "Second subscription listed");
123
124 changes = [];
125 FilterStorage.removeSubscription(subscription2);
126 compareSubscriptionList(test, "Re-removing previously added subscription", []) ;
127 test.deepEqual(changes, ["subscription.removed http://test2/"], "Received chan ges");
128 test.ok(!subscription1.listed, "First subscription not listed");
129 test.ok(!subscription2.listed, "Second subscription not listed");
130
131 subscription1.delete();
132 subscription2.delete();
133
134 test.done();
135 };
136
137 exports.testMovingSubscriptions = function(test)
138 {
139 let subscription1 = Subscription.fromURL("http://test1/");
140 let subscription2 = Subscription.fromURL("http://test2/");
141 let subscription3 = Subscription.fromURL("http://test3/");
142
143 FilterStorage.addSubscription(subscription1);
144 FilterStorage.addSubscription(subscription2);
145 FilterStorage.addSubscription(subscription3);
146
147 let changes = [];
148 function listener(action, subscription)
149 {
150 if (action.indexOf("subscription.") == 0)
151 changes.push(action + " " + subscription.url);
152 }
153 FilterNotifier.addListener(listener);
154
155 compareSubscriptionList(test, "Initial state", [subscription1, subscription2, subscription3]);
156 test.deepEqual(changes, [], "Received changes");
157
158 changes = [];
159 test.ok(FilterStorage.moveSubscription(subscription1), "Move without explicit position succeeded");
160 compareSubscriptionList(test, "Move without explicit position", [subscription2 , subscription3, subscription1]);
161 test.deepEqual(changes, ["subscription.moved http://test1/"], "Received change s");
162
163 changes = [];
164 test.ok(!FilterStorage.moveSubscription(subscription1), "Move without explicit position failed (subscription already last)");
165 compareSubscriptionList(test, "Move without explicit position (subscription al ready last)", [subscription2, subscription3, subscription1]);
166 test.deepEqual(changes, [], "Received changes");
167
168 changes = [];
169 test.ok(FilterStorage.moveSubscription(subscription2, subscription1), "Move wi th explicit position succeeded");
170 compareSubscriptionList(test, "Move with explicit position", [subscription3, s ubscription2, subscription1]);
171 test.deepEqual(changes, ["subscription.moved http://test2/"], "Received change s");
172
173 changes = [];
174 test.ok(!FilterStorage.moveSubscription(subscription3, subscription2), "Move w ithout explicit position failed (subscription already at position)");
175 compareSubscriptionList(test, "Move without explicit position (subscription al ready at position)", [subscription3, subscription2, subscription1]);
176 test.deepEqual(changes, [], "Received changes");
177
178 FilterStorage.removeSubscription(subscription2);
179 compareSubscriptionList(test, "Remove", [subscription3, subscription1]);
180
181 changes = [];
182 test.ok(FilterStorage.moveSubscription(subscription3, subscription2), "Move be fore removed subscription succeeded");
183 compareSubscriptionList(test, "Move before removed subscription", [subscriptio n1, subscription3]);
184 test.deepEqual(changes, ["subscription.moved http://test3/"], "Received change s");
185
186 changes = [];
187 test.ok(!FilterStorage.moveSubscription(subscription2), "Move of removed subsc ription failed");
188 compareSubscriptionList(test, "Move of removed subscription", [subscription1, subscription3]);
189 test.deepEqual(changes, [], "Received changes");
190
191 subscription1.delete();
192 subscription2.delete();
193 subscription3.delete();
194
195 test.done();
196 };
197
198 exports.testAddingRemovingFilters = function(test)
199 {
200 function addFilter(text)
201 {
202 let filter = Filter.fromText(text);
203 FilterStorage.addFilter(filter);
204 filter.delete();
205 }
206
207 function removeFilter(text)
208 {
209 let filter = Filter.fromText(text);
210 FilterStorage.removeFilter(filter);
211 filter.delete();
212 }
213
214
215 let changes = [];
216 function listener(action, filter, subscription, position)
217 {
218 if (action.indexOf("filter.") == 0)
219 {
220 changes.push([
221 action, filter.text, FilterStorage.indexOfSubscription(subscription),
222 position
223 ].join(" "));
224 }
225 }
226 FilterNotifier.addListener(listener);
227
228 compareFiltersList(test, "Initial state", []);
229 test.deepEqual(changes, [], "Received changes");
230
231 changes = [];
232 addFilter("foo");
233 compareFiltersList(test, "Adding blocking filter", [["foo"]]);
234 test.deepEqual(changes, ["filter.added foo 0 0"], "Received changes");
235
236 changes = [];
237 addFilter("@@bar");
238 compareFiltersList(test, "Adding exception rule", [["foo"], ["@@bar"]]);
239 test.deepEqual(changes, ["filter.added @@bar 1 0"], "Received changes");
240
241 {
242 let subscription = FilterStorage.subscriptionAt(1);
243 let filter = Filter.fromText("##elemhide");
244 subscription.makeDefaultFor(filter);
245 filter.delete();
246 subscription.delete();
247 }
248
249 {
250 let subscription = Subscription.fromURL("~other");
251 FilterStorage.addSubscription(subscription);
252 subscription.delete();
253 }
254
255 test.deepEqual(Array.from(FilterStorage.subscriptions, s => s.isGeneric()),
256 [false, false, true], "SpecialSubscription.isGeneric() result");
257
258 changes = [];
259 addFilter("foo##bar");
260 compareFiltersList(test, "Adding hiding rule", [["foo"], ["@@bar", "foo##bar"] , []]);
261 test.deepEqual(changes, ["filter.added foo##bar 1 1"], "Received changes");
262
263 changes = [];
264 addFilter("foo#@#bar");
265 compareFiltersList(test, "Adding hiding exception", [["foo"], ["@@bar", "foo## bar", "foo#@#bar"], []]);
266 test.deepEqual(changes, ["filter.added foo#@#bar 1 2"], "Received changes");
267
268 changes = [];
269 addFilter("!foobar");
270 compareFiltersList(test, "Adding comment", [["foo"], ["@@bar", "foo##bar", "fo o#@#bar"], ["!foobar"]]);
271 test.deepEqual(changes, ["filter.added !foobar 2 0"], "Received changes");
272
273 changes = [];
274 addFilter("foo");
275 compareFiltersList(test, "Adding already added filter", [["foo"], ["@@bar", "f oo##bar", "foo#@#bar"], ["!foobar"]]);
276 test.deepEqual(changes, [], "Received changes");
277
278 {
279 let subscription = FilterStorage.subscriptionAt(0);
280 subscription.disabled = true;
281 subscription.delete();
282 }
283
284 changes = [];
285 addFilter("foo");
286 compareFiltersList(test, "Adding filter already in a disabled subscription", [ ["foo"], ["@@bar", "foo##bar", "foo#@#bar"], ["!foobar", "foo"]]);
287 test.deepEqual(changes, ["filter.added foo 2 1"], "Received changes");
288
289 changes = [];
290 removeFilter("foo");
291 compareFiltersList(test, "Removing filter", [[], ["@@bar", "foo##bar", "foo#@# bar"], ["!foobar"]]);
292 test.deepEqual(changes, [
293 "filter.removed foo 0 0",
294 "filter.removed foo 2 1",
295 ], "Received changes");
296
297 changes = [];
298 removeFilter("foo");
299 compareFiltersList(test, "Removing unknown filter", [[], ["@@bar", "foo##bar", "foo#@#bar"], ["!foobar"]]);
300 test.deepEqual(changes, [], "Received changes");
301
302 test.done();
303 };
OLDNEW
« no previous file with comments | « lib/subscriptionClasses.js ('k') | test/subscriptionClasses.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld