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