You are here

public function ThemeRenderAndAutoescapeTest::testBubblingMetadata in Drupal 9

Same name and namespace in other branches
  1. 8 core/tests/Drupal/KernelTests/Core/Theme/ThemeRenderAndAutoescapeTest.php \Drupal\KernelTests\Core\Theme\ThemeRenderAndAutoescapeTest::testBubblingMetadata()

Ensure cache metadata is bubbled when using theme_render_and_autoescape().

File

core/tests/Drupal/KernelTests/Core/Theme/ThemeRenderAndAutoescapeTest.php, line 85
Contains \Drupal\KernelTests\Core\Theme\ThemeRenderAndAutoescapeTest.

Class

ThemeRenderAndAutoescapeTest
Tests the theme_render_and_autoescape() function.

Namespace

Drupal\KernelTests\Core\Theme

Code

public function testBubblingMetadata() {
  $link = new GeneratedLink();
  $link
    ->setGeneratedLink('<a href="http://example.com"></a>');
  $link
    ->addCacheTags([
    'foo',
  ]);
  $link
    ->addAttachments([
    'library' => [
      'system/base',
    ],
  ]);
  $context = new RenderContext();

  // Use a closure here since we need to render with a render context.
  $theme_render_and_autoescape = function () use ($link) {
    return theme_render_and_autoescape($link);
  };

  /** @var \Drupal\Core\Render\RendererInterface $renderer */
  $renderer = \Drupal::service('renderer');
  $output = $renderer
    ->executeInRenderContext($context, $theme_render_and_autoescape);
  $this
    ->assertEquals('<a href="http://example.com"></a>', $output);

  /** @var \Drupal\Core\Render\BubbleableMetadata $metadata */
  $metadata = $context
    ->pop();
  $this
    ->assertEquals([
    'foo',
  ], $metadata
    ->getCacheTags());
  $this
    ->assertEquals([
    'library' => [
      'system/base',
    ],
  ], $metadata
    ->getAttachments());
}