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 |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU General Public License | 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/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
16 */ | 16 */ |
17 | 17 |
18 "use strict"; | 18 "use strict"; |
19 | 19 |
20 let {createSandbox} = require("./_common"); | 20 const {createSandbox} = require("./_common"); |
21 | 21 |
22 let Filter = null; | 22 let Filter = null; |
23 let RegExpFilter = null; | 23 let RegExpFilter = null; |
24 let CombinedMatcher = null; | 24 let CombinedMatcher = null; |
25 let defaultMatcher = null; | 25 let defaultMatcher = null; |
26 let Matcher = null; | 26 let Matcher = null; |
27 | 27 |
28 exports.setUp = function(callback) | 28 exports.setUp = function(callback) |
29 { | 29 { |
30 let sandboxedRequire = createSandbox(); | 30 let sandboxedRequire = createSandbox(); |
31 ( | 31 ( |
32 {Filter, RegExpFilter} = sandboxedRequire("../lib/filterClasses"), | 32 {Filter, RegExpFilter} = sandboxedRequire("../lib/filterClasses"), |
33 {CombinedMatcher, defaultMatcher, Matcher} = sandboxedRequire("../lib/matche
r") | 33 {CombinedMatcher, defaultMatcher, Matcher} = sandboxedRequire("../lib/matche
r") |
34 ); | 34 ); |
35 | 35 |
36 callback(); | 36 callback(); |
37 }; | 37 }; |
38 | 38 |
39 function compareKeywords(test, text, expected) | 39 function compareKeywords(test, text, expected) |
40 { | 40 { |
41 for (let filter of [Filter.fromText(text), Filter.fromText("@@" + text)]) | 41 for (let filter of [Filter.fromText(text), Filter.fromText("@@" + text)]) |
42 { | 42 { |
43 let matcher = new Matcher(); | 43 let matcher = new Matcher(); |
44 let result = []; | 44 let result = []; |
45 for (let dummy of expected) | 45 for (let i = 0; i < expected.length; i++) |
46 { | 46 { |
47 let keyword = matcher.findKeyword(filter); | 47 let keyword = matcher.findKeyword(filter); |
48 result.push(keyword); | 48 result.push(keyword); |
49 if (keyword) | 49 if (keyword) |
50 { | 50 { |
51 let dummyFilter = Filter.fromText('^' + keyword + '^'); | 51 let dummyFilter = Filter.fromText("^" + keyword + "^"); |
52 dummyFilter.filterCount = Infinity; | 52 dummyFilter.filterCount = Infinity; |
53 matcher.add(dummyFilter); | 53 matcher.add(dummyFilter); |
54 } | 54 } |
55 } | 55 } |
56 | 56 |
57 test.equal(result.join(", "), expected.join(", "), "Keyword candidates for "
+ filter.text); | 57 test.equal(result.join(", "), expected.join(", "), "Keyword candidates for "
+ filter.text); |
58 } | 58 } |
59 } | 59 } |
60 | 60 |
61 function checkMatch(test, filters, location, contentType, docDomain, thirdParty,
sitekey, specificOnly, expected) | 61 function checkMatch(test, filters, location, contentType, docDomain, thirdParty,
sitekey, specificOnly, expected) |
62 { | 62 { |
63 let matcher = new Matcher(); | 63 let matcher = new Matcher(); |
64 for (let filter of filters) | 64 for (let filter of filters) |
65 matcher.add(Filter.fromText(filter)); | 65 matcher.add(Filter.fromText(filter)); |
66 | 66 |
67 let result = matcher.matchesAny(location, RegExpFilter.typeMap[contentType], d
ocDomain, thirdParty, sitekey, specificOnly); | 67 let result = matcher.matchesAny(location, RegExpFilter.typeMap[contentType], d
ocDomain, thirdParty, sitekey, specificOnly); |
68 if (result) | 68 if (result) |
69 result = result.text; | 69 result = result.text; |
70 | 70 |
71 test.equal(result, expected, "match(" + location + ", " + contentType + ", " +
docDomain + ", " + (thirdParty ? "third-party" : "first-party") + ", " + (sitek
ey || "no-sitekey") + ", " + (specificOnly ? "specificOnly" : "not-specificOnly"
) + ") with:\n" + filters.join("\n")); | 71 test.equal(result, expected, "match(" + location + ", " + contentType + ", " +
docDomain + ", " + (thirdParty ? "third-party" : "first-party") + ", " + (sitek
ey || "no-sitekey") + ", " + (specificOnly ? "specificOnly" : "not-specificOnly"
) + ") with:\n" + filters.join("\n")); |
72 | 72 |
73 let combinedMatcher = new CombinedMatcher(); | 73 let combinedMatcher = new CombinedMatcher(); |
74 for (let i = 0; i < 2; i++) | 74 for (let i = 0; i < 2; i++) |
75 { | 75 { |
76 for (let filter of filters) | 76 for (let filter of filters) |
77 combinedMatcher.add(Filter.fromText(filter)); | 77 combinedMatcher.add(Filter.fromText(filter)); |
78 | 78 |
79 let result = combinedMatcher.matchesAny(location, RegExpFilter.typeMap[conte
ntType], docDomain, thirdParty, sitekey, specificOnly); | 79 result = combinedMatcher.matchesAny(location, RegExpFilter.typeMap[contentTy
pe], docDomain, thirdParty, sitekey, specificOnly); |
80 if (result) | 80 if (result) |
81 result = result.text; | 81 result = result.text; |
82 | 82 |
83 test.equal(result, expected, "combinedMatch(" + location + ", " + contentTyp
e + ", " + docDomain + ", " + (thirdParty ? "third-party" : "first-party") + ",
" + (sitekey || "no-sitekey") + ", " + (specificOnly ? "specificOnly" : "not-spe
cificOnly") + ") with:\n" + filters.join("\n")); | 83 test.equal(result, expected, "combinedMatch(" + location + ", " + contentTyp
e + ", " + docDomain + ", " + (thirdParty ? "third-party" : "first-party") + ",
" + (sitekey || "no-sitekey") + ", " + (specificOnly ? "specificOnly" : "not-spe
cificOnly") + ") with:\n" + filters.join("\n")); |
84 | 84 |
85 // Generic whitelisting rules can match for specificOnly searches, so we | 85 // Generic whitelisting rules can match for specificOnly searches, so we |
86 // can't easily know which rule will match for these whitelisting tests | 86 // can't easily know which rule will match for these whitelisting tests |
87 if (specificOnly) | 87 if (specificOnly) |
88 continue; | 88 continue; |
89 | 89 |
90 // For next run: add whitelisting filters for filters that aren't already | 90 // For next run: add whitelisting filters for filters that aren't already |
91 filters = filters.map((text) => text.substr(0, 2) == "@@" ? text : "@@" + te
xt); | 91 filters = filters.map(text => text.substr(0, 2) == "@@" ? text : "@@" + text
); |
92 if (expected && expected.substr(0, 2) != "@@") | 92 if (expected && expected.substr(0, 2) != "@@") |
93 expected = "@@" + expected; | 93 expected = "@@" + expected; |
94 } | 94 } |
95 } | 95 } |
96 | 96 |
97 function cacheCheck(test, matcher, location, contentType, docDomain, thirdParty,
expected) | 97 function cacheCheck(test, matcher, location, contentType, docDomain, thirdParty,
expected) |
98 { | 98 { |
99 let result = matcher.matchesAny(location, RegExpFilter.typeMap[contentType], d
ocDomain, thirdParty); | 99 let result = matcher.matchesAny(location, RegExpFilter.typeMap[contentType], d
ocDomain, thirdParty); |
100 if (result) | 100 if (result) |
101 result = result.text; | 101 result = result.text; |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 cacheCheck(test, matcher, "http://fed", "IMAGE", null, true, "http://fed$third
-party"); | 239 cacheCheck(test, matcher, "http://fed", "IMAGE", null, true, "http://fed$third
-party"); |
240 cacheCheck(test, matcher, "http://abc_cba", "MEDIA", null, false, "cba$~third-
party,~script"); | 240 cacheCheck(test, matcher, "http://abc_cba", "MEDIA", null, false, "cba$~third-
party,~script"); |
241 cacheCheck(test, matcher, "http://abc_cba", "MEDIA", null, true, "cba$third-pa
rty"); | 241 cacheCheck(test, matcher, "http://abc_cba", "MEDIA", null, true, "cba$third-pa
rty"); |
242 cacheCheck(test, matcher, "http://abc_cba", "SCRIPT", null, false, "abc$script
"); | 242 cacheCheck(test, matcher, "http://abc_cba", "SCRIPT", null, false, "abc$script
"); |
243 cacheCheck(test, matcher, "http://def?http://fed", "MEDIA", null, false, "http
://fed$~third-party,~script"); | 243 cacheCheck(test, matcher, "http://def?http://fed", "MEDIA", null, false, "http
://fed$~third-party,~script"); |
244 cacheCheck(test, matcher, "http://def?http://fed", "MEDIA", null, true, "http:
//fed$third-party"); | 244 cacheCheck(test, matcher, "http://def?http://fed", "MEDIA", null, true, "http:
//fed$third-party"); |
245 cacheCheck(test, matcher, "http://def?http://fed", "SCRIPT", null, false, "htt
p://def$script"); | 245 cacheCheck(test, matcher, "http://def?http://fed", "SCRIPT", null, false, "htt
p://def$script"); |
246 | 246 |
247 test.done(); | 247 test.done(); |
248 }; | 248 }; |
OLD | NEW |