Index: test/browser/elemHideEmulation.js |
=================================================================== |
--- a/test/browser/elemHideEmulation.js |
+++ b/test/browser/elemHideEmulation.js |
@@ -348,16 +348,30 @@ |
{ |
expectVisible(test, parent); |
expectVisible(test, middle); |
expectVisible(test, sibling); |
expectHidden(test, toHide); |
}).catch(unexpectedError.bind(test)).then(() => test.done()); |
}; |
+function compareExpectations(test, elems, expectations) |
+{ |
+ for (let elem in expectations) |
+ { |
+ if (elems[elem]) |
+ { |
+ if (expectations[elem]) |
+ expectVisible(test, elems[elem]); |
+ else |
+ expectHidden(test, elems[elem]); |
+ } |
+ } |
+} |
+ |
function runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling(test, selector, expectations) |
{ |
testDocument.body.innerHTML = `<div id="parent"> |
<div id="middle"> |
<div id="middle1"><div id="inside" class="inside"></div></div> |
</div> |
<div id="sibling"> |
<div id="tohide"><span>to hide</span></div> |
@@ -376,24 +390,17 @@ |
}; |
insertStyleRule(".inside {}"); |
applyElemHideEmulation( |
[selector] |
).then(() => |
{ |
- for (let elem in expectations) |
- if (elems[elem]) |
- { |
- if (expectations[elem]) |
- expectVisible(test, elems[elem]); |
- else |
- expectHidden(test, elems[elem]); |
- } |
+ compareExpectations(test, elems, expectations); |
}).catch(unexpectedError.bind(test)).then(() => test.done()); |
} |
exports.testPseudoClassHasSelectorWithHasAndWithSuffixSibling = function(test) |
{ |
let expectations = { |
parent: true, |
middile: true, |
@@ -457,47 +464,114 @@ |
sibling: true, |
sibling2: true, |
toHide: true |
}; |
runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( |
test, "div:-abp-has(> span:-abp-contains(Advertisment))", expectations); |
}; |
-exports.testPseudoClassContains = function(test) |
+function runTestPseudoClassContains(test, selector, expectations) |
{ |
testDocument.body.innerHTML = `<div id="parent"> |
<div id="middle"> |
<div id="middle1"><div id="inside" class="inside"></div></div> |
</div> |
<div id="sibling"> |
<div id="tohide">to hide</div> |
</div> |
<div id="sibling2"> |
- <div id="sibling21"><div id="sibling211" class="inside"></div></div> |
+ <div id="sibling21"><div id="sibling211" class="inside">Ad*</div></div> |
</div> |
</div>`; |
- let parent = testDocument.getElementById("parent"); |
- let middle = testDocument.getElementById("middle"); |
- let inside = testDocument.getElementById("inside"); |
- let sibling = testDocument.getElementById("sibling"); |
- let sibling2 = testDocument.getElementById("sibling2"); |
- let toHide = testDocument.getElementById("tohide"); |
+ let elems = { |
+ parent: testDocument.getElementById("parent"), |
+ middle: testDocument.getElementById("middle"), |
+ inside: testDocument.getElementById("inside"), |
+ sibling: testDocument.getElementById("sibling"), |
+ sibling2: testDocument.getElementById("sibling2"), |
+ toHide: testDocument.getElementById("tohide") |
+ }; |
applyElemHideEmulation( |
- ["#parent div:-abp-contains(to hide)"] |
- ).then(() => |
- { |
- expectVisible(test, parent); |
- expectVisible(test, middle); |
- expectVisible(test, inside); |
- expectHidden(test, sibling); |
- expectVisible(test, sibling2); |
- expectHidden(test, toHide); |
- }).catch(unexpectedError.bind(test)).then(() => test.done()); |
+ [selector] |
+ ).then( |
+ () => compareExpectations(test, elems, expectations) |
+ ).catch(unexpectedError.bind(test)).then(() => test.done()); |
+} |
+ |
+exports.testPseudoClassContainsText = function(test) |
+{ |
+ let expectations = { |
+ parent: true, |
+ middle: true, |
+ inside: true, |
+ sibling: false, |
+ sibling2: true, |
+ toHide: false |
+ }; |
+ runTestPseudoClassContains( |
+ test, "#parent div:-abp-contains(to hide)", expectations); |
+}; |
+ |
+exports.testPseudoClassContainsRegexp = function(test) |
+{ |
+ let expectations = { |
+ parent: true, |
+ middle: true, |
+ inside: true, |
+ sibling: false, |
+ sibling2: true, |
+ toHide: false |
+ }; |
+ runTestPseudoClassContains( |
+ test, "#parent div:-abp-contains(/to\\shide/)", expectations); |
+}; |
+ |
+exports.testPseudoClassContainsRegexpIFlag = function(test) |
+{ |
+ let expectations = { |
+ parent: true, |
+ middle: true, |
+ inside: true, |
+ sibling: false, |
+ sibling2: true, |
+ toHide: false |
+ }; |
+ runTestPseudoClassContains( |
+ test, "#parent div:-abp-contains(/to\\sHide/i)", expectations); |
+}; |
+ |
+exports.testPseudoClassContainsWildcardNoMatch = function(test) |
+{ |
+ let expectations = { |
+ parent: true, |
+ middle: true, |
+ inside: true, |
+ sibling: true, |
+ sibling2: true, |
+ toHide: true |
+ }; |
+ // this filter shouldn't match anything as "*" has no meaning. |
+ runTestPseudoClassContains( |
+ test, "#parent div:-abp-contains(to *hide)", expectations); |
+}; |
+ |
+exports.testPseudoClassContainsWildcardMatch = function(test) |
+{ |
+ let expectations = { |
+ parent: true, |
+ middle: true, |
+ inside: true, |
+ sibling: true, |
+ sibling2: false, |
+ toHide: true |
+ }; |
+ runTestPseudoClassContains( |
+ test, "#parent div:-abp-contains(Ad*)", expectations); |
}; |
exports.testPseudoClassHasSelectorWithPropSelector = function(test) |
{ |
let parent = createElementWithStyle("{}"); |
let child = createElementWithStyle("{background-color: #000}", parent); |
applyElemHideEmulation( |
["div:-abp-has(:-abp-properties(background-color: rgb(0, 0, 0)))"] |