class FilterHtmlTest

Same name in this branch
  1. 9 core/modules/filter/tests/src/FunctionalJavascript/FilterHtmlTest.php \Drupal\Tests\filter\FunctionalJavascript\FilterHtmlTest
Same name in other branches
  1. 8.9.x core/modules/filter/tests/src/Unit/FilterHtmlTest.php \Drupal\Tests\filter\Unit\FilterHtmlTest
  2. 10 core/modules/filter/tests/src/Unit/FilterHtmlTest.php \Drupal\Tests\filter\Unit\FilterHtmlTest
  3. 10 core/modules/filter/tests/src/FunctionalJavascript/FilterHtmlTest.php \Drupal\Tests\filter\FunctionalJavascript\FilterHtmlTest
  4. 11.x core/modules/filter/tests/src/Unit/FilterHtmlTest.php \Drupal\Tests\filter\Unit\FilterHtmlTest
  5. 11.x core/modules/filter/tests/src/FunctionalJavascript/FilterHtmlTest.php \Drupal\Tests\filter\FunctionalJavascript\FilterHtmlTest

@coversDefaultClass \Drupal\filter\Plugin\Filter\FilterHtml @group filter

Hierarchy

Expanded class hierarchy of FilterHtmlTest

File

core/modules/filter/tests/src/Unit/FilterHtmlTest.php, line 12

Namespace

Drupal\Tests\filter\Unit
View source
class FilterHtmlTest extends UnitTestCase {
    
    /**
     * @var \Drupal\filter\Plugin\Filter\FilterHtml
     */
    protected $filter;
    
    /**
     * {@inheritdoc}
     */
    protected function setUp() : void {
        parent::setUp();
        $configuration['settings'] = [
            'allowed_html' => '<a href> <p> <em> <strong> <cite> <blockquote> <code class="pretty boring align-*"> <ul alpaca-*="wooly-* strong"> <ol llama-*> <li> <dl> <dt> <dd> <br> <h3 id>',
            'filter_html_help' => 1,
            'filter_html_nofollow' => 0,
        ];
        $this->filter = new FilterHtml($configuration, 'filter_html', [
            'provider' => 'test',
        ]);
        $this->filter
            ->setStringTranslation($this->getStringTranslationStub());
    }
    
    /**
     * @covers ::filterAttributes
     *
     * @dataProvider providerFilterAttributes
     *
     * @param string $html
     *   Input HTML.
     * @param string $expected
     *   The expected output string.
     */
    public function testfilterAttributes($html, $expected) {
        $this->assertSame($expected, $this->filter
            ->filterAttributes($html));
    }
    
