diff --git a/core/lib/Drupal/Core/GeneratedLink.php b/core/lib/Drupal/Core/GeneratedLink.php index be1d354..21d8b35 100644 --- a/core/lib/Drupal/Core/GeneratedLink.php +++ b/core/lib/Drupal/Core/GeneratedLink.php @@ -8,6 +8,7 @@ namespace Drupal\Core; use Drupal\Component\Render\MarkupInterface; +use Drupal\Component\Utility\Unicode; use Drupal\Core\Render\BubbleableMetadata; /** diff --git a/core/tests/Drupal/KernelTests/Core/Theme/TwigMarkupInterfaceTest.php b/core/tests/Drupal/KernelTests/Core/Theme/TwigMarkupInterfaceTest.php index c8b5d3c..9150cba 100644 --- a/core/tests/Drupal/KernelTests/Core/Theme/TwigMarkupInterfaceTest.php +++ b/core/tests/Drupal/KernelTests/Core/Theme/TwigMarkupInterfaceTest.php @@ -8,36 +8,35 @@ namespace Drupal\KernelTests\Core\Theme; use Drupal\Component\Render\FormattableMarkup; +use Drupal\Core\GeneratedLink; use Drupal\Core\Render\RenderContext; use Drupal\Core\Render\Markup; +use Drupal\Core\Site\Settings; use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\Core\Template\Attribute; use Drupal\KernelTests\KernelTestBase; /** - * Tests. + * Tests Twig with MarkupInterface objects. * * @group Theme */ class TwigMarkupInterfaceTest extends KernelTestBase { /** + * Modules to enable. + * + * @var array + */ + public static $modules = [ + 'language' + ]; + + /** * @dataProvider providerTestMarkupInterfaceEmpty */ public function testMarkupInterfaceEmpty($expected, $variable) { - //var_dump($variable); - /** @var \Drupal\Core\Render\RendererInterface $renderer */ - $renderer = \Drupal::service('renderer'); - $context = new RenderContext(); - $output = $renderer->executeInRenderContext($context, function () use ($renderer, $variable) { - $elements = [ - '#type' => 'inline_template', - '#template' => '{%- if variable is not empty -%}{{ variable }}{%- endif -%}', - '#context' => array('variable' => $variable), - ]; - return $renderer->render($elements); - }); - $this->assertEquals($expected, $output); + $this->assertEquals($expected, $this->renderObjectWithTwig($variable)); } /** @@ -52,7 +51,43 @@ public function providerTestMarkupInterfaceEmpty() { 'non-empty Markup' => ['test', Markup::create('test')], 'empty Attribute' => ['', new Attribute()], 'non-empty Attribute' => [' id="test"', new Attribute(['id' => 'test'])], + 'empty GeneratedLink' => ['', new GeneratedLink()], + 'non-empty Attribute' => ['test', (new GeneratedLink())->setGeneratedLink('test')], ]; } + /** + * Tests behaviour if a string is translated to become an empty string. + */ + public function testEmptyTranslation() { + $settings = Settings::getAll(); + $settings['locale_custom_strings_en'] = ['' => ['test' => '']]; + // Recreate the settings static. + new Settings($settings); + + $variable = new TranslatableMarkup('test'); + $this->assertEquals('', $this->renderObjectWithTwig($variable)); + + $variable = new TranslatableMarkup('test', [], ['langcode' => 'de']); + $this->assertEquals('test', $this->renderObjectWithTwig($variable)); + } + + /** + * @return \Drupal\Component\Render\MarkupInterface + * The rendered HTML. + */ + protected function renderObjectWithTwig($variable) { + /** @var \Drupal\Core\Render\RendererInterface $renderer */ + $renderer = \Drupal::service('renderer'); + $context = new RenderContext(); + return $renderer->executeInRenderContext($context, function () use ($renderer, $variable) { + $elements = [ + '#type' => 'inline_template', + '#template' => '{%- if variable is not empty -%}{{ variable }}{%- endif -%}', + '#context' => array('variable' => $variable), + ]; + return $renderer->render($elements); + }); + } + }