class HtmlTagTest

Same name and namespace in other branches
  1. 9 core/tests/Drupal/Tests/Core/Render/Element/HtmlTagTest.php \Drupal\Tests\Core\Render\Element\HtmlTagTest
  2. 8.9.x core/tests/Drupal/Tests/Core/Render/Element/HtmlTagTest.php \Drupal\Tests\Core\Render\Element\HtmlTagTest
  3. 10 core/tests/Drupal/Tests/Core/Render/Element/HtmlTagTest.php \Drupal\Tests\Core\Render\Element\HtmlTagTest

@coversDefaultClass \Drupal\Core\Render\Element\HtmlTag @group Render

Hierarchy

Expanded class hierarchy of HtmlTagTest

File

core/tests/Drupal/Tests/Core/Render/Element/HtmlTagTest.php, line 15

Namespace

Drupal\Tests\Core\Render\Element
View source
class HtmlTagTest extends RendererTestBase {
    
    /**
     * @covers ::getInfo
     */
    public function testGetInfo() : void {
        $htmlTag = new HtmlTag([], 'test', 'test');
        $info = $htmlTag->getInfo();
        $this->assertArrayHasKey('#pre_render', $info);
        $this->assertArrayHasKey('#attributes', $info);
        $this->assertArrayHasKey('#value', $info);
    }
    
    /**
     * @covers ::preRenderHtmlTag
     * @dataProvider providerPreRenderHtmlTag
     */
    public function testPreRenderHtmlTag($element, $expected) : void {
        $result = HtmlTag::preRenderHtmlTag($element);
        foreach ($result as &$child) {
            if (is_array($child) && isset($child['#tag'])) {
                $child = HtmlTag::preRenderHtmlTag($child);
            }
        }
        $this->assertEquals($expected, (string) $this->renderer
            ->renderRoot($result));
    }
    
