| 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 |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 let element = createElement(parent); | 145 let element = createElement(parent); |
| 146 insertStyleRule("#" + element.id + " " + styleBlock); | 146 insertStyleRule("#" + element.id + " " + styleBlock); |
| 147 return element; | 147 return element; |
| 148 } | 148 } |
| 149 | 149 |
| 150 // Create a new ElemHideEmulation instance with @selectors. | 150 // Create a new ElemHideEmulation instance with @selectors. |
| 151 async function applyElemHideEmulation(test, selectors) | 151 async function applyElemHideEmulation(test, selectors) |
| 152 { | 152 { |
| 153 await Promise.resolve(); | 153 await Promise.resolve(); |
| 154 | 154 |
| 155 let elemHideEmulation = null; | |
| 156 | |
| 157 try | 155 try |
| 158 { | 156 { |
| 159 elemHideEmulation = new ElemHideEmulation( | 157 let elemHideEmulation = new ElemHideEmulation( |
| 160 elems => | 158 elems => |
| 161 { | 159 { |
| 162 for (let elem of elems) | 160 for (let elem of elems) |
| 163 elem.style.display = "none"; | 161 elem.style.display = "none"; |
| 164 } | 162 } |
| 165 ); | 163 ); |
| 166 | 164 |
| 167 elemHideEmulation.document = testDocument; | 165 elemHideEmulation.document = testDocument; |
| 168 elemHideEmulation.MIN_INVOCATION_INTERVAL = REFRESH_INTERVAL / 2; | 166 elemHideEmulation.MIN_INVOCATION_INTERVAL = REFRESH_INTERVAL / 2; |
| 169 elemHideEmulation.apply(selectors.map( | 167 elemHideEmulation.apply(selectors.map( |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 }; | 481 }; |
| 484 | 482 |
| 485 insertStyleRule(".inside {}"); | 483 insertStyleRule(".inside {}"); |
| 486 | 484 |
| 487 if (await applyElemHideEmulation(test, [selector])) | 485 if (await applyElemHideEmulation(test, [selector])) |
| 488 compareExpectations(test, elems, expectations); | 486 compareExpectations(test, elems, expectations); |
| 489 | 487 |
| 490 test.done(); | 488 test.done(); |
| 491 } | 489 } |
| 492 | 490 |
| 493 exports.testPseudoClassHasSelectorWithHasAndWithSuffixSibling = async function(t
est) | 491 exports.testPseudoClassHasSelectorWithHasAndWithSuffixSibling = function(test) |
| 494 { | 492 { |
| 495 let expectations = { | 493 let expectations = { |
| 496 parent: true, | 494 parent: true, |
| 497 middile: true, | 495 middile: true, |
| 498 inside: true, | 496 inside: true, |
| 499 sibling: true, | 497 sibling: true, |
| 500 sibling2: true, | 498 sibling2: true, |
| 501 toHide: false | 499 toHide: false |
| 502 }; | 500 }; |
| 503 runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( | 501 runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( |
| 504 test, "div:-abp-has(:-abp-has(div.inside)) + div > div", expectations); | 502 test, "div:-abp-has(:-abp-has(div.inside)) + div > div", expectations); |
| 505 }; | 503 }; |
| 506 | 504 |
| 507 exports.testPseudoClassHasSelectorWithHasAndWithSuffixSibling2 = async function(
test) | 505 exports.testPseudoClassHasSelectorWithHasAndWithSuffixSibling2 = function(test) |
| 508 { | 506 { |
| 509 let expectations = { | 507 let expectations = { |
| 510 parent: true, | 508 parent: true, |
| 511 middile: true, | 509 middile: true, |
| 512 inside: true, | 510 inside: true, |
| 513 sibling: true, | 511 sibling: true, |
| 514 sibling2: true, | 512 sibling2: true, |
| 515 toHide: false | 513 toHide: false |
| 516 }; | 514 }; |
| 517 runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( | 515 runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( |
| 518 test, "div:-abp-has(:-abp-has(> div.inside)) + div > div", expectations); | 516 test, "div:-abp-has(:-abp-has(> div.inside)) + div > div", expectations); |
| 519 }; | 517 }; |
| 520 | 518 |
| 521 exports.testPseudoClassHasSelectorWithHasAndWithSuffixSibling3 = async function(
test) | 519 exports.testPseudoClassHasSelectorWithHasAndWithSuffixSibling3 = function(test) |
| 522 { | 520 { |
| 523 let expectations = { | 521 let expectations = { |
| 524 parent: true, | 522 parent: true, |
| 525 middile: true, | 523 middile: true, |
| 526 inside: true, | 524 inside: true, |
| 527 sibling: true, | 525 sibling: true, |
| 528 sibling2: true, | 526 sibling2: true, |
| 529 toHide: false | 527 toHide: false |
| 530 }; | 528 }; |
| 531 runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( | 529 runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( |
| 532 test, "div:-abp-has(> div:-abp-has(div.inside)) + div > div", expectations); | 530 test, "div:-abp-has(> div:-abp-has(div.inside)) + div > div", expectations); |
| 533 }; | 531 }; |
| 534 | 532 |
| 535 exports.testPseudoClassHasSelectorWithSuffixSiblingNoop = async function(test) | 533 exports.testPseudoClassHasSelectorWithSuffixSiblingNoop = function(test) |
| 536 { | 534 { |
| 537 let expectations = { | 535 let expectations = { |
| 538 parent: true, | 536 parent: true, |
| 539 middile: true, | 537 middile: true, |
| 540 inside: true, | 538 inside: true, |
| 541 sibling: true, | 539 sibling: true, |
| 542 sibling2: true, | 540 sibling2: true, |
| 543 toHide: true | 541 toHide: true |
| 544 }; | 542 }; |
| 545 runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( | 543 runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( |
| 546 test, "div:-abp-has(> body div.inside) + div > div", expectations); | 544 test, "div:-abp-has(> body div.inside) + div > div", expectations); |
| 547 }; | 545 }; |
| 548 | 546 |
| 549 exports.testPseudoClassHasSelectorWithSuffixSiblingContains = async function(tes
t) | 547 exports.testPseudoClassHasSelectorWithSuffixSiblingContains = function(test) |
| 550 { | 548 { |
| 551 let expectations = { | 549 let expectations = { |
| 552 parent: true, | 550 parent: true, |
| 553 middile: true, | 551 middile: true, |
| 554 inside: true, | 552 inside: true, |
| 555 sibling: true, | 553 sibling: true, |
| 556 sibling2: true, | 554 sibling2: true, |
| 557 toHide: true | 555 toHide: true |
| 558 }; | 556 }; |
| 559 runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( | 557 runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( |
| (...skipping 21 matching lines...) Expand all Loading... |
| 581 sibling2: testDocument.getElementById("sibling2"), | 579 sibling2: testDocument.getElementById("sibling2"), |
| 582 toHide: testDocument.getElementById("tohide") | 580 toHide: testDocument.getElementById("tohide") |
| 583 }; | 581 }; |
| 584 | 582 |
| 585 if (await applyElemHideEmulation(test, [selector])) | 583 if (await applyElemHideEmulation(test, [selector])) |
| 586 compareExpectations(test, elems, expectations); | 584 compareExpectations(test, elems, expectations); |
| 587 | 585 |
| 588 test.done(); | 586 test.done(); |
| 589 } | 587 } |
| 590 | 588 |
| 591 exports.testPseudoClassContainsText = async function(test) | 589 exports.testPseudoClassContainsText = function(test) |
| 592 { | 590 { |
| 593 let expectations = { | 591 let expectations = { |
| 594 parent: true, | 592 parent: true, |
| 595 middle: true, | 593 middle: true, |
| 596 inside: true, | 594 inside: true, |
| 597 sibling: false, | 595 sibling: false, |
| 598 sibling2: true, | 596 sibling2: true, |
| 599 toHide: true | 597 toHide: true |
| 600 }; | 598 }; |
| 601 runTestPseudoClassContains( | 599 runTestPseudoClassContains( |
| 602 test, "#parent div:-abp-contains(to hide)", expectations); | 600 test, "#parent div:-abp-contains(to hide)", expectations); |
| 603 }; | 601 }; |
| 604 | 602 |
| 605 exports.testPseudoClassContainsRegexp = async function(test) | 603 exports.testPseudoClassContainsRegexp = function(test) |
| 606 { | 604 { |
| 607 let expectations = { | 605 let expectations = { |
| 608 parent: true, | 606 parent: true, |
| 609 middle: true, | 607 middle: true, |
| 610 inside: true, | 608 inside: true, |
| 611 sibling: false, | 609 sibling: false, |
| 612 sibling2: true, | 610 sibling2: true, |
| 613 toHide: true | 611 toHide: true |
| 614 }; | 612 }; |
| 615 runTestPseudoClassContains( | 613 runTestPseudoClassContains( |
| 616 test, "#parent div:-abp-contains(/to\\shide/)", expectations); | 614 test, "#parent div:-abp-contains(/to\\shide/)", expectations); |
| 617 }; | 615 }; |
| 618 | 616 |
| 619 exports.testPseudoClassContainsRegexpIFlag = async function(test) | 617 exports.testPseudoClassContainsRegexpIFlag = function(test) |
| 620 { | 618 { |
| 621 let expectations = { | 619 let expectations = { |
| 622 parent: true, | 620 parent: true, |
| 623 middle: true, | 621 middle: true, |
| 624 inside: true, | 622 inside: true, |
| 625 sibling: false, | 623 sibling: false, |
| 626 sibling2: true, | 624 sibling2: true, |
| 627 toHide: true | 625 toHide: true |
| 628 }; | 626 }; |
| 629 runTestPseudoClassContains( | 627 runTestPseudoClassContains( |
| 630 test, "#parent div:-abp-contains(/to\\sHide/i)", expectations); | 628 test, "#parent div:-abp-contains(/to\\sHide/i)", expectations); |
| 631 }; | 629 }; |
| 632 | 630 |
| 633 exports.testPseudoClassContainsRegexpUFlag = async function(test) | 631 exports.testPseudoClassContainsRegexpUFlag = function(test) |
| 634 { | 632 { |
| 635 let expectations = { | 633 let expectations = { |
| 636 parent: true, | 634 parent: true, |
| 637 middle: true, | 635 middle: true, |
| 638 inside: true, | 636 inside: true, |
| 639 sibling: false, | 637 sibling: false, |
| 640 sibling2: true, | 638 sibling2: true, |
| 641 toHide: true | 639 toHide: true |
| 642 }; | 640 }; |
| 643 runTestPseudoClassContains( | 641 runTestPseudoClassContains( |
| 644 test, "#parent div:-abp-contains(/to\\shide\\s.!/u)", expectations); | 642 test, "#parent div:-abp-contains(/to\\shide\\s.!/u)", expectations); |
| 645 }; | 643 }; |
| 646 | 644 |
| 647 exports.testPseudoClassContainsWildcardNoMatch = async function(test) | 645 exports.testPseudoClassContainsWildcardNoMatch = function(test) |
| 648 { | 646 { |
| 649 let expectations = { | 647 let expectations = { |
| 650 parent: true, | 648 parent: true, |
| 651 middle: true, | 649 middle: true, |
| 652 inside: true, | 650 inside: true, |
| 653 sibling: true, | 651 sibling: true, |
| 654 sibling2: true, | 652 sibling2: true, |
| 655 toHide: true | 653 toHide: true |
| 656 }; | 654 }; |
| 657 // this filter shouldn't match anything as "*" has no meaning. | 655 // this filter shouldn't match anything as "*" has no meaning. |
| 658 runTestPseudoClassContains( | 656 runTestPseudoClassContains( |
| 659 test, "#parent div:-abp-contains(to *hide)", expectations); | 657 test, "#parent div:-abp-contains(to *hide)", expectations); |
| 660 }; | 658 }; |
| 661 | 659 |
| 662 exports.testPseudoClassContainsWildcardMatch = async function(test) | 660 exports.testPseudoClassContainsWildcardMatch = function(test) |
| 663 { | 661 { |
| 664 let expectations = { | 662 let expectations = { |
| 665 parent: true, | 663 parent: true, |
| 666 middle: true, | 664 middle: true, |
| 667 inside: true, | 665 inside: true, |
| 668 sibling: true, | 666 sibling: true, |
| 669 sibling2: false, | 667 sibling2: false, |
| 670 toHide: true | 668 toHide: true |
| 671 }; | 669 }; |
| 672 runTestPseudoClassContains( | 670 runTestPseudoClassContains( |
| (...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1096 { | 1094 { |
| 1097 if (element.id == "n2" || element.id == "n2_3") | 1095 if (element.id == "n2" || element.id == "n2_3") |
| 1098 expectProcessed(test, element, element.id); | 1096 expectProcessed(test, element, element.id); |
| 1099 else | 1097 else |
| 1100 expectNotProcessed(test, element, element.id); | 1098 expectNotProcessed(test, element, element.id); |
| 1101 } | 1099 } |
| 1102 } | 1100 } |
| 1103 | 1101 |
| 1104 test.done(); | 1102 test.done(); |
| 1105 }; | 1103 }; |
| LEFT | RIGHT |