3 namespace Drupal\Tests\Core\Render\Element;
5 use Drupal\Core\Render\Markup;
6 use Drupal\Tests\UnitTestCase;
7 use Drupal\Core\Render\Element\HtmlTag;
10 * @coversDefaultClass \Drupal\Core\Render\Element\HtmlTag
13 class HtmlTagTest extends UnitTestCase {
18 public function testGetInfo() {
19 $htmlTag = new HtmlTag([], 'test', 'test');
20 $info = $htmlTag->getInfo();
21 $this->assertArrayHasKey('#pre_render', $info);
22 $this->assertArrayHasKey('#attributes', $info);
23 $this->assertArrayHasKey('#value', $info);
27 * @covers ::preRenderHtmlTag
28 * @dataProvider providerPreRenderHtmlTag
30 public function testPreRenderHtmlTag($element, $expected) {
31 $result = HtmlTag::preRenderHtmlTag($element);
32 $this->assertArrayHasKey('#markup', $result);
33 $this->assertEquals($expected, $result['#markup']);
37 * Data provider for preRenderHtmlTag test.
39 public function providerPreRenderHtmlTag() {
42 // Value prefix/suffix.
47 $tags[] = [$element, '<p>value</p>' . "\n"];
49 // Normal element without a value should not result in a void element.
54 $tags[] = [$element, "<p></p>\n"];
60 $tags[] = [$element, "<br />\n"];
65 '#attributes' => ['class' => 'test', 'id' => 'id'],
68 $tags[] = [$element, '<div class="test" id="id">value</div>' . "\n"];
71 $element['#noscript'] = TRUE;
72 $tags[] = [$element, '<noscript><div class="test" id="id">value</div>' . "\n" . '</noscript>'];
74 // Ensure that #tag is sanitised.
76 '#tag' => 'p><script>alert()</script><p',
79 $tags[] = [$element, "<p><script>alert()</script><p>value</p><script>alert()</script><p>\n"];
81 // Ensure that #value is not filtered if it is marked as safe.
84 '#value' => Markup::create('<script>value</script>'),
86 $tags[] = [$element, "<p><script>value</script></p>\n"];
88 // Ensure that #value is filtered if it is not safe.
91 '#value' => '<script>value</script>',
93 $tags[] = [$element, "<p>value</p>\n"];
99 * @covers ::preRenderConditionalComments
100 * @dataProvider providerPreRenderConditionalComments
102 public function testPreRenderConditionalComments($element, $expected, $set_safe = FALSE) {
104 $element['#prefix'] = Markup::create($element['#prefix']);
105 $element['#suffix'] = Markup::create($element['#suffix']);
107 $this->assertEquals($expected, HtmlTag::preRenderConditionalComments($element));
111 * Data provider for conditional comments test.
113 public function providerPreRenderConditionalComments() {
114 // No browser specification.
118 $tags[] = [$element, $element];
120 // Specify all browsers.
121 $element['#browsers'] = [
125 $tags[] = [$element, $element];
135 $expected = $element;
136 $expected['#prefix'] = "\n<!--[if IE]>\n";
137 $expected['#suffix'] = "<![endif]-->\n";
138 $tags[] = [$element, $expected];
147 $expected = $element;
148 $expected['#prefix'] = "\n<!--[if !IE]><!-->\n";
149 $expected['#suffix'] = "<!--<![endif]-->\n";
150 $tags[] = [$element, $expected];
159 $expected = $element;
160 $expected['#prefix'] = "\n<!--[if gt IE 8]><!-->\n";
161 $expected['#suffix'] = "<!--<![endif]-->\n";
162 $tags[] = [$element, $expected];
164 // Prefix and suffix filtering if not safe.
170 '#prefix' => '<blink>prefix</blink>',
171 '#suffix' => '<blink>suffix</blink>',
173 $expected = $element;
174 $expected['#prefix'] = "\n<!--[if !IE]><!-->\nprefix";
175 $expected['#suffix'] = "suffix<!--<![endif]-->\n";
176 $tags[] = [$element, $expected];
178 // Prefix and suffix filtering if marked as safe. This has to come after the
179 // previous test case.
180 $expected['#prefix'] = "\n<!--[if !IE]><!-->\n<blink>prefix</blink>";
181 $expected['#suffix'] = "<blink>suffix</blink><!--<![endif]-->\n";
182 $tags[] = [$element, $expected, TRUE];