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

Unified Diff: test/elemHide.js

Issue 29342884: Issue 4055 - Test ElemHide.getSelectorsFordomain (Closed)
Patch Set: Properly test and document duplicate selector behaviour Created May 23, 2016, 3:48 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « package.json ('k') | test/stub-modules/io.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/elemHide.js
diff --git a/test/elemHide.js b/test/elemHide.js
new file mode 100644
index 0000000000000000000000000000000000000000..2491967eef71acb1977f324c0ebf5ca29377064f
--- /dev/null
+++ b/test/elemHide.js
@@ -0,0 +1,174 @@
+/*
+ * This file is part of Adblock Plus <https://adblockplus.org/>,
+ * Copyright (C) 2006-2016 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";
+
+GLOBAL.Ci = {};
+GLOBAL.Cu = {
+ import: function()
+ {
+ }
+};
+
+let {ElemHide} = require("elemHide");
+let {Filter} = require("filterClasses");
+
+exports.testGetSelectorsForDomain = function(test)
+{
+ function fromText(f)
+ {
+ return (filterText) => f(Filter.fromText(filterText));
+ }
+ let addFilter = fromText(ElemHide.add);
+ let removeFilter = fromText(ElemHide.remove);
+
+ function normalizeSelectors(selectors)
+ {
+ let lastSelector;
+ return selectors.sort().filter(selector =>
+ {
+ let unique = lastSelector != selector;
+ lastSelector = selector;
+ return unique;
+ });
Wladimir Palant 2016/05/23 17:34:48 How about a simpler filter function? (selector,
kzar 2016/05/23 18:56:26 Cool, didn't realise filter provided the index and
+ }
+ function selectorsEqual(domain, expectedSelectors, specificOnly)
+ {
+ test.deepEqual(
+ normalizeSelectors(ElemHide.getSelectorsForDomain(domain, specificOnly)),
+ normalizeSelectors(expectedSelectors)
+ );
+ }
+
+ selectorsEqual("", []);
+
+ addFilter("~foo.example.com,example.com##foo");
+ selectorsEqual("barfoo.example.com", ["foo"]);
+ selectorsEqual("bar.foo.example.com", []);
+ selectorsEqual("foo.example.com", []);
+ selectorsEqual("example.com", ["foo"]);
+ selectorsEqual("com", []);
+ selectorsEqual("", []);
+
+ addFilter("foo.example.com##turnip");
+ selectorsEqual("foo.example.com", ["turnip"]);
+ selectorsEqual("example.com", ["foo"]);
+ selectorsEqual("com", []);
+ selectorsEqual("", []);
+
+ addFilter("example.com#@#foo");
+ selectorsEqual("foo.example.com", ["turnip"]);
+ selectorsEqual("example.com", []);
+ selectorsEqual("com", []);
+ selectorsEqual("", []);
+
+ addFilter("com##bar");
+ selectorsEqual("foo.example.com", ["turnip", "bar"]);
+ selectorsEqual("example.com", ["bar"]);
+ selectorsEqual("com", ["bar"]);
+ selectorsEqual("", []);
+
+ addFilter("example.com#@#bar");
+ selectorsEqual("foo.example.com", ["turnip"]);
+ selectorsEqual("example.com", []);
+ selectorsEqual("com", ["bar"]);
+ selectorsEqual("", []);
+
+ removeFilter("example.com#@#foo");
+ selectorsEqual("foo.example.com", ["turnip"]);
+ selectorsEqual("example.com", ["foo"]);
+ selectorsEqual("com", ["bar"]);
+ selectorsEqual("", []);
+
+ removeFilter("example.com#@#bar");
+ selectorsEqual("foo.example.com", ["turnip", "bar"]);
+ selectorsEqual("example.com", ["foo", "bar"]);
+ selectorsEqual("com", ["bar"]);
+ selectorsEqual("", []);
+
+ addFilter("##generic");
+ selectorsEqual("foo.example.com", ["turnip", "bar", "generic"]);
+ selectorsEqual("example.com", ["foo", "bar", "generic"]);
+ selectorsEqual("com", ["bar", "generic"]);
+ selectorsEqual("", ["generic"]);
+ selectorsEqual("foo.example.com", ["turnip", "bar"], true);
+ selectorsEqual("example.com", ["foo", "bar"], true);
+ selectorsEqual("com", ["bar"], true);
+ selectorsEqual("", [], true);
+ removeFilter("##generic");
+
+ addFilter("~adblockplus.org##example");
+ selectorsEqual("adblockplus.org", []);
+ selectorsEqual("", ["example"]);
+ selectorsEqual("foo.example.com", ["turnip", "bar", "example"]);
+ selectorsEqual("foo.example.com", ["turnip", "bar"], true);
+ removeFilter("~adblockplus.org##example");
+
+ removeFilter("~foo.example.com,example.com##foo");
+ selectorsEqual("foo.example.com", ["turnip", "bar"]);
+ selectorsEqual("example.com", ["bar"]);
+ selectorsEqual("com", ["bar"]);
+ selectorsEqual("", []);
+
+ removeFilter("com##bar");
+ selectorsEqual("foo.example.com", ["turnip"]);
+ selectorsEqual("example.com", []);
+ selectorsEqual("com", []);
+ selectorsEqual("", []);
+
+ removeFilter("foo.example.com##turnip");
+ selectorsEqual("foo.example.com", []);
+ selectorsEqual("example.com", []);
+ selectorsEqual("com", []);
+ selectorsEqual("", []);
+
+ addFilter("example.com##dupe");
+ addFilter("example.com##dupe");
+ selectorsEqual("example.com", ["dupe"]);
+ removeFilter("example.com##dupe");
+ selectorsEqual("example.com", []);
+ removeFilter("example.com##dupe");
+
+ addFilter("~foo.example.com,example.com##foo");
+
+ // getSelectorsForDomain is currently allowed to return duplicate selectors
+ // for performance reasons. In reality example.com gives ["foo", "foo"] here
+ // but we normalize the selectors, removing duplicates, before performing the
+ // comparison.
Wladimir Palant 2016/05/23 17:34:48 I think that this explanation belongs into normali
kzar 2016/05/23 18:56:26 Done.
+ addFilter("##foo");
+ selectorsEqual("foo.example.com", ["foo"]);
+ selectorsEqual("example.com", ["foo"]);
+ selectorsEqual("com", ["foo"]);
+ selectorsEqual("", ["foo"]);
+ removeFilter("##foo");
+
+ addFilter("example.org##foo");
+ selectorsEqual("foo.example.com", []);
+ selectorsEqual("example.com", ["foo"]);
+ selectorsEqual("com", []);
+ selectorsEqual("", []);
+ removeFilter("example.org##foo");
+
+ addFilter("~example.com##foo");
+ selectorsEqual("foo.example.com", []);
+ selectorsEqual("example.com", ["foo"]);
+ selectorsEqual("com", ["foo"]);
+ selectorsEqual("", ["foo"]);
+ removeFilter("example.org##foo");
+
+ test.done();
+};
« no previous file with comments | « package.json ('k') | test/stub-modules/io.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld