| 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-present eyeo GmbH | 3 * Copyright (C) 2006-present 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 const assert = require("assert"); |
| 20 const {createSandbox} = require("./_common"); | 21 const {createSandbox} = require("./_common"); |
| 21 | 22 |
| 22 let Filter = null; | 23 let Filter = null; |
| 23 | 24 |
| 24 exports.setUp = function(callback) | 25 describe("Domain Restrictions", () => |
| 25 { | 26 { |
| 26 let sandboxedRequire = createSandbox(); | 27 beforeEach(() => |
| 27 ( | 28 { |
| 28 {Filter} = sandboxedRequire("../lib/filterClasses") | 29 let sandboxedRequire = createSandbox(); |
| 29 ); | 30 ( |
| 31 {Filter} = sandboxedRequire("../lib/filterClasses") |
| 32 ); |
| 33 }); |
| 30 | 34 |
| 31 callback(); | 35 function testActive(text, domain, expectedActive, expectedOnlyDomain) |
| 32 }; | 36 { |
| 37 let filter = Filter.fromText(text); |
| 38 assert.equal(filter.isActiveOnDomain(domain), expectedActive, |
| 39 text + " active on " + domain); |
| 40 assert.equal(filter.isActiveOnlyOnDomain(domain), expectedOnlyDomain, |
| 41 text + " only active on " + domain); |
| 42 } |
| 33 | 43 |
| 34 function testActive(test, text, domain, expectedActive, expectedOnlyDomain) | 44 describe("Unrestricted", () => |
| 35 { | 45 { |
| 36 let filter = Filter.fromText(text); | 46 it("Blocking Filters", () => |
| 37 test.equal(filter.isActiveOnDomain(domain), expectedActive, | 47 { |
| 38 text + " active on " + domain); | 48 testActive("foo", null, true, false); |
| 39 test.equal(filter.isActiveOnlyOnDomain(domain), expectedOnlyDomain, | 49 testActive("foo", "com", true, false); |
| 40 text + " only active on " + domain); | 50 testActive("foo", "example.com", true, false); |
| 41 } | 51 testActive("foo", "example.com.", true, false); |
| 52 testActive("foo", "foo.example.com", true, false); |
| 53 testActive("foo", "mple.com", true, false); |
| 54 }); |
| 42 | 55 |
| 43 exports.testUnrestrictedBlockingFilters = function(test) | 56 it("Hiding Rules", () => |
| 44 { | 57 { |
| 45 testActive(test, "foo", null, true, false); | 58 testActive("##foo", null, true, false); |
| 46 testActive(test, "foo", "com", true, false); | 59 testActive("##foo", "com", true, false); |
| 47 testActive(test, "foo", "example.com", true, false); | 60 testActive("##foo", "example.com", true, false); |
| 48 testActive(test, "foo", "example.com.", true, false); | 61 testActive("##foo", "example.com.", true, false); |
| 49 testActive(test, "foo", "foo.example.com", true, false); | 62 testActive("##foo", "foo.example.com", true, false); |
| 50 testActive(test, "foo", "mple.com", true, false); | 63 testActive("##foo", "mple.com", true, false); |
| 64 }); |
| 65 }); |
| 51 | 66 |
| 52 test.done(); | 67 describe("Domain Restricted", () => |
| 53 }; | 68 { |
| 69 it("Blocking Filters", () => |
| 70 { |
| 71 testActive("foo$domain=example.com", null, false, false); |
| 72 testActive("foo$domain=example.com", "com", false, true); |
| 73 testActive("foo$domain=example.com", "example.com", true, true); |
| 74 testActive("foo$domain=example.com", "example.com.", true, true); |
| 75 testActive("foo$domain=example.com.", "example.com", false, false); |
| 76 testActive("foo$domain=example.com.", "example.com.", false, false); |
| 77 testActive("foo$domain=example.com", "foo.example.com", true, false); |
| 78 testActive("foo$domain=example.com", "mple.com", false, false); |
| 79 }); |
| 54 | 80 |
| 55 exports.testUnrestrictedHidingRules = function(test) | 81 it("Hiding Rules", () => |
| 56 { | 82 { |
| 57 testActive(test, "##foo", null, true, false); | 83 testActive("example.com##foo", null, false, false); |
| 58 testActive(test, "##foo", "com", true, false); | 84 testActive("example.com##foo", "com", false, true); |
| 59 testActive(test, "##foo", "example.com", true, false); | 85 testActive("example.com##foo", "example.com", true, true); |
| 60 testActive(test, "##foo", "example.com.", true, false); | 86 testActive("example.com##foo", "example.com.", true, true); |
| 61 testActive(test, "##foo", "foo.example.com", true, false); | 87 testActive("example.com.##foo", "example.com", false, false); |
| 62 testActive(test, "##foo", "mple.com", true, false); | 88 testActive("example.com.##foo", "example.com.", false, false); |
| 89 testActive("example.com##foo", "foo.example.com", true, false); |
| 90 testActive("example.com##foo", "mple.com", false, false); |
| 91 }); |
| 92 }); |
| 63 | 93 |
| 64 test.done(); | 94 describe("Restricted to Domain and its Subdomain", () => |
| 65 }; | 95 { |
| 96 it("Blocking Filters", () => |
| 97 { |
| 98 testActive("foo$domain=example.com|foo.example.com", null, false, false); |
| 99 testActive("foo$domain=example.com|foo.example.com", "com", false, true); |
| 100 testActive("foo$domain=example.com|foo.example.com", "example.com", true,
true); |
| 101 testActive("foo$domain=example.com|foo.example.com", "example.com.", true,
true); |
| 102 testActive("foo$domain=example.com|foo.example.com", "foo.example.com", tr
ue, false); |
| 103 testActive("foo$domain=example.com|foo.example.com", "mple.com", false, fa
lse); |
| 104 }); |
| 66 | 105 |
| 67 exports.testDomainRestrictedBlockingFilters = function(test) | 106 it("Hiding Rules", () => |
| 68 { | 107 { |
| 69 testActive(test, "foo$domain=example.com", null, false, false); | 108 testActive("example.com,foo.example.com##foo", null, false, false); |
| 70 testActive(test, "foo$domain=example.com", "com", false, true); | 109 testActive("example.com,foo.example.com##foo", "com", false, true); |
| 71 testActive(test, "foo$domain=example.com", "example.com", true, true); | 110 testActive("example.com,foo.example.com##foo", "example.com", true, true); |
| 72 testActive(test, "foo$domain=example.com", "example.com.", true, true); | 111 testActive("example.com,foo.example.com##foo", "example.com.", true, true)
; |
| 73 testActive(test, "foo$domain=example.com.", "example.com", false, false); | 112 testActive("example.com,foo.example.com##foo", "foo.example.com", true, fa
lse); |
| 74 testActive(test, "foo$domain=example.com.", "example.com.", false, false); | 113 testActive("example.com,foo.example.com##foo", "mple.com", false, false); |
| 75 testActive(test, "foo$domain=example.com", "foo.example.com", true, false); | 114 }); |
| 76 testActive(test, "foo$domain=example.com", "mple.com", false, false); | 115 }); |
| 77 | 116 |
| 78 test.done(); | 117 describe("With Exception For a Subdomain", () => |
| 79 }; | 118 { |
| 119 it("Blocking Filters", () => |
| 120 { |
| 121 testActive("foo$domain=~foo.example.com", null, true, false); |
| 122 testActive("foo$domain=~foo.example.com", "com", true, false); |
| 123 testActive("foo$domain=~foo.example.com", "example.com", true, false); |
| 124 testActive("foo$domain=~foo.example.com", "example.com.", true, false); |
| 125 testActive("foo$domain=~foo.example.com", "foo.example.com", false, false)
; |
| 126 testActive("foo$domain=~foo.example.com", "mple.com", true, false); |
| 127 }); |
| 80 | 128 |
| 81 exports.testDomainRestrictedHidingRules = function(test) | 129 it("Hiding Rules", () => |
| 82 { | 130 { |
| 83 testActive(test, "example.com##foo", null, false, false); | 131 testActive("~foo.example.com##foo", null, true, false); |
| 84 testActive(test, "example.com##foo", "com", false, true); | 132 testActive("~foo.example.com##foo", "com", true, false); |
| 85 testActive(test, "example.com##foo", "example.com", true, true); | 133 testActive("~foo.example.com##foo", "example.com", true, false); |
| 86 testActive(test, "example.com##foo", "example.com.", true, true); | 134 testActive("~foo.example.com##foo", "example.com.", true, false); |
| 87 testActive(test, "example.com.##foo", "example.com", false, false); | 135 testActive("~foo.example.com##foo", "foo.example.com", false, false); |
| 88 testActive(test, "example.com.##foo", "example.com.", false, false); | 136 testActive("~foo.example.com##foo", "mple.com", true, false); |
| 89 testActive(test, "example.com##foo", "foo.example.com", true, false); | 137 }); |
| 90 testActive(test, "example.com##foo", "mple.com", false, false); | 138 }); |
| 91 | 139 |
| 92 test.done(); | 140 describe("For Domain but not its Subdomain", () => |
| 93 }; | 141 { |
| 142 it("Blocking Filters", () => |
| 143 { |
| 144 testActive("foo$domain=example.com|~foo.example.com", null, false, false); |
| 145 testActive("foo$domain=example.com|~foo.example.com", "com", false, true); |
| 146 testActive("foo$domain=example.com|~foo.example.com", "example.com", true,
true); |
| 147 testActive("foo$domain=example.com|~foo.example.com", "example.com.", true
, true); |
| 148 testActive("foo$domain=example.com|~foo.example.com", "foo.example.com", f
alse, false); |
| 149 testActive("foo$domain=example.com|~foo.example.com", "mple.com", false, f
alse); |
| 150 }); |
| 94 | 151 |
| 95 exports.testBlockingFiltersRestrictedToDomainAndItsSubdomain = function(test) | 152 it("Hiding Rules", () => |
| 96 { | 153 { |
| 97 testActive(test, "foo$domain=example.com|foo.example.com", null, false, false)
; | 154 testActive("example.com,~foo.example.com##foo", null, false, false); |
| 98 testActive(test, "foo$domain=example.com|foo.example.com", "com", false, true)
; | 155 testActive("example.com,~foo.example.com##foo", "com", false, true); |
| 99 testActive(test, "foo$domain=example.com|foo.example.com", "example.com", true
, true); | 156 testActive("example.com,~foo.example.com##foo", "example.com", true, true)
; |
| 100 testActive(test, "foo$domain=example.com|foo.example.com", "example.com.", tru
e, true); | 157 testActive("example.com,~foo.example.com##foo", "example.com.", true, true
); |
| 101 testActive(test, "foo$domain=example.com|foo.example.com", "foo.example.com",
true, false); | 158 testActive("example.com,~foo.example.com##foo", "foo.example.com", false,
false); |
| 102 testActive(test, "foo$domain=example.com|foo.example.com", "mple.com", false,
false); | 159 testActive("example.com,~foo.example.com##foo", "mple.com", false, false); |
| 160 }); |
| 161 }); |
| 103 | 162 |
| 104 test.done(); | 163 describe("For Domain but not is TLD", () => |
| 105 }; | 164 { |
| 165 it("Blocking Filters", () => |
| 166 { |
| 167 testActive("foo$domain=example.com|~com", null, false, false); |
| 168 testActive("foo$domain=example.com|~com", "com", false, true); |
| 169 testActive("foo$domain=example.com|~com", "example.com", true, true); |
| 170 testActive("foo$domain=example.com|~com", "example.com.", true, true); |
| 171 testActive("foo$domain=example.com|~com", "foo.example.com", true, false); |
| 172 testActive("foo$domain=example.com|~com", "mple.com", false, false); |
| 173 }); |
| 106 | 174 |
| 107 exports.testHidingRulesRestrictedToDomainAndItsSubdomain = function(test) | 175 it("Hiding Rules", () => |
| 108 { | 176 { |
| 109 testActive(test, "example.com,foo.example.com##foo", null, false, false); | 177 testActive("example.com,~com##foo", null, false, false); |
| 110 testActive(test, "example.com,foo.example.com##foo", "com", false, true); | 178 testActive("example.com,~com##foo", "com", false, true); |
| 111 testActive(test, "example.com,foo.example.com##foo", "example.com", true, true
); | 179 testActive("example.com,~com##foo", "example.com", true, true); |
| 112 testActive(test, "example.com,foo.example.com##foo", "example.com.", true, tru
e); | 180 testActive("example.com,~com##foo", "example.com.", true, true); |
| 113 testActive(test, "example.com,foo.example.com##foo", "foo.example.com", true,
false); | 181 testActive("example.com,~com##foo", "foo.example.com", true, false); |
| 114 testActive(test, "example.com,foo.example.com##foo", "mple.com", false, false)
; | 182 testActive("example.com,~com##foo", "mple.com", false, false); |
| 183 }); |
| 184 }); |
| 115 | 185 |
| 116 test.done(); | 186 describe("Restricted To An Unrelated Domain", () => |
| 117 }; | 187 { |
| 188 it("Blocking Filters", () => |
| 189 { |
| 190 testActive("foo$domain=nnnnnnn.nnn", null, false, false); |
| 191 testActive("foo$domain=nnnnnnn.nnn", "com", false, false); |
| 192 testActive("foo$domain=nnnnnnn.nnn", "example.com", false, false); |
| 193 testActive("foo$domain=nnnnnnn.nnn", "example.com.", false, false); |
| 194 testActive("foo$domain=nnnnnnn.nnn", "foo.example.com", false, false); |
| 195 testActive("foo$domain=nnnnnnn.nnn", "mple.com", false, false); |
| 196 }); |
| 118 | 197 |
| 119 exports.testBlockingFiltersWithExceptionForASubdomain = function(test) | 198 it("Hiding Rules", () => |
| 120 { | 199 { |
| 121 testActive(test, "foo$domain=~foo.example.com", null, true, false); | 200 testActive("nnnnnnn.nnn##foo", null, false, false); |
| 122 testActive(test, "foo$domain=~foo.example.com", "com", true, false); | 201 testActive("nnnnnnn.nnn##foo", "com", false, false); |
| 123 testActive(test, "foo$domain=~foo.example.com", "example.com", true, false); | 202 testActive("nnnnnnn.nnn##foo", "example.com", false, false); |
| 124 testActive(test, "foo$domain=~foo.example.com", "example.com.", true, false); | 203 testActive("nnnnnnn.nnn##foo", "example.com.", false, false); |
| 125 testActive(test, "foo$domain=~foo.example.com", "foo.example.com", false, fals
e); | 204 testActive("nnnnnnn.nnn##foo", "foo.example.com", false, false); |
| 126 testActive(test, "foo$domain=~foo.example.com", "mple.com", true, false); | 205 testActive("nnnnnnn.nnn##foo", "mple.com", false, false); |
| 127 | 206 }); |
| 128 test.done(); | 207 }); |
| 129 }; | 208 }); |
| 130 | |
| 131 exports.testHidingRulesWithExceptionForASubdomain = function(test) | |
| 132 { | |
| 133 testActive(test, "~foo.example.com##foo", null, true, false); | |
| 134 testActive(test, "~foo.example.com##foo", "com", true, false); | |
| 135 testActive(test, "~foo.example.com##foo", "example.com", true, false); | |
| 136 testActive(test, "~foo.example.com##foo", "example.com.", true, false); | |
| 137 testActive(test, "~foo.example.com##foo", "foo.example.com", false, false); | |
| 138 testActive(test, "~foo.example.com##foo", "mple.com", true, false); | |
| 139 | |
| 140 test.done(); | |
| 141 }; | |
| 142 | |
| 143 exports.testBlockingFiltersForDomainButNotItsSubdomain = function(test) | |
| 144 { | |
| 145 testActive(test, "foo$domain=example.com|~foo.example.com", null, false, false
); | |
| 146 testActive(test, "foo$domain=example.com|~foo.example.com", "com", false, true
); | |
| 147 testActive(test, "foo$domain=example.com|~foo.example.com", "example.com", tru
e, true); | |
| 148 testActive(test, "foo$domain=example.com|~foo.example.com", "example.com.", tr
ue, true); | |
| 149 testActive(test, "foo$domain=example.com|~foo.example.com", "foo.example.com",
false, false); | |
| 150 testActive(test, "foo$domain=example.com|~foo.example.com", "mple.com", false,
false); | |
| 151 | |
| 152 test.done(); | |
| 153 }; | |
| 154 | |
| 155 exports.testHidingRulesForDomainButNotItsSubdomain = function(test) | |
| 156 { | |
| 157 testActive(test, "example.com,~foo.example.com##foo", null, false, false); | |
| 158 testActive(test, "example.com,~foo.example.com##foo", "com", false, true); | |
| 159 testActive(test, "example.com,~foo.example.com##foo", "example.com", true, tru
e); | |
| 160 testActive(test, "example.com,~foo.example.com##foo", "example.com.", true, tr
ue); | |
| 161 testActive(test, "example.com,~foo.example.com##foo", "foo.example.com", false
, false); | |
| 162 testActive(test, "example.com,~foo.example.com##foo", "mple.com", false, false
); | |
| 163 | |
| 164 test.done(); | |
| 165 }; | |
| 166 | |
| 167 exports.testBlockingFiltersForDomainButNotItsTLD = function(test) | |
| 168 { | |
| 169 testActive(test, "foo$domain=example.com|~com", null, false, false); | |
| 170 testActive(test, "foo$domain=example.com|~com", "com", false, true); | |
| 171 testActive(test, "foo$domain=example.com|~com", "example.com", true, true); | |
| 172 testActive(test, "foo$domain=example.com|~com", "example.com.", true, true); | |
| 173 testActive(test, "foo$domain=example.com|~com", "foo.example.com", true, false
); | |
| 174 testActive(test, "foo$domain=example.com|~com", "mple.com", false, false); | |
| 175 | |
| 176 test.done(); | |
| 177 }; | |
| 178 | |
| 179 exports.testHidingRulesForDomainButNotItsTLD = function(test) | |
| 180 { | |
| 181 testActive(test, "example.com,~com##foo", null, false, false); | |
| 182 testActive(test, "example.com,~com##foo", "com", false, true); | |
| 183 testActive(test, "example.com,~com##foo", "example.com", true, true); | |
| 184 testActive(test, "example.com,~com##foo", "example.com.", true, true); | |
| 185 testActive(test, "example.com,~com##foo", "foo.example.com", true, false); | |
| 186 testActive(test, "example.com,~com##foo", "mple.com", false, false); | |
| 187 | |
| 188 test.done(); | |
| 189 }; | |
| 190 | |
| 191 exports.testBlockingFiltersRestrictedToAnUnrelatedDomain = function(test) | |
| 192 { | |
| 193 testActive(test, "foo$domain=nnnnnnn.nnn", null, false, false); | |
| 194 testActive(test, "foo$domain=nnnnnnn.nnn", "com", false, false); | |
| 195 testActive(test, "foo$domain=nnnnnnn.nnn", "example.com", false, false); | |
| 196 testActive(test, "foo$domain=nnnnnnn.nnn", "example.com.", false, false); | |
| 197 testActive(test, "foo$domain=nnnnnnn.nnn", "foo.example.com", false, false); | |
| 198 testActive(test, "foo$domain=nnnnnnn.nnn", "mple.com", false, false); | |
| 199 | |
| 200 test.done(); | |
| 201 }; | |
| 202 | |
| 203 exports.testHidingRulesRestrictedToAnUnrelatedDomain = function(test) | |
| 204 { | |
| 205 testActive(test, "nnnnnnn.nnn##foo", null, false, false); | |
| 206 testActive(test, "nnnnnnn.nnn##foo", "com", false, false); | |
| 207 testActive(test, "nnnnnnn.nnn##foo", "example.com", false, false); | |
| 208 testActive(test, "nnnnnnn.nnn##foo", "example.com.", false, false); | |
| 209 testActive(test, "nnnnnnn.nnn##foo", "foo.example.com", false, false); | |
| 210 testActive(test, "nnnnnnn.nnn##foo", "mple.com", false, false); | |
| 211 | |
| 212 test.done(); | |
| 213 }; | |
| OLD | NEW |