    /**
     * Data provider for preRenderHtmlTag test.
     */
    public static function providerPreRenderHtmlTag() {
        $tags = [];
        // Value prefix/suffix.
        $element = [
            '#value' => 'value',
            '#tag' => 'p',
        ];
        $tags['value'] = [
            $element,
            '<p>value</p>' . "\n",
        ];
        // Normal element without a value should not result in a void element.
        $element = [
            '#tag' => 'p',
            '#value' => NULL,
        ];
        $tags['no-value'] = [
            $element,
            "<p></p>\n",
        ];
        // A void element.
        $element = [
            '#tag' => 'br',
        ];
        $tags['void-element'] = [
            $element,
            "<br />\n",
        ];
        // Attributes.
        $element = [
            '#tag' => 'div',
            '#attributes' => [
                'class' => 'test',
                'id' => 'id',
            ],
            '#value' => 'value',
        ];
        $tags['attributes'] = [
            $element,
            '<div class="test" id="id">value</div>' . "\n",
        ];
        // No script tags.
        $element['#noscript'] = TRUE;
        $tags['noscript'] = [
            $element,
            '<noscript><div class="test" id="id">value</div>' . "\n" . '</noscript>',
        ];
        // Ensure that #tag is sanitized.
        $element = [
            '#tag' => 'p><script>alert()</script><p',
            '#value' => 'value',
        ];
        $tags['sanitized-tag'] = [
            $element,
            "<p&gt;&lt;script&gt;alert()&lt;/script&gt;&lt;p>value</p&gt;&lt;script&gt;alert()&lt;/script&gt;&lt;p>\n",
        ];
        // Ensure that #value is not filtered if it is marked as safe.
        $element = [
            '#tag' => 'p',
            '#value' => Markup::create('<script>value</script>'),
        ];
        $tags['value-safe'] = [
            $element,
            "<p><script>value</script></p>\n",
        ];
        // Ensure that #value is filtered if it is not safe.
        $element = [
            '#tag' => 'p',
            '#value' => '<script>value</script>',
        ];
        $tags['value-not-safe'] = [
            $element,
            "<p>value</p>\n",
        ];
        // Ensure that nested render arrays render properly.
        $element = [
            '#tag' => 'p',
            '#value' => NULL,
            [
                [
                    '#markup' => '<b>value1</b>',
                ],
                [
                    '#markup' => '<b>value2</b>',
                ],
            ],
        ];
        $tags['nested'] = [
            $element,
            "<p><b>value1</b><b>value2</b></p>\n",
        ];
        // Ensure svg elements.
        $element = [
            '#tag' => 'rect',
            '#attributes' => [
                'width' => 25,
                'height' => 25,
                'x' => 5,
                'y' => 10,
            ],
        ];
        $tags['rect'] = [
            $element,
            '<rect width="25" height="25" x="5" y="10" />' . "\n",
        ];
        $element = [
            '#tag' => 'circle',
            '#attributes' => [
                'cx' => 100,
                'cy' => 100,
                'r' => 100,
            ],
        ];
        $tags['circle'] = [
            $element,
            '<circle cx="100" cy="100" r="100" />' . "\n",
        ];
        $element = [
            '#tag' => 'polygon',
            '#attributes' => [
                'points' => '60,20 100,40 100,80 60,100 20,80 20,40',
            ],
        ];
        $tags['polygon'] = [
            $element,
            '<polygon points="60,20 100,40 100,80 60,100 20,80 20,40" />' . "\n",
        ];
        $element = [
            '#tag' => 'ellipse',
            '#attributes' => [
                'cx' => 60,
                'cy' => 60,
                'rx' => 50,
                'ry' => 25,
            ],
        ];
        $tags['ellipse'] = [
            $element,
            '<ellipse cx="60" cy="60" rx="50" ry="25" />' . "\n",
        ];
        $element = [
            '#tag' => 'use',
            '#attributes' => [
                'x' => 50,
                'y' => 10,
                'width' => 50,
                'height' => 50,
            ],
        ];
        $tags['use'] = [
            $element,
            '<use x="50" y="10" width="50" height="50" />' . "\n",
        ];
        $element = [
            '#tag' => 'path',
            '#attributes' => [
                'd' => 'M 100 100 L 300 100 L 200 300 z',
                'fill' => 'orange',
                'stroke' => 'black',
                'stroke-width' => 3,
            ],
        ];
        $tags['path'] = [
            $element,
            '<path d="M 100 100 L 300 100 L 200 300 z" fill="orange" stroke="black" stroke-width="3" />' . "\n",
        ];
        $element = [
            '#tag' => 'stop',
            '#attributes' => [
                'offset' => '5%',
                'stop-color' => '#F60',
            ],
        ];
        $tags['stop'] = [
            $element,
            '<stop offset="5%" stop-color="#F60" />' . "\n",
        ];
        // Nested svg elements.
        $element = [
            '#tag' => 'linearGradient',
            '#value' => NULL,
            [
                '#tag' => 'stop',
                '#value' => NULL,
                '#attributes' => [
                    'offset' => '5%',
                    'stop-color' => '#F60',
                ],
            ],
            [
                '#tag' => 'stop',
                '#value' => NULL,
                '#attributes' => [
                    'offset' => '95%',
                    'stop-color' => '#FF6',
                ],
            ],
        ];
        $tags['linearGradient'] = [
            $element,
            '<linearGradient><stop offset="5%" stop-color="#F60" />' . "\n" . '<stop offset="95%" stop-color="#FF6" />' . "\n" . '</linearGradient>' . "\n",
        ];
        // Simple link.
        $element = [
            '#tag' => 'link',
        ];
        $tags['link'] = [
            $element,
            '<link />' . "\n",
        ];
        return $tags;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
ExpectDeprecationTrait::expectDeprecation public function Adds an expected deprecation.
ExpectDeprecationTrait::getCallableName private static function Returns a callable as a string suitable for inclusion in a message.
ExpectDeprecationTrait::setUpErrorHandler public function Sets up the test error handler.
ExpectDeprecationTrait::tearDownErrorHandler public function Tears down the test error handler.
HtmlTagTest::providerPreRenderHtmlTag public static function Data provider for preRenderHtmlTag test.
HtmlTagTest::testGetInfo public function @covers ::getInfo
HtmlTagTest::testPreRenderHtmlTag public function @covers ::preRenderHtmlTag
@dataProvider providerPreRenderHtmlTag
RandomGeneratorTrait::getRandomGenerator protected function Gets the random generator for the utility methods.
RandomGeneratorTrait::randomMachineName protected function Generates a unique random string containing letters and numbers.
RandomGeneratorTrait::randomObject public function Generates a random PHP object.
RandomGeneratorTrait::randomString public function Generates a pseudo-random string of ASCII characters of codes 32 to 126.
RendererTestBase::$cacheContextsManager protected property
RendererTestBase::$cacheFactory protected property
RendererTestBase::$callableResolver protected property The mocked controller resolver.
RendererTestBase::$currentUserRole protected property The simulated &quot;current&quot; user role, for use in tests with cache contexts.
RendererTestBase::$datetimeTime protected property System time service.
RendererTestBase::$elementInfo protected property The mocked element info.
RendererTestBase::$memoryCache protected property
RendererTestBase::$placeholderGenerator protected property The tested placeholder generator. 1
RendererTestBase::$renderCache protected property The tested render cache.
RendererTestBase::$renderer protected property The tested renderer.
RendererTestBase::$rendererConfig protected property The mocked renderer configuration.
RendererTestBase::$requestStack protected property
RendererTestBase::$themeManager protected property The mocked theme manager.
RendererTestBase::assertRenderCacheItem protected function Asserts a render cache item.
RendererTestBase::randomContextValue protected static function Generates a random context value for the placeholder tests.
RendererTestBase::setUp protected function Overrides UnitTestCase::setUp 4
RendererTestBase::setUpMemoryCache protected function Sets up a memory-based render cache back-end.
RendererTestBase::setUpRequest protected function Sets up a request object on the request stack.
RendererTestBase::setUpUnusedCache protected function Sets up a render cache back-end that is asserted to be never used.
UnitTestCase::$root protected property The app root.
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::getStringTranslationStub public function Returns a stub translation manager that just returns the passed string.
UnitTestCase::setUpBeforeClass public static function

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