ExternalLinkExtensionTest.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4. * This file is part of the league/commonmark package.
  5. *
  6. * (c) Colin O'Dell <colinodell@gmail.com>
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace League\CommonMark\Tests\Functional\Extension\ExternalLink;
  12. use League\CommonMark\CommonMarkConverter;
  13. use League\CommonMark\Environment\Environment;
  14. use League\CommonMark\Environment\EnvironmentInterface;
  15. use League\CommonMark\Extension\Autolink\AutolinkExtension;
  16. use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
  17. use League\CommonMark\Extension\ExternalLink\ExternalLinkExtension;
  18. use League\CommonMark\Parser\MarkdownParser;
  19. use League\CommonMark\Renderer\HtmlRenderer;
  20. use PHPUnit\Framework\TestCase;
  21. final class ExternalLinkExtensionTest extends TestCase
  22. {
  23. /**
  24. * @dataProvider provideEnvironmentForTestingExtensionWithAutolinks
  25. */
  26. public function testExtensionWithAutolinks(EnvironmentInterface $environment): void
  27. {
  28. $markdown = 'Email me at colinodell@gmail.com or read the docs at https://commonmark.thephpleague.com';
  29. $expectedHtml = '<p>Email me at <a href="mailto:colinodell@gmail.com">colinodell@gmail.com</a> or read the docs at <a rel="noopener noreferrer" class="external-link" href="https://commonmark.thephpleague.com">https://commonmark.thephpleague.com</a></p>';
  30. $parser = new MarkdownParser($environment);
  31. $renderer = new HtmlRenderer($environment);
  32. $this->assertSame($expectedHtml, \rtrim($renderer->renderDocument($parser->parse($markdown))->getContent()));
  33. }
  34. /**
  35. * @return iterable<mixed>
  36. */
  37. public function provideEnvironmentForTestingExtensionWithAutolinks(): iterable
  38. {
  39. $environment1 = new Environment([
  40. 'external_link' => [
  41. 'html_class' => 'external-link',
  42. ],
  43. ]);
  44. $environment1->addExtension(new CommonMarkCoreExtension());
  45. $environment1->addExtension(new ExternalLinkExtension());
  46. $environment1->addExtension(new AutolinkExtension());
  47. yield 'Register ExternalLink extension first' => [$environment1];
  48. $environment2 = new Environment([
  49. 'external_link' => [
  50. 'html_class' => 'external-link',
  51. ],
  52. ]);
  53. $environment2->addExtension(new CommonMarkCoreExtension());
  54. $environment2->addExtension(new AutolinkExtension());
  55. $environment2->addExtension(new ExternalLinkExtension());
  56. yield 'Register Autolink extension first' => [$environment2];
  57. }
  58. public function testExtensionWithRelAttrsDisabled(): void
  59. {
  60. $config = [
  61. 'external_link' => [
  62. 'internal_hosts' => ['my-internal-domain.com'],
  63. 'open_in_new_window' => true,
  64. 'nofollow' => '',
  65. 'noopener' => '',
  66. 'noreferrer' => '',
  67. ],
  68. ];
  69. $converter = new CommonMarkConverter($config);
  70. $converter->getEnvironment()->addExtension(new ExternalLinkExtension());
  71. $input = 'This is an external link [Google](https://google.com/).';
  72. $expectedHtml = '<p>This is an external link <a target="_blank" href="https://google.com/">Google</a>.</p>';
  73. $this->assertSame($expectedHtml, \rtrim($converter->convert($input)->getContent()));
  74. }
  75. }