LEFT | RIGHT |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-present eyeo GmbH | 3 * Copyright (C) 2006-present eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU General Public License | 14 * You should have received a copy of the GNU General Public License |
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
16 */ | 16 */ |
17 | 17 |
18 /* global assert */ | 18 /* global assert */ |
19 | 19 |
20 "use strict"; | 20 "use strict"; |
21 | 21 |
22 const {ElemHideEmulation, setTestMode, | 22 const {ElemHideEmulation, setTestMode, |
23 getTestInfo} = require("../../lib/content/elemHideEmulation"); | 23 getTestInfo} = require("../../lib/content/elemHideEmulation"); |
| 24 const {timeout} = require("./_utils"); |
24 | 25 |
25 describe("Element Hiding Emulation", () => | 26 describe("Element Hiding Emulation", () => |
26 { | 27 { |
27 const REFRESH_INTERVAL = 200; | 28 const REFRESH_INTERVAL = 200; |
28 | 29 |
29 let testDocument = null; | 30 let testDocument = null; |
30 | 31 |
31 beforeEach(() => | 32 beforeEach(() => |
32 { | 33 { |
33 setTestMode(); | 34 setTestMode(); |
34 | 35 |
35 let iframe = document.createElement("iframe"); | 36 let iframe = document.createElement("iframe"); |
36 document.body.appendChild(iframe); | 37 document.body.appendChild(iframe); |
37 testDocument = iframe.contentDocument; | 38 testDocument = iframe.contentDocument; |
38 }); | 39 }); |
39 | 40 |
40 afterEach(() => | 41 afterEach(() => |
41 { | 42 { |
42 let iframe = testDocument.defaultView.frameElement; | 43 let iframe = testDocument.defaultView.frameElement; |
43 iframe.parentNode.removeChild(iframe); | 44 iframe.parentNode.removeChild(iframe); |
44 testDocument = null; | 45 testDocument = null; |
45 }); | 46 }); |
46 | |
47 function timeout(delay) | |
48 { | |
49 return new Promise((resolve, reject) => | |
50 { | |
51 window.setTimeout(resolve, delay); | |
52 }); | |
53 } | |
54 | 47 |
55 function unexpectedError(error) | 48 function unexpectedError(error) |
56 { | 49 { |
57 console.error(error); | 50 console.error(error); |
58 assert.ok(false, "Unexpected error: " + error); | 51 assert.ok(false, "Unexpected error: " + error); |
59 } | 52 } |
60 | 53 |
61 function expectHidden(element, id) | 54 function expectHidden(element, id) |
62 { | 55 { |
63 let withId = ""; | 56 let withId = ""; |
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
505 let expectations = { | 498 let expectations = { |
506 parent: true, | 499 parent: true, |
507 middile: true, | 500 middile: true, |
508 inside: true, | 501 inside: true, |
509 sibling: true, | 502 sibling: true, |
510 sibling2: true, | 503 sibling2: true, |
511 toHide: true | 504 toHide: true |
512 }; | 505 }; |
513 runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( | 506 runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( |
514 "div:-abp-has(> span:-abp-contains(Advertisment))", expectations); | 507 "div:-abp-has(> span:-abp-contains(Advertisment))", expectations); |
| 508 }); |
| 509 }); |
| 510 |
| 511 describe("Property Selector Qualifiers", () => |
| 512 { |
| 513 async function runTestQualifier(selector) |
| 514 { |
| 515 testDocument.body.innerHTML = ` |
| 516 <style> |
| 517 span::before { |
| 518 content: "any"; |
| 519 } |
| 520 </style> |
| 521 <div id="toHide"> |
| 522 <a> |
| 523 <p> |
| 524 <span></span> |
| 525 </p> |
| 526 </a> |
| 527 </div>`; |
| 528 |
| 529 if (await applyElemHideEmulation([selector])) |
| 530 expectHidden(testDocument.getElementById("toHide")); |
| 531 } |
| 532 |
| 533 // See issue https://issues.adblockplus.org/ticket/7428 |
| 534 it("Combinator", () => |
| 535 { |
| 536 runTestQualifier( |
| 537 "div:-abp-has(> a p > :-abp-properties(content: \"any\"))" |
| 538 ); |
| 539 }); |
| 540 |
| 541 // See issue https://issues.adblockplus.org/ticket/7359 |
| 542 it("Nested Combinator", () => |
| 543 { |
| 544 runTestQualifier( |
| 545 "div:-abp-has(> a p:-abp-has(> :-abp-properties(content: \"any\")))" |
| 546 ); |
| 547 }); |
| 548 |
| 549 // See issue https://issues.adblockplus.org/ticket/7400 |
| 550 it("Identical", () => |
| 551 { |
| 552 runTestQualifier( |
| 553 "div:-abp-has(span:-abp-properties(content: \"any\"))" |
| 554 ); |
| 555 }); |
| 556 |
| 557 // See issue https://issues.adblockplus.org/ticket/7400 |
| 558 it("Nested Identical", () => |
| 559 { |
| 560 runTestQualifier( |
| 561 "div:-abp-has(p:-abp-has(span:-abp-properties(content: \"any\")))" |
| 562 ); |
515 }); | 563 }); |
516 }); | 564 }); |
517 | 565 |
518 describe("Contains selector", () => | 566 describe("Contains selector", () => |
519 { | 567 { |
520 async function runTestPseudoClassContains(selector, expectations) | 568 async function runTestPseudoClassContains(selector, expectations) |
521 { | 569 { |
522 testDocument.body.innerHTML = `<div id="parent"> | 570 testDocument.body.innerHTML = `<div id="parent"> |
523 <div id="middle"> | 571 <div id="middle"> |
524 <div id="middle1"><div id="inside" class="inside"></div></div> | 572 <div id="middle1"><div id="inside" class="inside"></div></div> |
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1041 ...testDocument.getElementsByTagName("p")]) | 1089 ...testDocument.getElementsByTagName("p")]) |
1042 { | 1090 { |
1043 if (element.id == "n2" || element.id == "n2_3") | 1091 if (element.id == "n2" || element.id == "n2_3") |
1044 expectProcessed(element, element.id); | 1092 expectProcessed(element, element.id); |
1045 else | 1093 else |
1046 expectNotProcessed(element, element.id); | 1094 expectNotProcessed(element, element.id); |
1047 } | 1095 } |
1048 } | 1096 } |
1049 }); | 1097 }); |
1050 }); | 1098 }); |
LEFT | RIGHT |