| 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) => |
|
Manish Jethani
2018/09/17 09:28:43
Need to make a copy now because the return value o
|
| { |
| return index == 0 || selector != sortedSelectors[index - 1]; |
| }); |
| } |
| function testResult(test, domain, expectedSelectors, specificOnly) |
| { |
| let normalizedExpectedSelectors = normalizeSelectors(expectedSelectors); |
| @@ -268,8 +268,111 @@ |
| 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) |
|
Manish Jethani
2018/09/17 09:28:43
Read this first.
|
| +{ |
| + // 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")); |
| + |
| + // Since the exception does not apply to any filters yet, the objects |
| + // returned for foo.example.com and bar.example.com are one and the same. |
| + test.equal(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")); |
| + |
| + test.equal(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")); |
| + 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(); |
| +}; |