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);
+ });
+ }
+
}