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

Side by Side Diff: test/abp2blocklist.js

Issue 29344540: Issue 3675 - Add some tests for ContentBlockerList (Closed)
Patch Set: Removed #4072 fix Created May 25, 2016, 6:31 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 | « package.json ('k') | no next file » | 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-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 Filter = require("filterClasses").Filter;
21 let ContentBlockerList = require("../lib/abp2blocklist.js").ContentBlockerList;
22
23 function testRules(test, filters, expected, transformFunction)
24 {
25 let blockerList = new ContentBlockerList();
26 for (let filter of filters)
27 blockerList.addFilter(Filter.fromText(filter));
28
29 let rules = blockerList.generateRules();
30 if (transformFunction)
31 rules = transformFunction(rules);
32
33 test.deepEqual(rules, expected);
34 }
35
36 exports.generateRules = {
37 testElementHiding: function(test)
38 {
39 testRules(test, ["##.whatever"], [
40 {trigger: {"url-filter": "^https?://",
41 "url-filter-is-case-sensitive": true},
42 action: {type: "css-display-none", selector: ".whatever"}}
43 ]);
44 testRules(test, ["test.com##.whatever"], [
45 {trigger: {"url-filter": "^https?://([^/:]*\\.)?test\\.com[/:]",
46 "url-filter-is-case-sensitive": true},
47 action: {type: "css-display-none", selector: ".whatever"}}
48 ]);
49
50 test.done();
51 },
52
53 testElementHidingExceptions: function(test)
54 {
55 testRules(test, ["#@#whatever"], []);
56 testRules(test, ["test.com#@#whatever"], []);
57 testRules(test, ["~test.com#@#whatever"], []);
58
59 // We currently completely ignore any element hiding filters that have the
60 // same selector as an element hiding exception. In these examples #whatever
61 // should be hidden for all domains not ending in test.com instead of
62 // nowhere!
63 testRules(test, ["test.com#@#whatever", "##whatever"], []);
64 testRules(test, ["~test.com##whatever"], []);
65
66 test.done();
67 },
68
69 testRequestFilters: function(test)
70 {
71 testRules(test, ["/foo", "||test.com", "http://example.com/foo"], [
72 {trigger: {"url-filter": "^https?://.*/foo",
73 "resource-type": ["image", "style-sheet", "script", "font",
74 "media", "raw", "document"]},
75 action: {type: "block"}},
76 {trigger: {"url-filter": "^https?://test\\.com",
77 "url-filter-is-case-sensitive": true,
78 "resource-type": ["image", "style-sheet", "script", "font",
79 "media", "raw", "document"]},
80 action: {type: "block"}},
81 {trigger: {"url-filter": "http://example\\.com/foo",
82 "resource-type": ["image", "style-sheet", "script", "font",
83 "media", "raw", "document"]},
84 action: {type: "block"}}
85 ]);
86
87 test.done();
88 },
89
90 testRequestFilterExceptions: function(test)
91 {
92 testRules(test, ["@@example.com"], [
93 {trigger: {"url-filter": "^https?://.*example\\.com",
94 "resource-type": ["image", "style-sheet", "script", "font",
95 "media", "raw", "document"]},
96 action: {type: "ignore-previous-rules"}}
97 ]);
98
99 test.done();
100 },
101
102 testElementIDattributeFormat: function(test)
103 {
104 testRules(test,
105 ["###example", "test.com###EXAMPLE"],
106 ["[id=example]", "[id=EXAMPLE]"],
107 rules => rules.map(rule => rule.action.selector));
108
109 test.done();
110 },
111
112 testDomainWhitelisting: function(test)
113 {
114 testRules(test, ["@@||example.com^$document"], [
115 {trigger: {"url-filter": ".*",
116 "if-domain": ["example.com", "www.example.com"]},
117 action: {type: "ignore-previous-rules"}}
118 ]);
119 testRules(test, ["@@||example.com^$document,image"], [
120 {trigger: {"url-filter": ".*",
121 "if-domain": ["example.com", "www.example.com"]},
122 action: {type: "ignore-previous-rules"}},
123 {trigger: {"url-filter": "^https?://example\\.com",
124 "url-filter-is-case-sensitive": true,
125 "resource-type": ["image"]},
126 action: {type: "ignore-previous-rules"}}
127 ]);
128 testRules(test, ["@@||example.com/path^$font,document"], [
129 {trigger: {"url-filter": "^https?://example\\.com/path",
130 "resource-type": ["font"]},
131 action: {type: "ignore-previous-rules"}}
132 ]);
133
134 test.done();
135 },
136
137 testRuleOrdering: function(test)
138 {
139 testRules(
140 test,
141 ["/ads.jpg", "@@example.com", "test.com#@#foo", "##bar"],
142 ["css-display-none", "block", "ignore-previous-rules"],
143 rules => rules.map(rule => rule.action.type)
144 );
145 testRules(
146 test,
147 ["@@example.com", "##bar", "/ads.jpg", "test.com#@#foo"],
148 ["css-display-none", "block", "ignore-previous-rules"],
149 rules => rules.map(rule => rule.action.type)
150 );
151
152 test.done();
153 },
154
155 testRequestTypeMapping: function(test)
156 {
157 testRules(
158 test,
159 ["1", "2$image", "3$stylesheet", "4$script", "5$font", "6$media",
160 "7$popup", "8$object", "9$object_subrequest", "10$xmlhttprequest",
161 "11$ping", "12$subdocument", "13$other", "14$IMAGE", "15$document",
162 "16$script,PING,Popup", "17$~image"],
163 [["image", "style-sheet", "script", "font", "media", "raw", "document" ],
164 ["image"],
165 ["style-sheet"],
166 ["script"],
167 ["font"],
168 ["media"],
169 ["popup"],
170 ["media"],
171 ["raw"],
172 ["raw"],
173 ["raw"],
174 ["document"],
175 ["raw"],
176 ["image"],
177 [],
178 ["script", "popup", "raw" ],
179 ["style-sheet", "script", "font", "media", "raw", "document"]],
180 rules => rules.map(rule => rule.trigger["resource-type"])
181 );
182
183 test.done();
184 },
185
186 testUnsupportedfilters: function(test)
187 {
188 // These types of filters are currently completely unsupported.
189 testRules(test, ["foo$sitekey=bar", "@@foo$genericblock",
190 "@@bar$generichide"], []);
191
192 test.done();
193 },
194
195 testFilterOptions: function(test)
196 {
197 testRules(test, ["1$domain=foo.com"], ["foo.com", "www.foo.com"],
198 rules => rules[0]["trigger"]["if-domain"]);
199 testRules(test, ["2$domain=third-party"], ["third-party"],
200 rules => rules[0]["trigger"]["if-domain"]);
201 testRules(test, ["foo$match_case"], true,
202 rules => rules[0]["trigger"]["url-filter-is-case-sensitive"]);
203
204 test.done();
205 },
206
207 testUnicode: function(test)
208 {
209 testRules(test, ["$domain=🐈.cat"], ["xn--zn8h.cat", "www.xn--zn8h.cat"],
210 rules => rules[0]["trigger"]["if-domain"]);
211 testRules(test, ["🐈$domain=🐈.cat"], []);
212 testRules(test, ["###🐈"], []);
213
214 test.done();
215 }
216 };
OLDNEW
« no previous file with comments | « package.json ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld