DelimiterProcessingTest.php 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. * Additional emphasis processing code based on commonmark-java (https://github.com/atlassian/commonmark-java)
  9. * - (c) Atlassian Pty Ltd
  10. *
  11. * For the full copyright and license information, please view the LICENSE
  12. * file that was distributed with this source code.
  13. */
  14. namespace League\CommonMark\Tests\Functional\Delimiter;
  15. use League\CommonMark\Environment\Environment;
  16. use League\CommonMark\Exception\InvalidArgumentException;
  17. use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
  18. use League\CommonMark\MarkdownConverter;
  19. use PHPUnit\Framework\TestCase;
  20. final class DelimiterProcessingTest extends TestCase
  21. {
  22. public function testDelimiterProcessorWithInvalidDelimiterUse(): void
  23. {
  24. $e = new Environment();
  25. $e->addExtension(new CommonMarkCoreExtension());
  26. $e->addDelimiterProcessor(new FakeDelimiterProcessor(':', 0));
  27. $e->addDelimiterProcessor(new FakeDelimiterProcessor(';', -1));
  28. $c = new MarkdownConverter($e);
  29. $this->assertEquals("<p>:test:</p>\n", $c->convert(':test:'));
  30. $this->assertEquals("<p>;test;</p>\n", $c->convert(';test;'));
  31. }
  32. /**
  33. * @dataProvider asymmetricDelimiterDataProvider
  34. */
  35. public function testAsymmetricDelimiterProcessing(string $input, string $expected): void
  36. {
  37. $e = new Environment();
  38. $e->addExtension(new CommonMarkCoreExtension());
  39. $e->addDelimiterProcessor(new UppercaseDelimiterProcessor());
  40. $e->addRenderer(UppercaseText::class, new UppercaseTextRenderer());
  41. $converter = new MarkdownConverter($e);
  42. $this->assertEquals($expected, $converter->convert($input));
  43. }
  44. /**
  45. * @return iterable<array<string>>
  46. */
  47. public function asymmetricDelimiterDataProvider(): iterable
  48. {
  49. yield ['{foo} bar', "<p>FOO bar</p>\n"];
  50. yield ['f{oo ba}r', "<p>fOO BAr</p>\n"];
  51. yield ['{{foo} bar', "<p>{FOO bar</p>\n"];
  52. yield ['{foo}} bar', "<p>FOO} bar</p>\n"];
  53. yield ['{{foo} bar}', "<p>FOO BAR</p>\n"];
  54. yield ['{foo bar', "<p>{foo bar</p>\n"];
  55. yield ['foo} bar', "<p>foo} bar</p>\n"];
  56. yield ['}foo} bar', "<p>}foo} bar</p>\n"];
  57. yield ['{foo{ bar', "<p>{foo{ bar</p>\n"];
  58. yield ['}foo{ bar', "<p>}foo{ bar</p>\n"];
  59. yield ['{} {foo}', "<p> FOO</p>\n"];
  60. }
  61. public function testMultipleDelimitersWithDifferentLengths(): void
  62. {
  63. $e = new Environment();
  64. $e->addExtension(new CommonMarkCoreExtension());
  65. $e->addDelimiterProcessor(new TestDelimiterProcessor('@', 1));
  66. $e->addDelimiterProcessor(new TestDelimiterProcessor('@', 2));
  67. $c = new MarkdownConverter($e);
  68. $this->assertEquals("<p>(1)one(/1) (2)two(/2)</p>\n", $c->convert('@one@ @@two@@'));
  69. $this->assertEquals("<p>(1)(2)both(/2)(/1)</p>\n", $c->convert('@@@both@@@'));
  70. }
  71. public function testMultipleDelimitersWithSameLength(): void
  72. {
  73. $this->expectException(InvalidArgumentException::class);
  74. $e = new Environment();
  75. $e->addExtension(new CommonMarkCoreExtension());
  76. $e->addDelimiterProcessor(new TestDelimiterProcessor('@', 1));
  77. $e->addDelimiterProcessor(new TestDelimiterProcessor('@', 1));
  78. }
  79. }