Version 1
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / Url / LinkGenerationTest.php
diff --git a/web/core/tests/Drupal/KernelTests/Core/Url/LinkGenerationTest.php b/web/core/tests/Drupal/KernelTests/Core/Url/LinkGenerationTest.php
new file mode 100644 (file)
index 0000000..16452d0
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+
+namespace Drupal\KernelTests\Core\Url;
+
+use Drupal\Component\Render\MarkupInterface;
+use Drupal\Core\Render\RenderContext;
+use Drupal\Core\Url;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Tests link generation with hooks.
+ *
+ * @group Utility
+ */
+class LinkGenerationTest extends KernelTestBase {
+
+  public static $modules = ['link_generation_test'];
+
+  /**
+   * Tests how hook_link_alter() can affect escaping of the link text.
+   */
+  public function testHookLinkAlter() {
+    $url = Url::fromUri('http://example.com');
+    $renderer = \Drupal::service('renderer');
+
+    $link = $renderer->executeInRenderContext(new RenderContext(), function () use ($url) {
+      return \Drupal::l(['#markup' => '<em>link with markup</em>'], $url);
+    });
+    $this->setRawContent($link);
+    $this->assertTrue($link instanceof MarkupInterface, 'The output of link generation is marked safe as it is a link.');
+    // Ensure the content of the link is not escaped.
+    $this->assertRaw('<em>link with markup</em>');
+
+    // Test just adding text to an already safe string.
+    \Drupal::state()->set('link_generation_test_link_alter', TRUE);
+    $link = $renderer->executeInRenderContext(new RenderContext(), function () use ($url) {
+      return \Drupal::l(['#markup' => '<em>link with markup</em>'], $url);
+    });
+    $this->setRawContent($link);
+    $this->assertTrue($link instanceof MarkupInterface, 'The output of link generation is marked safe as it is a link.');
+    // Ensure the content of the link is escaped.
+    $this->assertEscaped('<em>link with markup</em> <strong>Test!</strong>');
+
+    // Test passing a safe string to t().
+    \Drupal::state()->set('link_generation_test_link_alter_safe', TRUE);
+    $link = $renderer->executeInRenderContext(new RenderContext(), function () use ($url) {
+      return \Drupal::l(['#markup' => '<em>link with markup</em>'], $url);
+    });
+    $this->setRawContent($link);
+    $this->assertTrue($link instanceof MarkupInterface, 'The output of link generation is marked safe as it is a link.');
+    // Ensure the content of the link is escaped.
+    $this->assertRaw('<em>link with markup</em> <strong>Test!</strong>');
+
+    // Test passing an unsafe string to t().
+    $link = $renderer->executeInRenderContext(new RenderContext(), function () use ($url) {
+      return \Drupal::l('<em>link with markup</em>', $url);
+    });
+    $this->setRawContent($link);
+    $this->assertTrue($link instanceof MarkupInterface, 'The output of link generation is marked safe as it is a link.');
+    // Ensure the content of the link is escaped.
+    $this->assertEscaped('<em>link with markup</em>');
+    $this->assertRaw('<strong>Test!</strong>');
+  }
+
+}