/**
  * Ensures invalid content is handled correctly.
  *
  * @expectedException \Exception
  */
 public function testThemeEscapeAndRenderNotPrintable()
 {
     theme_render_and_autoescape(new NonPrintable());
 }
 /**
  * Ensure cache metadata is bubbled when using theme_render_and_autoescape().
  */
 public function testBubblingMetadataWithRenderable()
 {
     $link = new Link('', Url::fromRoute('<current>'));
     $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="/' . urlencode('<none>') . '"></a>', $output);
     /** @var \Drupal\Core\Render\BubbleableMetadata $metadata */
     $metadata = $context->pop();
     $this->assertEquals(['route'], $metadata->getCacheContexts());
 }