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

Unified Diff: test/filterClasses.js

Issue 29361668: Issue 4394 - Create a filter class for element hiding emulation filters (Closed) Base URL: https://bitbucket.org/fhd/adblockpluscore
Patch Set: Created Nov. 3, 2016, 3:42 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
Index: test/filterClasses.js
===================================================================
--- a/test/filterClasses.js
+++ b/test/filterClasses.js
@@ -24,28 +24,28 @@
let CommentFilter = null;
let ActiveFilter = null;
let RegExpFilter = null;
let BlockingFilter = null;
let WhitelistFilter = null;
let ElemHideBase = null;
let ElemHideFilter = null;
let ElemHideException = null;
-let CSSPropertyFilter = null;
+let ElemHideEmulationFilter = null;
let t = null;
let defaultTypes = null;
exports.setUp = function(callback)
{
let sandboxedRequire = createSandbox();
(
{Filter, InvalidFilter, CommentFilter, ActiveFilter, RegExpFilter,
BlockingFilter, WhitelistFilter, ElemHideBase, ElemHideFilter,
- ElemHideException, CSSPropertyFilter} = sandboxedRequire("../lib/filterClasses")
+ ElemHideException, ElemHideEmulationFilter} = sandboxedRequire("../lib/filterClasses")
kzar 2016/11/04 15:45:56 Nit: Also mind fixing some of these long lines? (N
Felix Dahlke 2016/11/04 16:43:35 See my comment in elemHideEmulation.js.
);
t = RegExpFilter.typeMap;
defaultTypes = 0x7FFFFFFF & ~(t.ELEMHIDE | t.DOCUMENT | t.POPUP |
t.GENERICHIDE | t.GENERICBLOCK);
callback();
};
@@ -99,22 +99,20 @@
}
}
else if (filter instanceof ElemHideBase)
{
if (filter instanceof ElemHideFilter)
result.push("type=elemhide");
else if (filter instanceof ElemHideException)
result.push("type=elemhideexception");
- else if (filter instanceof CSSPropertyFilter)
+ else if (filter instanceof ElemHideEmulationFilter)
{
- result.push("type=cssrule");
- result.push("prefix=" + (filter.selectorPrefix || ""));
- result.push("regexp=" + filter.regexpString);
- result.push("suffix=" + (filter.selectorSuffix || ""));
+ result.push("type=elemhideemulation");
+ result.push("features=" + filter.features);
}
result.push("selectorDomain=" + (filter.selectorDomain || ""));
result.push("selector=" + filter.selector);
}
}
return result;
}
@@ -132,17 +130,17 @@
}
function addProperty(prop, value)
{
if (!(prop in hasProperty))
expected.push(prop + "=" + value);
}
- if (type == "whitelist" || type == "filterlist" || type == "elemhide" || type == "elemhideexception" || type == "cssrule")
+ if (type == "whitelist" || type == "filterlist" || type == "elemhide" || type == "elemhideexception" || type == "elemhideemulation")
{
addProperty("disabled", "false");
addProperty("lastHit", "0");
addProperty("hitCount", "0");
}
if (type == "whitelist" || type == "filterlist")
{
addProperty("contentType", 0x7FFFFFFF & ~(
@@ -154,26 +152,24 @@
addProperty("thirdParty", "null");
addProperty("domains", "");
addProperty("sitekeys", "");
}
if (type == "filterlist")
{
addProperty("collapse", "null");
}
- if (type == "elemhide" || type == "elemhideexception" || type == "cssrule")
+ if (type == "elemhide" || type == "elemhideexception" || type == "elemhideemulation")
{
addProperty("selectorDomain", "");
addProperty("domains", "");
}
- if (type == "cssrule")
+ if (type == "elemhideemulation")
{
- addProperty("regexp", "");
- addProperty("prefix", "");
- addProperty("suffix", "");
+ addProperty("features", "0");
}
}
function compareFilter(test, text, expected, postInit)
{
addDefaults(expected);
let filter = Filter.fromText(text);
@@ -211,17 +207,17 @@
test.equal(typeof CommentFilter, "function", "typeof CommentFilter");
test.equal(typeof ActiveFilter, "function", "typeof ActiveFilter");
test.equal(typeof RegExpFilter, "function", "typeof RegExpFilter");
test.equal(typeof BlockingFilter, "function", "typeof BlockingFilter");
test.equal(typeof WhitelistFilter, "function", "typeof WhitelistFilter");
test.equal(typeof ElemHideBase, "function", "typeof ElemHideBase");
test.equal(typeof ElemHideFilter, "function", "typeof ElemHideFilter");
test.equal(typeof ElemHideException, "function", "typeof ElemHideException");
- test.equal(typeof CSSPropertyFilter, "function", "typeof CSSPropertyFilter");
+ test.equal(typeof ElemHideEmulationFilter, "function", "typeof ElemHideEmulationFilter");
test.done();
};
exports.testComments = function(test)
{
compareFilter(test, "!asdf", ["type=comment", "text=!asdf"]);
compareFilter(test, "!foo#bar", ["type=comment", "text=!foo#bar"]);
@@ -232,26 +228,26 @@
exports.testInvalidFilters = function(test)
{
compareFilter(test, "/??/", ["type=invalid", "text=/??/", "reason=filter_invalid_regexp"]);
compareFilter(test, "asd$foobar", ["type=invalid", "text=asd$foobar", "reason=filter_unknown_option"]);
compareFilter(test, "#dd(asd)(ddd)", ["type=invalid", "text=#dd(asd)(ddd)", "reason=filter_elemhide_duplicate_id"]);
compareFilter(test, "#*", ["type=invalid", "text=#*", "reason=filter_elemhide_nocriteria"]);
- function compareCSSRule(domains)
+ function checkElemHideEmulationFilterInvalid(domains)
{
let filterText = domains + "##[-abp-properties='abc']";
- compareFilter(test, filterText, ["type=invalid", "text=" + filterText, "reason=filter_cssproperty_nodomain"]);
+ compareFilter(test, filterText, ["type=invalid", "text=" + filterText, "reason=filter_elemhideemulation_nodomain"]);
}
- compareCSSRule("");
- compareCSSRule("~foo.com");
- compareCSSRule("~foo.com,~bar.com");
- compareCSSRule("foo");
- compareCSSRule("~foo.com,bar");
+ checkElemHideEmulationFilterInvalid("");
+ checkElemHideEmulationFilterInvalid("~foo.com");
+ checkElemHideEmulationFilterInvalid("~foo.com,~bar.com");
+ checkElemHideEmulationFilterInvalid("foo");
+ checkElemHideEmulationFilterInvalid("~foo.com,bar");
test.done();
};
exports.testFiltersWithState = function(test)
{
compareFilter(test, "blabla", ["type=filterlist", "text=blabla", "regexp=blabla"]);
compareFilter(test, "blabla_default", ["type=filterlist", "text=blabla_default", "regexp=blabla_default"], function(filter)
@@ -346,28 +342,33 @@
compareFilter(test, "foo#@ddd", ["type=elemhideexception", "text=foo#@ddd", "selectorDomain=foo", "selector=ddd", "domains=FOO"]);
compareFilter(test, "foo,bar#@ddd", ["type=elemhideexception", "text=foo,bar#@ddd", "selectorDomain=foo,bar", "selector=ddd", "domains=BAR|FOO"]);
compareFilter(test, "foo,~bar#@ddd", ["type=elemhideexception", "text=foo,~bar#@ddd", "selectorDomain=foo", "selector=ddd", "domains=FOO|~BAR"]);
compareFilter(test, "foo,~baz,bar#@ddd", ["type=elemhideexception", "text=foo,~baz,bar#@ddd", "selectorDomain=foo,bar", "selector=ddd", "domains=BAR|FOO|~BAZ"]);
test.done();
};
-exports.testCSSPropertyFilters = function(test)
+exports.testElemHideEmulationFilters = function(test)
{
// Check valid domain combinations
- compareFilter(test, "foo.com##[-abp-properties='abc']", ["type=cssrule", "text=foo.com##[-abp-properties='abc']", "selectorDomain=foo.com", "selector=[-abp-properties='abc']", "domains=FOO.COM", "regexp=abc"]);
- compareFilter(test, "foo.com,~bar.com##[-abp-properties='abc']", ["type=cssrule", "text=foo.com,~bar.com##[-abp-properties='abc']", "selectorDomain=foo.com", "selector=[-abp-properties='abc']", "domains=FOO.COM|~BAR.COM", "regexp=abc"]);
- compareFilter(test, "foo.com,~bar##[-abp-properties='abc']", ["type=cssrule", "text=foo.com,~bar##[-abp-properties='abc']", "selectorDomain=foo.com", "selector=[-abp-properties='abc']", "domains=FOO.COM|~BAR", "regexp=abc"]);
- compareFilter(test, "~foo.com,bar.com##[-abp-properties='abc']", ["type=cssrule", "text=~foo.com,bar.com##[-abp-properties='abc']", "selectorDomain=bar.com", "selector=[-abp-properties='abc']", "domains=BAR.COM|~FOO.COM", "regexp=abc"]);
+ compareFilter(test, "foo.com##[-abp-properties='abc']", ["type=elemhideemulation", "text=foo.com##[-abp-properties='abc']", "selectorDomain=foo.com", "selector=[-abp-properties='abc']", "domains=FOO.COM", "features=1"]);
+ compareFilter(test, "foo.com,~bar.com##[-abp-properties='abc']", ["type=elemhideemulation", "text=foo.com,~bar.com##[-abp-properties='abc']", "selectorDomain=foo.com", "selector=[-abp-properties='abc']", "domains=FOO.COM|~BAR.COM", "features=1"]);
+ compareFilter(test, "foo.com,~bar##[-abp-properties='abc']", ["type=elemhideemulation", "text=foo.com,~bar##[-abp-properties='abc']", "selectorDomain=foo.com", "selector=[-abp-properties='abc']", "domains=FOO.COM|~BAR", "features=1"]);
+ compareFilter(test, "~foo.com,bar.com##[-abp-properties='abc']", ["type=elemhideemulation", "text=~foo.com,bar.com##[-abp-properties='abc']", "selectorDomain=bar.com", "selector=[-abp-properties='abc']", "domains=BAR.COM|~FOO.COM", "features=1"]);
- compareFilter(test, "##[-abp-properties='']", ["type=elemhide", "text=##[-abp-properties='']", "selector=[-abp-properties='']"]);
+ compareFilter(test, "##[-abp-properties='']", ["type=invalid", "text=##[-abp-properties='']", "reason=filter_elemhideemulation_nodomain"]);
compareFilter(test, "foo.com#@#[-abp-properties='abc']", ["type=elemhideexception", "text=foo.com#@#[-abp-properties='abc']", "selectorDomain=foo.com", "selector=[-abp-properties='abc']", "domains=FOO.COM"]);
- compareFilter(test, "foo.com##aaa [-abp-properties='abc'] bbb", ["type=cssrule", "text=foo.com##aaa [-abp-properties='abc'] bbb", "selectorDomain=foo.com", "selector=aaa [-abp-properties='abc'] bbb", "domains=FOO.COM", "prefix=aaa ", "regexp=abc", "suffix= bbb"]);
- compareFilter(test, "foo.com##[-abp-properties='|background-image: url(data:*)']", ["type=cssrule", "text=foo.com##[-abp-properties='|background-image: url(data:*)']", "selectorDomain=foo.com", "selector=[-abp-properties='|background-image: url(data:*)']", "domains=FOO.COM", "regexp=^background\\-image\\:\\ url\\(data\\:.*\\)"]);
+ compareFilter(test, "foo.com##aaa [-abp-properties='abc'] bbb", ["type=elemhideemulation", "text=foo.com##aaa [-abp-properties='abc'] bbb", "selectorDomain=foo.com", "selector=aaa [-abp-properties='abc'] bbb", "domains=FOO.COM", "features=1"]);
+ compareFilter(test, "foo.com##[-abp-properties='|background-image: url(data:*)']", ["type=elemhideemulation", "text=foo.com##[-abp-properties='|background-image: url(data:*)']", "selectorDomain=foo.com", "selector=[-abp-properties='|background-image: url(data:*)']", "domains=FOO.COM", "features=1"]);
+
+ // Test feature detection
+ compareFilter(test, "foo.com##[-abp-properties='abc']", ["type=elemhideemulation", "text=foo.com##[-abp-properties='abc']", "selectorDomain=foo.com", "selector=[-abp-properties='abc']", "domains=FOO.COM", "features=1"]);
+ compareFilter(test, "foo.com##:has(#ddd)", ["type=elemhideemulation", "text=foo.com##:has(#ddd)", "selectorDomain=foo.com", "selector=:has(#ddd)", "domains=FOO.COM", "features=2"]);
+ compareFilter(test, "foo.com##:has([-abp-properties='abc'])", ["type=elemhideemulation", "text=foo.com##:has([-abp-properties='abc'])", "selectorDomain=foo.com", "selector=:has([-abp-properties='abc'])", "domains=FOO.COM", "features=3"]);
kzar 2016/11/04 15:45:56 Please don't hardcode the feature flag numbers, be
Felix Dahlke 2016/11/04 16:43:35 Good point, will do.
Felix Dahlke 2016/11/11 11:51:42 Done.
test.done();
};
exports.testEmptyElemHideDomains = function(test)
{
let emptyDomainFilters = [
",##selector", ",,,##selector", "~,foo.com##selector", "foo.com,##selector",

Powered by Google App Engine
This is Rietveld