OLD | NEW |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 Eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 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 | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 11 matching lines...) Expand all Loading... |
22 let Filter = null; | 22 let Filter = null; |
23 let InvalidFilter = null; | 23 let InvalidFilter = null; |
24 let CommentFilter = null; | 24 let CommentFilter = null; |
25 let ActiveFilter = null; | 25 let ActiveFilter = null; |
26 let RegExpFilter = null; | 26 let RegExpFilter = null; |
27 let BlockingFilter = null; | 27 let BlockingFilter = null; |
28 let WhitelistFilter = null; | 28 let WhitelistFilter = null; |
29 let ElemHideBase = null; | 29 let ElemHideBase = null; |
30 let ElemHideFilter = null; | 30 let ElemHideFilter = null; |
31 let ElemHideException = null; | 31 let ElemHideException = null; |
32 let CSSPropertyFilter = null; | 32 let ElemHideEmulationFilter = null; |
33 | 33 |
34 exports.setUp = function(callback) | 34 exports.setUp = function(callback) |
35 { | 35 { |
36 let sandboxedRequire = createSandbox(); | 36 let sandboxedRequire = createSandbox(); |
37 ( | 37 ( |
38 { | 38 { |
39 Filter, InvalidFilter, CommentFilter, ActiveFilter, RegExpFilter, | 39 Filter, InvalidFilter, CommentFilter, ActiveFilter, RegExpFilter, |
40 BlockingFilter, WhitelistFilter, ElemHideBase, ElemHideFilter, | 40 BlockingFilter, WhitelistFilter, ElemHideBase, ElemHideFilter, |
41 ElemHideException, CSSPropertyFilter | 41 ElemHideException, ElemHideEmulationFilter |
42 } = sandboxedRequire("../lib/filterClassesNew") | 42 } = sandboxedRequire("../lib/filterClassesNew") |
43 ); | 43 ); |
44 callback(); | 44 callback(); |
45 }; | 45 }; |
46 | 46 |
47 exports.testFromText = function(test) | 47 exports.testFromText = function(test) |
48 { | 48 { |
49 let tests = [ | 49 let tests = [ |
50 ["!asdf", CommentFilter, "comment"], | 50 ["!asdf", CommentFilter, "comment"], |
51 ["asdf", BlockingFilter, "blocking"], | 51 ["asdf", BlockingFilter, "blocking"], |
(...skipping 16 matching lines...) Expand all Loading... |
68 ["foobar##asdf{asdf}", BlockingFilter, "blocking"], | 68 ["foobar##asdf{asdf}", BlockingFilter, "blocking"], |
69 ["foobar##", BlockingFilter, "blocking"], | 69 ["foobar##", BlockingFilter, "blocking"], |
70 ["foobar#@#", BlockingFilter, "blocking"], | 70 ["foobar#@#", BlockingFilter, "blocking"], |
71 ["asdf$foobar", InvalidFilter, "invalid"], | 71 ["asdf$foobar", InvalidFilter, "invalid"], |
72 ["asdf$image,foobar", InvalidFilter, "invalid"], | 72 ["asdf$image,foobar", InvalidFilter, "invalid"], |
73 ["asdf$image=foobar", BlockingFilter, "blocking"], | 73 ["asdf$image=foobar", BlockingFilter, "blocking"], |
74 ["asdf$image=foobar=xyz,~collapse", BlockingFilter, "blocking"], | 74 ["asdf$image=foobar=xyz,~collapse", BlockingFilter, "blocking"], |
75 | 75 |
76 ["##foo[-abp-properties='something']bar", InvalidFilter, "invalid"], | 76 ["##foo[-abp-properties='something']bar", InvalidFilter, "invalid"], |
77 ["#@#foo[-abp-properties='something']bar", ElemHideException, "elemhideexcep
tion"], | 77 ["#@#foo[-abp-properties='something']bar", ElemHideException, "elemhideexcep
tion"], |
78 ["example.com##foo[-abp-properties='something']bar", CSSPropertyFilter, "css
property"], | 78 ["example.com##foo[-abp-properties='something']bar", ElemHideEmulationFilter
, "elemhideemulation"], |
79 ["example.com#@#foo[-abp-properties='something']bar", ElemHideException, "el
emhideexception"], | 79 ["example.com#@#foo[-abp-properties='something']bar", ElemHideException, "el
emhideexception"], |
80 ["~example.com##foo[-abp-properties='something']bar", InvalidFilter, "invali
d"], | 80 ["~example.com##foo[-abp-properties='something']bar", InvalidFilter, "invali
d"], |
81 ["~example.com#@#foo[-abp-properties='something']bar", ElemHideException, "e
lemhideexception"], | 81 ["~example.com#@#foo[-abp-properties='something']bar", ElemHideException, "e
lemhideexception"], |
82 ["~example.com,~example.info##foo[-abp-properties='something']bar", InvalidF
ilter, "invalid"], | 82 ["~example.com,~example.info##foo[-abp-properties='something']bar", InvalidF
ilter, "invalid"], |
83 ["~example.com,~example.info#@#foo[-abp-properties='something']bar", ElemHid
eException, "elemhideexception"], | 83 ["~example.com,~example.info#@#foo[-abp-properties='something']bar", ElemHid
eException, "elemhideexception"], |
84 ["~sub.example.com,example.com##foo[-abp-properties='something']bar", CSSPro
pertyFilter, "cssproperty"], | 84 ["~sub.example.com,example.com##foo[-abp-properties='something']bar", ElemHi
deEmulationFilter, "elemhideemulation"], |
85 ["~sub.example.com,example.com#@#foo[-abp-properties='something']bar", ElemH
ideException, "elemhideexception"], | 85 ["~sub.example.com,example.com#@#foo[-abp-properties='something']bar", ElemH
ideException, "elemhideexception"], |
86 ["example.com,~sub.example.com##foo[-abp-properties='something']bar", CSSPro
pertyFilter, "cssproperty"], | 86 ["example.com,~sub.example.com##foo[-abp-properties='something']bar", ElemHi
deEmulationFilter, "elemhideemulation"], |
87 ["example.com,~sub.example.com#@#foo[-abp-properties='something']bar", ElemH
ideException, "elemhideexception"], | 87 ["example.com,~sub.example.com#@#foo[-abp-properties='something']bar", ElemH
ideException, "elemhideexception"], |
88 ["example.com##[-abp-properties='something']", CSSPropertyFilter, "cssproper
ty"], | 88 ["example.com##[-abp-properties='something']", ElemHideEmulationFilter, "ele
mhideemulation"], |
89 ["example.com#@#[-abp-properties='something']", ElemHideException, "elemhide
exception"], | 89 ["example.com#@#[-abp-properties='something']", ElemHideException, "elemhide
exception"], |
90 ["example.com##[-abp-properties=\"something\"]", CSSPropertyFilter, "cssprop
erty"], | 90 ["example.com##[-abp-properties=\"something\"]", ElemHideEmulationFilter, "e
lemhideemulation"], |
91 ["example.com#@#[-abp-properties=\"something\"]", ElemHideException, "elemhi
deexception"], | 91 ["example.com#@#[-abp-properties=\"something\"]", ElemHideException, "elemhi
deexception"], |
92 ["example.com##[-abp-properties=(something)]", ElemHideFilter, "elemhide"], | 92 ["example.com##[-abp-properties=(something)]", ElemHideEmulationFilter, "ele
mhideemulation"], |
93 ["example.com#@#[-abp-properties=(something)]", ElemHideException, "elemhide
exception"], | 93 ["example.com#@#[-abp-properties=(something)]", ElemHideException, "elemhide
exception"], |
94 ]; | 94 ]; |
95 for (let [text, type, typeName, location] of tests) | 95 for (let [text, type, typeName, location] of tests) |
96 { | 96 { |
97 let filter = Filter.fromText(text); | 97 let filter = Filter.fromText(text); |
98 test.ok(filter instanceof Filter, "Got filter for " + text); | 98 test.ok(filter instanceof Filter, "Got filter for " + text); |
99 test.equal(filter.text, text, "Correct filter text for " + text); | 99 test.equal(filter.text, text, "Correct filter text for " + text); |
100 test.ok(filter instanceof type, "Correct filter type for " + text); | 100 test.ok(filter instanceof type, "Correct filter type for " + text); |
101 test.equal(filter.type, typeName, "Type name for " + text + " is " + typeNam
e); | 101 test.equal(filter.type, typeName, "Type name for " + text + " is " + typeNam
e); |
102 if (type == InvalidFilter) | 102 if (type == InvalidFilter) |
103 test.ok(filter.reason, "Invalid filter " + text + " has a reason set"); | 103 test.ok(filter.reason, "Invalid filter " + text + " has a reason set"); |
104 filter.delete(); | 104 filter.delete(); |
105 } | 105 } |
106 test.done(); | 106 test.done(); |
107 }; | 107 }; |
108 | 108 |
109 exports.testClassHierarchy = function(test) | 109 exports.testClassHierarchy = function(test) |
110 { | 110 { |
111 let allClasses = ["Filter", "InvalidFilter", "CommentFilter", "ActiveFilter", | 111 let allClasses = ["Filter", "InvalidFilter", "CommentFilter", "ActiveFilter", |
112 "RegExpFilter", "BlockingFilter", "WhitelistFilter", "ElemHideBase", | 112 "RegExpFilter", "BlockingFilter", "WhitelistFilter", "ElemHideBase", |
113 "ElemHideFilter", "ElemHideException", "CSSPropertyFilter"]; | 113 "ElemHideFilter", "ElemHideException", "ElemHideEmulationFilter"]; |
114 let tests = [ | 114 let tests = [ |
115 ["/asdf??+/", "Filter", "InvalidFilter"], | 115 ["/asdf??+/", "Filter", "InvalidFilter"], |
116 ["!asdf", "Filter", "CommentFilter"], | 116 ["!asdf", "Filter", "CommentFilter"], |
117 ["asdf", "Filter", "ActiveFilter", "RegExpFilter", "BlockingFilter"], | 117 ["asdf", "Filter", "ActiveFilter", "RegExpFilter", "BlockingFilter"], |
118 ["@@asdf", "Filter", "ActiveFilter", "RegExpFilter", "WhitelistFilter"], | 118 ["@@asdf", "Filter", "ActiveFilter", "RegExpFilter", "WhitelistFilter"], |
119 ["##asdf", "Filter", "ActiveFilter", "ElemHideBase", "ElemHideFilter"], | 119 ["##asdf", "Filter", "ActiveFilter", "ElemHideBase", "ElemHideFilter"], |
120 ["#@#asdf", "Filter", "ActiveFilter", "ElemHideBase", "ElemHideException"], | 120 ["#@#asdf", "Filter", "ActiveFilter", "ElemHideBase", "ElemHideException"], |
121 ["example.com##[-abp-properties='something']", "Filter", "ActiveFilter", "El
emHideBase", "CSSPropertyFilter"], | 121 ["example.com##[-abp-properties='something']", "Filter", "ActiveFilter", "El
emHideBase", "ElemHideEmulationFilter"], |
122 ]; | 122 ]; |
123 | 123 |
124 for (let list of tests) | 124 for (let list of tests) |
125 { | 125 { |
126 let filter = Filter.fromText(list.shift()); | 126 let filter = Filter.fromText(list.shift()); |
127 for (let cls of list) | 127 for (let cls of list) |
128 { | 128 { |
129 test.ok(filter instanceof eval(cls), | 129 test.ok(filter instanceof eval(cls), |
130 "Filter " + filter.text + " is an instance of " + cls); | 130 "Filter " + filter.text + " is an instance of " + cls); |
131 } | 131 } |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 filter.delete(); | 253 filter.delete(); |
254 | 254 |
255 test.done(); | 255 test.done(); |
256 }; | 256 }; |
257 | 257 |
258 exports.testInvalidReasons = function(test) | 258 exports.testInvalidReasons = function(test) |
259 { | 259 { |
260 let tests = [ | 260 let tests = [ |
261 ["/??/", "filter_invalid_regexp"], | 261 ["/??/", "filter_invalid_regexp"], |
262 ["asd$foobar", "filter_unknown_option"], | 262 ["asd$foobar", "filter_unknown_option"], |
263 ["~foo.com##[-abp-properties='abc']", "filter_cssproperty_nodomain"], | 263 ["~foo.com##[-abp-properties='abc']", "filter_elemhideemulation_nodomain"], |
264 ]; | 264 ]; |
265 | 265 |
266 for (let [text, reason] of tests) | 266 for (let [text, reason] of tests) |
267 { | 267 { |
268 let filter = Filter.fromText(text); | 268 let filter = Filter.fromText(text); |
269 test.equals(filter.reason, reason, "Reason why filter " + text + " is invali
d"); | 269 test.equals(filter.reason, reason, "Reason why filter " + text + " is invali
d"); |
270 filter.delete(); | 270 filter.delete(); |
271 } | 271 } |
272 | 272 |
273 test.done(); | 273 test.done(); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 filter.delete(); | 348 filter.delete(); |
349 } | 349 } |
350 | 350 |
351 let tests = [ | 351 let tests = [ |
352 ["##foobar", "foobar", ""], | 352 ["##foobar", "foobar", ""], |
353 ["~example.com##foobar", "foobar", ""], | 353 ["~example.com##foobar", "foobar", ""], |
354 ["example.com##body > div:first-child", "body > div:first-child", "example.c
om"], | 354 ["example.com##body > div:first-child", "body > div:first-child", "example.c
om"], |
355 ["xYz,~example.com##foobar:not(whatever)", "foobar:not(whatever)","xyz"], | 355 ["xYz,~example.com##foobar:not(whatever)", "foobar:not(whatever)","xyz"], |
356 ["~xyz,com,~abc.com,example.info##foobar", "foobar", "com,example.info"], | 356 ["~xyz,com,~abc.com,example.info##foobar", "foobar", "com,example.info"], |
357 ["foo,bar,bas,bam##foobar", "foobar", "foo,bar,bas,bam"], | 357 ["foo,bar,bas,bam##foobar", "foobar", "foo,bar,bas,bam"], |
| 358 ["foo.com##x[-abp-properties='abc']y", "x[-abp-properties='abc']y", "foo.com
"], |
358 | 359 |
359 // Good idea to test this? Maybe consider behavior undefined in this case. | 360 // Good idea to test this? Maybe consider behavior undefined in this case. |
360 ["foo,bar,bas,~bar##foobar", "foobar", "foo,bas"], | 361 ["foo,bar,bas,~bar##foobar", "foobar", "foo,bas"], |
361 ]; | 362 ]; |
362 | 363 |
363 for (let [text, selector, selectorDomain] of tests) | 364 for (let [text, selector, selectorDomain] of tests) |
364 { | 365 { |
365 doTest(text, selector, selectorDomain); | 366 doTest(text, selector, selectorDomain); |
366 doTest(text.replace("##", "#@#"), selector, selectorDomain); | 367 doTest(text.replace("##", "#@#"), selector, selectorDomain); |
367 } | 368 } |
368 | 369 |
369 test.done(); | 370 test.done(); |
370 }; | 371 }; |
371 | |
372 exports.testCSSRules = function(test) | |
373 { | |
374 let tests = [ | |
375 ["foo.com##[-abp-properties='abc']", "abc", "", ""], | |
376 ["foo.com##[-abp-properties='a\"bc']", "a\\\"bc", "", ""], | |
377 ["foo.com##[-abp-properties=\"abc\"]", "abc", "", ""], | |
378 ["foo.com##[-abp-properties=\"a'bc\"]", "a\\'bc", "", ""], | |
379 ["foo.com##aaa [-abp-properties='abc'] bbb", "abc", "aaa ", " bbb"], | |
380 ["foo.com##[-abp-properties='|background-image: url(data:*)']", "^background
\\-image\\:\\ url\\(data\\:.*\\)", "", ""], | |
381 ]; | |
382 | |
383 for (let [text, regexp, prefix, suffix] of tests) | |
384 { | |
385 let filter = Filter.fromText(text); | |
386 test.equal(filter.regexpString, regexp, "Regular expression of " + text); | |
387 test.equal(filter.selectorPrefix, prefix, "Selector prefix of " + text); | |
388 test.equal(filter.selectorSuffix, suffix, "Selector suffix of " + text); | |
389 filter.delete(); | |
390 } | |
391 | |
392 test.done(); | |
393 }; | |
OLD | NEW |