    /**
     * Provides data for testfilterAttributes.
     *
     * @return array
     *   An array of test data.
     */
    public function providerFilterAttributes() {
        return [
            [
                '<a href="/blog" title="Blog">Blog</a>',
                '<a href="/blog">Blog</a>',
            ],
            [
                '<p dir="rtl" />',
                '<p dir="rtl"></p>',
            ],
            [
                '<p dir="bogus" />',
                '<p></p>',
            ],
            [
                '<p id="first" />',
                '<p></p>',
            ],
            // The addition of xml:lang isn't especially desired, but is still valid
            // HTML5. See https://www.drupal.org/node/1333730.
[
                '<p id="first" lang="en">text</p>',
                '<p lang="en" xml:lang="en">text</p>',
            ],
            [
                '<p style="display: none;" />',
                '<p></p>',
            ],
            [
                '<code class="pretty invalid">foreach ($a as $b) {}</code>',
                '<code class="pretty">foreach ($a as $b) {}</code>',
            ],
            [
                '<code class="boring pretty">foreach ($a as $b) {}</code>',
                '<code class="boring pretty">foreach ($a as $b) {}</code>',
            ],
            [
                '<code class="boring    pretty ">foreach ($a as $b) {}</code>',
                '<code class="boring pretty">foreach ($a as $b) {}</code>',
            ],
            [
                '<code class="invalid alpaca">foreach ($a as $b) {}</code>',
                '<code>foreach ($a as $b) {}</code>',
            ],
            [
                '<h3 class="big">a heading</h3>',
                '<h3>a heading</h3>',
            ],
            [
                '<h3 id="first">a heading</h3>',
                '<h3 id="first">a heading</h3>',
            ],
            // Wildcard value. Case matters, so upper case doesn't match.
[
                '<code class="align-left bold">foreach ($a as $b) {}</code>',
                '<code class="align-left">foreach ($a as $b) {}</code>',
            ],
            [
                '<code class="align-right ">foreach ($a as $b) {}</code>',
                '<code class="align-right">foreach ($a as $b) {}</code>',
            ],
            [
                '<code class="Align-right ">foreach ($a as $b) {}</code>',
                '<code>foreach ($a as $b) {}</code>',
            ],
            // Wildcard name, case is ignored.
[
                '<ol style="display: none;" llama-wim="noble majestic"></ol>',
                '<ol llama-wim="noble majestic"></ol>',
            ],
            [
                '<ol style="display: none;" LlamA-Wim="majestic"></ol>',
                '<ol llama-wim="majestic"></ol>',
            ],
            [
                '<ol style="display: none;" llama-="noble majestic"></ol>',
                '<ol llama-="noble majestic"></ol>',
            ],
            // Both wildcard names and values.
[
                '<ul style="display: none;" alpaca-wool="wooly-warm strong majestic"></ul>',
                '<ul alpaca-wool="wooly-warm strong"></ul>',
            ],
        ];
    }
    
    /**
     * @covers ::setConfiguration
     */
    public function testSetConfiguration() {
        $configuration['settings'] = [
            // New lines and spaces are replaced with a single space.
'allowed_html' => "<a>  <br>\r\n  <p>",
            'filter_html_help' => 1,
            'filter_html_nofollow' => 0,
        ];
        $filter = new FilterHtml($configuration, 'filter_html', [
            'provider' => 'test',
        ]);
        $this->assertSame('<a> <br> <p>', $filter->getConfiguration()['settings']['allowed_html']);
    }

}

Members

Title Sort descending Deprecated Modifiers Object type Summary Overriden Title Overrides
FilterHtmlTest::$filter protected property
FilterHtmlTest::providerFilterAttributes public function Provides data for testfilterAttributes.
FilterHtmlTest::setUp protected function Overrides UnitTestCase::setUp
FilterHtmlTest::testfilterAttributes public function @covers ::filterAttributes
FilterHtmlTest::testSetConfiguration public function @covers ::setConfiguration
PhpUnitWarnings::$deprecationWarnings private static property Deprecation warnings from PHPUnit to raise with @trigger_error().
PhpUnitWarnings::addWarning public function Converts PHPUnit deprecation warnings to E_USER_DEPRECATED.
UnitTestCase::$randomGenerator protected property The random generator.
UnitTestCase::$root protected property The app root. 1
UnitTestCase::assertArrayEquals Deprecated protected function Asserts if two arrays are equal by sorting them first.
UnitTestCase::getClassResolverStub protected function Returns a stub class resolver.
UnitTestCase::getConfigFactoryStub public function Returns a stub config factory that behaves according to the passed array.
UnitTestCase::getConfigStorageStub public function Returns a stub config storage that returns the supplied configuration.
UnitTestCase::getContainerWithCacheTagsInvalidator protected function Sets up a container with a cache tags invalidator.
UnitTestCase::getRandomGenerator protected function Gets the random generator for the utility methods.
UnitTestCase::getStringTranslationStub public function Returns a stub translation manager that just returns the passed string.
UnitTestCase::randomMachineName public function Generates a unique random string containing letters and numbers.
UnitTestCase::setUpBeforeClass public static function

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.