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

Unified Diff: test/elemHide.js

Issue 29882558: Issue 6955 - Avoid making copies of common selector list (Closed) Base URL: https://hg.adblockplus.org/adblockpluscore/
Patch Set: Keep track of exceptions per domain Created Sept. 17, 2018, 12:15 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 | « lib/elemHideExceptions.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/elemHide.js
===================================================================
--- a/test/elemHide.js
+++ b/test/elemHide.js
@@ -39,17 +39,17 @@
callback();
};
function normalizeSelectors(selectors)
{
// 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 selectors.slice().sort().filter((selector, index, sortedSelectors) =>
{
return index == 0 || selector != sortedSelectors[index - 1];
});
}
function testResult(test, domain, expectedSelectors, specificOnly)
{
let normalizedExpectedSelectors = normalizeSelectors(expectedSelectors);
@@ -268,8 +268,121 @@
ElemHide.remove(Filter.fromText("example.com##test"));
test.equal(filtersByDomain.size, 2);
ElemHide.remove(Filter.fromText("example.com,~www.example.com##test"));
test.equal(filtersByDomain.size, 0);
test.done();
};
+
+exports.testCommonSelectorsDedup = function(test)
+{
+ // Here we compare references to verify that the selector lookup function
+ // returns the same object for the common case.
+
+ ElemHide.add(Filter.fromText("##test1"));
+ ElemHide.add(Filter.fromText("##test2"));
+ ElemHide.add(Filter.fromText("##test3"));
+
+ test.equal(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ // Domain-specific filter.
+ ElemHide.add(Filter.fromText("foo.example.com##test4"));
+
+ test.notEqual(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ ElemHide.remove(Filter.fromText("foo.example.com##test4"));
+
+ test.equal(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ // Generic filter with domain excluded.
+ ElemHide.add(Filter.fromText("~foo.example.com##test4"));
+
+ test.notEqual(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ ElemHide.remove(Filter.fromText("~foo.example.com##test4"));
+
+ test.equal(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ // Domain-specific exception.
+ ElemHideExceptions.add(Filter.fromText("foo.example.com#@#test4"));
+
+ // Even though the exception does not apply to any filters yet, the objects
+ // returned for foo.example.com and bar.example.com are not one and the same.
+ test.notEqual(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ ElemHide.add(Filter.fromText("##test4"));
+
+ test.notEqual(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ ElemHide.remove(Filter.fromText("##test4"));
+ ElemHideExceptions.remove(Filter.fromText("foo.example.com#@#test4"));
+
+ test.equal(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ // Generic exception with domain excluded.
+ ElemHideExceptions.add(Filter.fromText("~foo.example.com#@#test4"));
+
+ // Even though the exception does not apply to any filters yet, the objects
+ // returned for foo.example.com and bar.example.com are not one and the same.
+ test.notEqual(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ ElemHide.add(Filter.fromText("##test4"));
+
+ test.notEqual(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ ElemHide.remove(Filter.fromText("##test4"));
+ ElemHideExceptions.remove(Filter.fromText("~foo.example.com#@#test4"));
+
+ test.equal(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ // Generic exception.
+ ElemHide.add(Filter.fromText("##test4"));
+ ElemHideExceptions.add(Filter.fromText("#@#test4"));
+
+ test.equal(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ ElemHideExceptions.add(Filter.fromText("example.com#@#test4"));
+
+ // In this case, even though the exception applies to both domains, we get
+ // different objects.
+ test.notEqual(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+ test.deepEqual(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ ElemHideExceptions.remove(Filter.fromText("example.com#@#test4"));
+
+ // Generic exception with unrelated domain excluded.
Manish Jethani 2018/09/17 12:21:15 This particular test would not pass with Patch Set
+ ElemHideExceptions.add(Filter.fromText("~x4aabd7c0ddcd.com#@#test4"));
+
+ test.equal(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ ElemHideExceptions.remove(Filter.fromText("~x4aabd7c0ddcd.com#@#test4"));
+ ElemHideExceptions.remove(Filter.fromText("#@#test4"));
+ ElemHide.remove(Filter.fromText("##test4"));
+
+ test.equal(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ ElemHide.remove(Filter.fromText("##test1"));
+ ElemHide.remove(Filter.fromText("##test2"));
+ ElemHide.remove(Filter.fromText("##test3"));
+
+ test.equal(ElemHide.getSelectorsForDomain("foo.example.com"),
+ ElemHide.getSelectorsForDomain("bar.example.com"));
+
+ test.done();
+};
« no previous file with comments | « lib/elemHideExceptions.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld