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 95 96 97
|
<?php
declare(strict_types=1);
namespace League\CommonMark\Tests\Unit\Renderer;
use League\CommonMark\Environment\Environment;
use League\CommonMark\Environment\EnvironmentInterface;
use League\CommonMark\Node\Block\Document;
use League\CommonMark\Node\Block\Paragraph;
use League\CommonMark\Node\Inline\Text;
use League\CommonMark\Renderer\HtmlRenderer;
use League\CommonMark\Renderer\NoMatchingRendererException;
use League\CommonMark\Renderer\NodeRendererInterface;
use PHPUnit\Framework\TestCase;
final class HtmlRendererTest extends TestCase
{
public function testRenderDocumentCallsDocumentRenderer(): void
{
$document = new Document();
$documentRenderer = $this->createMock(NodeRendererInterface::class);
$documentRenderer->method('render')->willReturn('::document::');
$environment = new Environment();
$environment->addRenderer(Document::class, $documentRenderer);
$htmlRenderer = new HtmlRenderer($environment);
$this->assertSame('::document::', (string) $htmlRenderer->renderDocument($document));
}
public function testRenderNodesWithBlocks(): void
{
$blockRenderer = $this->createMock(NodeRendererInterface::class);
$blockRenderer->method('render')->willReturn('::block::');
$environment = new Environment();
$environment->addRenderer(Paragraph::class, $blockRenderer);
$ast = new Document();
$ast->appendChild(new Paragraph());
$ast->appendChild(new Paragraph());
$renderer = new HtmlRenderer($environment);
$output = $renderer->renderNodes($ast->children());
$this->assertSame("::block::\n::block::", $output);
}
public function testRenderNodesWithInlines(): void
{
$inlineRenderer = $this->createMock(NodeRendererInterface::class);
$inlineRenderer->method('render')->willReturn('::inline::');
$environment = new Environment();
$environment->addRenderer(Text::class, $inlineRenderer);
$ast = new Paragraph();
$ast->appendChild(new Text());
$ast->appendChild(new Text());
$renderer = new HtmlRenderer($environment);
$output = $renderer->renderNodes($ast->children());
$this->assertSame('::inline::::inline::', $output);
}
public function testRenderNodesFallsBackWhenFirstRendererReturnsNull(): void
{
$renderer1 = $this->createMock(NodeRendererInterface::class);
$renderer1->expects($this->once())->method('render')->willReturn(null);
$renderer2 = $this->createMock(NodeRendererInterface::class);
$renderer2->expects($this->once())->method('render')->willReturn('::result::');
$environment = new Environment();
$environment->addRenderer(Text::class, $renderer1);
$environment->addRenderer(Text::class, $renderer2);
$renderer = new HtmlRenderer($environment);
$output = $renderer->renderNodes([new Text()]);
$this->assertSame('::result::', $output);
}
public function testRenderNodesWithMissingRenderer(): void
{
$this->expectException(NoMatchingRendererException::class);
$environment = $this->createMock(EnvironmentInterface::class);
$environment->method('getRenderersForClass')->willReturn([]);
$renderer = new HtmlRenderer($environment);
$renderer->renderNodes([new Paragraph()]);
}
}
|