assertEquals($expected, $this->renderObjectWithTwig($variable)); } /** * Provide test examples. */ public function providerTestMarkupInterfaceEmpty() { return [ // @codingStandardsIgnoreStart // The first argument to \Drupal\Core\StringTranslation\TranslatableMarkup // is not supposed to be an empty string. 'empty TranslatableMarkup' => ['', new TranslatableMarkup('')], // @codingStandardsIgnoreEnd 'non-empty TranslatableMarkup' => ['test', new TranslatableMarkup('test')], 'empty FormattableMarkup' => ['', new FormattableMarkup('', ['@foo' => 'bar'])], 'non-empty FormattableMarkup' => ['bar', new FormattableMarkup('@foo', ['@foo' => 'bar'])], 'non-empty Markup' => ['test', Markup::create('test')], 'empty GeneratedLink' => ['', new GeneratedLink()], 'non-empty GeneratedLink' => ['test', (new GeneratedLink())->setGeneratedLink('test')], // Test objects that do not implement \Countable. 'empty SafeMarkupTestMarkup' => ['', SafeMarkupTestMarkup::create('')], 'non-empty SafeMarkupTestMarkup' => ['test', SafeMarkupTestMarkup::create('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' => ['variable' => $variable], ]; return $renderer->render($elements); }); } } /** * Implements MarkupInterface without implementing \Countable */ class SafeMarkupTestMarkup implements MarkupInterface { use MarkupTrait; /** * Overrides MarkupTrait::create() to allow creation with empty strings. */ public static function create($string) { $object = new static(); $object->string = $string; return $object; } }