| Index: test/elemHide.js |
| =================================================================== |
| new file mode 100644 |
| --- /dev/null |
| +++ b/test/elemHide.js |
| @@ -0,0 +1,279 @@ |
| +/* |
| + * This file is part of Adblock Plus <https://adblockplus.org/>, |
| + * Copyright (C) 2006-present eyeo GmbH |
| + * |
| + * Adblock Plus is free software: you can redistribute it and/or modify |
| + * it under the terms of the GNU General Public License version 3 as |
| + * published by the Free Software Foundation. |
| + * |
| + * Adblock Plus is distributed in the hope that it will be useful, |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| + * GNU General Public License for more details. |
| + * |
| + * You should have received a copy of the GNU General Public License |
| + * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| + */ |
| + |
| +"use strict"; |
| + |
| +const {createSandbox} = require("./_common"); |
| + |
| +let ElemHide = null; |
| +let Filter = null; |
| + |
| +exports.setUp = function(callback) |
| +{ |
| + let sandboxedRequire = createSandbox(); |
| + ( |
| + {ElemHide} = sandboxedRequire("../lib/elemHide"), |
| + {Filter} = sandboxedRequire("../lib/filterClasses") |
| + ); |
| + |
| + callback(); |
| +}; |
| + |
| +function normalizeSelectors(selectorList) |
| +{ |
| + let selectors; |
| + |
| + if (Array.isArray(selectorList)) |
| + selectors = selectorList; |
| + else |
| + { |
| + selectors = []; |
| + for (let i = 0; i < selectorList.selectorCount; i++) |
| + selectors.push(selectorList.selectorAt(i)); |
| + } |
| + |
| + // getSelectorsForDomain is currently allowed to return duplicate selectors |
| + // for performance reasons, so we need to remove duplicates here. |
| + return selectors.sort().filter((selector, index, sortedSelectors) => |
| + { |
| + return index == 0 || selector != sortedSelectors[index - 1]; |
| + }); |
| +} |
| + |
| +function testResult(test, elemHide, domain, expectedSelectors, criteria) |
| +{ |
| + let normalizedExpectedSelectors = normalizeSelectors(expectedSelectors); |
| + |
| + test.deepEqual( |
| + normalizeSelectors(elemHide.getSelectorsForDomain(domain, criteria)), |
| + normalizedExpectedSelectors |
| + ); |
| +} |
| + |
| +exports.testGetSelectorsForDomain = function(test) |
| +{ |
| + let elemHide = ElemHide.create(); |
| + |
| + let addFilter = filterText => |
| + { |
| + let filter = Filter.fromText(filterText); |
| + elemHide.add(filter); |
| + filter.delete(); |
| + }; |
| + let removeFilter = filterText => |
| + { |
| + let filter = Filter.fromText(filterText); |
| + elemHide.remove(filter); |
| + filter.delete(); |
| + }; |
| + |
| + testResult(test, elemHide, "", []); |
| + |
| + addFilter("~foo.example.com,example.com##foo"); |
|
sergei
2018/01/25 14:52:41
I would like to restructure this test because at s
hub
2018/01/25 16:55:10
it has been refactored to use withNAD() already, w
|
| + testResult(test, elemHide, "barfoo.example.com", ["foo"]); |
| + testResult(test, elemHide, "bar.foo.example.com", []); |
| + testResult(test, elemHide, "foo.example.com", []); |
| + testResult(test, elemHide, "example.com", ["foo"]); |
| + testResult(test, elemHide, "com", []); |
| + testResult(test, elemHide, "", []); |
| + |
| + addFilter("foo.example.com##turnip"); |
| + testResult(test, elemHide, "foo.example.com", ["turnip"]); |
| + testResult(test, elemHide, "example.com", ["foo"]); |
| + testResult(test, elemHide, "com", []); |
| + testResult(test, elemHide, "", []); |
| + |
| + addFilter("example.com#@#foo"); |
| + testResult(test, elemHide, "foo.example.com", ["turnip"]); |
| + testResult(test, elemHide, "example.com", []); |
| + testResult(test, elemHide, "com", []); |
| + testResult(test, elemHide, "", []); |
| + |
| + addFilter("com##bar"); |
| + testResult(test, elemHide, "foo.example.com", ["turnip", "bar"]); |
| + testResult(test, elemHide, "example.com", ["bar"]); |
| + testResult(test, elemHide, "com", ["bar"]); |
| + testResult(test, elemHide, "", []); |
| + |
| + addFilter("example.com#@#bar"); |
| + testResult(test, elemHide, "foo.example.com", ["turnip"]); |
| + testResult(test, elemHide, "example.com", []); |
| + testResult(test, elemHide, "com", ["bar"]); |
| + testResult(test, elemHide, "", []); |
| + |
| + removeFilter("example.com#@#foo"); |
| + testResult(test, elemHide, "foo.example.com", ["turnip"]); |
| + testResult(test, elemHide, "example.com", ["foo"]); |
| + testResult(test, elemHide, "com", ["bar"]); |
| + testResult(test, elemHide, "", []); |
| + |
| + removeFilter("example.com#@#bar"); |
| + testResult(test, elemHide, "foo.example.com", ["turnip", "bar"]); |
| + testResult(test, elemHide, "example.com", ["foo", "bar"]); |
| + testResult(test, elemHide, "com", ["bar"]); |
| + testResult(test, elemHide, "", []); |
| + |
| + addFilter("##generic"); |
| + testResult(test, elemHide, "foo.example.com", ["turnip", "bar", "generic"]); |
| + testResult(test, elemHide, "example.com", ["foo", "bar", "generic"]); |
| + testResult(test, elemHide, "com", ["bar", "generic"]); |
| + testResult(test, elemHide, "", ["generic"]); |
| + testResult(test, elemHide, "foo.example.com", ["turnip", "bar"], ElemHide.SPECIFIC_ONLY); |
| + testResult(test, elemHide, "example.com", ["foo", "bar"], ElemHide.SPECIFIC_ONLY); |
| + testResult(test, elemHide, "com", ["bar"], ElemHide.SPECIFIC_ONLY); |
| + testResult(test, elemHide, "", [], ElemHide.SPECIFIC_ONLY); |
| + removeFilter("##generic"); |
| + |
| + addFilter("~adblockplus.org##example"); |
| + testResult(test, elemHide, "adblockplus.org", []); |
| + testResult(test, elemHide, "", ["example"]); |
| + testResult(test, elemHide, "foo.example.com", ["turnip", "bar", "example"]); |
| + testResult(test, elemHide, "foo.example.com", ["turnip", "bar"], ElemHide.SPECIFIC_ONLY); |
| + removeFilter("~adblockplus.org##example"); |
| + |
| + removeFilter("~foo.example.com,example.com##foo"); |
| + testResult(test, elemHide, "foo.example.com", ["turnip", "bar"]); |
| + testResult(test, elemHide, "example.com", ["bar"]); |
| + testResult(test, elemHide, "com", ["bar"]); |
| + testResult(test, elemHide, "", []); |
| + |
| + removeFilter("com##bar"); |
| + testResult(test, elemHide, "foo.example.com", ["turnip"]); |
| + testResult(test, elemHide, "example.com", []); |
| + testResult(test, elemHide, "com", []); |
| + testResult(test, elemHide, "", []); |
| + |
| + removeFilter("foo.example.com##turnip"); |
| + testResult(test, elemHide, "foo.example.com", []); |
| + testResult(test, elemHide, "example.com", []); |
| + testResult(test, elemHide, "com", []); |
| + testResult(test, elemHide, "", []); |
| + |
| + addFilter("example.com##dupe"); |
| + addFilter("example.com##dupe"); |
| + testResult(test, elemHide, "example.com", ["dupe"]); |
| + removeFilter("example.com##dupe"); |
| + testResult(test, elemHide, "example.com", []); |
| + removeFilter("example.com##dupe"); |
| + |
| + addFilter("~foo.example.com,example.com##foo"); |
| + |
| + addFilter("##foo"); |
| + testResult(test, elemHide, "foo.example.com", ["foo"]); |
| + testResult(test, elemHide, "example.com", ["foo"]); |
| + testResult(test, elemHide, "com", ["foo"]); |
| + testResult(test, elemHide, "", ["foo"]); |
| + removeFilter("##foo"); |
| + |
| + addFilter("example.org##foo"); |
| + testResult(test, elemHide, "foo.example.com", []); |
| + testResult(test, elemHide, "example.com", ["foo"]); |
| + testResult(test, elemHide, "com", []); |
| + testResult(test, elemHide, "", []); |
| + removeFilter("example.org##foo"); |
| + |
| + addFilter("~example.com##foo"); |
| + testResult(test, elemHide, "foo.example.com", []); |
| + testResult(test, elemHide, "example.com", ["foo"]); |
| + testResult(test, elemHide, "com", ["foo"]); |
| + testResult(test, elemHide, "", ["foo"]); |
| + removeFilter("~example.com##foo"); |
| + |
| + removeFilter("~foo.example.com,example.com##foo"); |
| + |
| + // Test criteria |
| + addFilter("##hello"); |
| + addFilter("~example.com##world"); |
| + addFilter("foo.com##specific"); |
| + testResult(test, elemHide, "foo.com", ["specific"], ElemHide.SPECIFIC_ONLY); |
| + testResult(test, elemHide, "foo.com", ["specific", "world"], ElemHide.NO_UNCONDITIONAL); |
| + testResult(test, elemHide, "foo.com", ["hello", "specific", "world"], ElemHide.ALL_MATCHING); |
| + testResult(test, elemHide, "foo.com", ["hello", "specific", "world"]); |
| + removeFilter("foo.com##specific"); |
| + removeFilter("~example.com##world"); |
| + removeFilter("##hello"); |
| + testResult(test, elemHide, "foo.com", []); |
| + |
| + addFilter("##hello"); |
| + testResult(test, elemHide, "foo.com", [], ElemHide.SPECIFIC_ONLY); |
| + testResult(test, elemHide, "foo.com", [], ElemHide.NO_UNCONDITIONAL); |
| + testResult(test, elemHide, "foo.com", ["hello"], ElemHide.ALL_MATCHING); |
| + testResult(test, elemHide, "foo.com", ["hello"]); |
| + testResult(test, elemHide, "bar.com", [], ElemHide.SPECIFIC_ONLY); |
| + testResult(test, elemHide, "bar.com", [], ElemHide.NO_UNCONDITIONAL); |
| + testResult(test, elemHide, "bar.com", ["hello"], ElemHide.ALL_MATCHING); |
| + testResult(test, elemHide, "bar.com", ["hello"]); |
| + addFilter("foo.com#@#hello"); |
| + testResult(test, elemHide, "foo.com", [], ElemHide.SPECIFIC_ONLY); |
| + testResult(test, elemHide, "foo.com", [], ElemHide.NO_UNCONDITIONAL); |
| + testResult(test, elemHide, "foo.com", [], ElemHide.ALL_MATCHING); |
| + testResult(test, elemHide, "foo.com", []); |
| + testResult(test, elemHide, "bar.com", [], ElemHide.SPECIFIC_ONLY); |
| + testResult(test, elemHide, "bar.com", ["hello"], ElemHide.NO_UNCONDITIONAL); |
| + testResult(test, elemHide, "bar.com", ["hello"], ElemHide.ALL_MATCHING); |
| + testResult(test, elemHide, "bar.com", ["hello"]); |
| + removeFilter("foo.com#@#hello"); |
| + testResult(test, elemHide, "foo.com", [], ElemHide.SPECIFIC_ONLY); |
| + // Note: We don't take care to track conditional selectors which became |
| + // unconditional when a filter was removed. This was too expensive. |
| + // testResult(test, elemHide, "foo.com", [], ElemHide.NO_UNCONDITIONAL); |
| + testResult(test, elemHide, "foo.com", ["hello"], ElemHide.ALL_MATCHING); |
| + testResult(test, elemHide, "foo.com", ["hello"]); |
| + testResult(test, elemHide, "bar.com", [], ElemHide.SPECIFIC_ONLY); |
| + testResult(test, elemHide, "bar.com", ["hello"], ElemHide.NO_UNCONDITIONAL); |
| + testResult(test, elemHide, "bar.com", ["hello"], ElemHide.ALL_MATCHING); |
| + testResult(test, elemHide, "bar.com", ["hello"]); |
| + removeFilter("##hello"); |
| + testResult(test, elemHide, "foo.com", []); |
| + testResult(test, elemHide, "bar.com", []); |
| + |
| + addFilter("##hello"); |
| + addFilter("foo.com##hello"); |
| + testResult(test, elemHide, "foo.com", ["hello"]); |
| + removeFilter("foo.com##hello"); |
| + testResult(test, elemHide, "foo.com", ["hello"]); |
| + removeFilter("##hello"); |
| + testResult(test, elemHide, "foo.com", []); |
| + |
| + addFilter("##hello"); |
| + addFilter("foo.com##hello"); |
| + testResult(test, elemHide, "foo.com", ["hello"]); |
| + removeFilter("##hello"); |
| + testResult(test, elemHide, "foo.com", ["hello"]); |
| + removeFilter("foo.com##hello"); |
| + testResult(test, elemHide, "foo.com", []); |
| + |
| + elemHide.delete(); |
| + test.done(); |
| +}; |
| + |
| +exports.testZeroFilterKey = function(test) |
|
sergei
2018/01/25 14:52:41
Could you please rename the test, there is no key,
hub
2018/01/25 16:55:10
Done.
|
| +{ |
| + let elemHide = ElemHide.create(); |
| + |
| + let filter1 = Filter.fromText("##test"); |
| + let filter2 = Filter.fromText("foo.com#@#test"); |
| + elemHide.add(filter1); |
| + elemHide.add(filter2); |
| + testResult(test, elemHide, "foo.com", []); |
| + testResult(test, elemHide, "bar.com", ["test"]); |
| + |
| + filter2.delete(); |
| + filter1.delete(); |
| + elemHide.delete(); |
| + test.done(); |
| +}; |