You are here

public function TwigExtensionTest::testSafeJoin in Drupal 10

Same name and namespace in other branches
  1. 8 core/tests/Drupal/Tests/Core/Template/TwigExtensionTest.php \Drupal\Tests\Core\Template\TwigExtensionTest::testSafeJoin()
  2. 9 core/tests/Drupal/Tests/Core/Template/TwigExtensionTest.php \Drupal\Tests\Core\Template\TwigExtensionTest::testSafeJoin()

@covers ::safeJoin

File

core/tests/Drupal/Tests/Core/Template/TwigExtensionTest.php, line 244

Class

TwigExtensionTest
Tests the twig extension.

Namespace

Drupal\Tests\Core\Template

Code

public function testSafeJoin() {
  $this->renderer
    ->expects($this
    ->any())
    ->method('render')
    ->with([
    '#markup' => '<strong>will be rendered</strong>',
    '#printed' => FALSE,
  ])
    ->willReturn('<strong>will be rendered</strong>');
  $twig_environment = $this
    ->prophesize(TwigEnvironment::class)
    ->reveal();

  // Simulate t().
  $markup = $this
    ->prophesize(TranslatableMarkup::class);
  $markup
    ->__toString()
    ->willReturn('<em>will be markup</em>');
  $markup = $markup
    ->reveal();
  $items = [
    '<em>will be escaped</em>',
    $markup,
    [
      '#markup' => '<strong>will be rendered</strong>',
    ],
  ];
  $result = $this->systemUnderTest
    ->safeJoin($twig_environment, $items, '<br/>');
  $this
    ->assertEquals('&lt;em&gt;will be escaped&lt;/em&gt;<br/><em>will be markup</em><br/><strong>will be rendered</strong>', $result);

  // Ensure safe_join Twig filter supports Traversable variables.
  $items = new \ArrayObject([
    '<em>will be escaped</em>',
    $markup,
    [
      '#markup' => '<strong>will be rendered</strong>',
    ],
  ]);
  $result = $this->systemUnderTest
    ->safeJoin($twig_environment, $items, ', ');
  $this
    ->assertEquals('&lt;em&gt;will be escaped&lt;/em&gt;, <em>will be markup</em>, <strong>will be rendered</strong>', $result);

  // Ensure safe_join Twig filter supports empty variables.
  $items = NULL;
  $result = $this->systemUnderTest
    ->safeJoin($twig_environment, $items, '<br>');
  $this
    ->assertEmpty($result);
}