| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- <?php
- declare(strict_types=1);
-
- use PHPUnit\Framework\TestCase;
-
- require_once __DIR__ . '/../php/markdown.php';
-
- final class InlineTests extends TestCase {
- /** @type {Markdown} */
- private ?Markdown $parser = null;
-
- protected function setUp(): void {
- parent::setUp();
- $this->parser = Markdown::completeParser();
- }
-
- private function md(string $markdown): string {
- return $this->normalizeWhitespace($this->parser->toHTML($markdown));
- }
-
- private function normalizeWhitespace(string $str): string {
- $str = mb_eregi_replace('\\s+', ' ', $str);
- return trim($str);
- }
-
- public function test_simpleText() {
- $markdown = 'Lorem ipsum';
- $expected = 'Lorem ipsum';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_strong() {
- $markdown = 'Lorem **ipsum** dolor **sit**';
- $expected = 'Lorem <strong>ipsum</strong> dolor <strong>sit</strong>';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_emphasis() {
- $markdown = 'Lorem _ipsum_ dolor _sit_';
- $expected = 'Lorem <em>ipsum</em> dolor <em>sit</em>';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_strongEmphasis_cleanNesting1() {
- $markdown = 'Lorem **ipsum *dolor* sit** amet';
- $expected = 'Lorem <strong>ipsum <em>dolor</em> sit</strong> amet';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_strongEmphasis_cleanNesting2() {
- $markdown = 'Lorem *ipsum **dolor** sit* amet';
- $expected = 'Lorem <em>ipsum <strong>dolor</strong> sit</em> amet';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_strongEmphasis_tightNesting() {
- $markdown = 'Lorem ***ipsum*** dolor';
- $expected = 'Lorem <strong><em>ipsum</em></strong> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_strongEmphasis_lopsidedNesting1() {
- $markdown = 'Lorem ***ipsum* dolor** sit';
- $expected = 'Lorem <strong><em>ipsum</em> dolor</strong> sit';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_strongEmphasis_lopsidedNesting2() {
- $markdown = 'Lorem ***ipsum** dolor* sit';
- $expected = 'Lorem <em><strong>ipsum</strong> dolor</em> sit';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_strongEmphasis_lopsidedNesting3() {
- $markdown = 'Lorem **ipsum *dolor*** sit';
- $expected = 'Lorem <strong>ipsum <em>dolor</em></strong> sit';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_strongEmphasis_lopsidedNesting4() {
- $markdown = 'Lorem *ipsum **dolor*** sit';
- $expected = 'Lorem <em>ipsum <strong>dolor</strong></em> sit';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_inlineCode() {
- $markdown = 'Lorem `ipsum` dolor';
- $expected = 'Lorem <code>ipsum</code> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_inlineCode_withInnerBacktick() {
- $markdown = 'Lorem ``ip`su`m`` dolor';
- $expected = 'Lorem <code>ip`su`m</code> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_strikethrough_double() {
- $markdown = 'Lorem ~~ipsum~~ dolor';
- $expected = 'Lorem <s>ipsum</s> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_subscript() {
- $markdown = 'H~2~O';
- $expected = 'H<sub>2</sub>O';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_superscript() {
- $markdown = 'E=mc^2^';
- $expected = 'E=mc<sup>2</sup>';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_highlight() {
- $markdown = 'Lorem ==ipsum== dolor';
- $expected = 'Lorem <mark>ipsum</mark> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_underline() {
- $markdown = 'Lorem __ipsum__ dolor';
- $expected = 'Lorem <u>ipsum</u> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_link_fullyQualified() {
- $markdown = 'Lorem [ipsum](https://example.com/path/page.html) dolor';
- $expected = 'Lorem <a href="https://example.com/path/page.html">ipsum</a> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_link_relative() {
- $markdown = 'Lorem [ipsum](page.html) dolor';
- $expected = 'Lorem <a href="page.html">ipsum</a> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_link_title() {
- $markdown = 'Lorem [ipsum](page.html "link title") dolor';
- $expected = 'Lorem <a href="page.html" title="link title">ipsum</a> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_link_literal() {
- $markdown = 'Lorem <https://example.com> dolor';
- $expected = 'Lorem <a href="https://example.com">https://example.com</a> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_link_ref() {
- $markdown = "Lorem [ipsum][ref] dolor\n\n[ref]: https://example.com";
- $expected = '<p>Lorem <a href="https://example.com">ipsum</a> dolor</p>';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_link_email() {
- $markdown = 'Lorem [ipsum](user@example.com) dolor';
- $expected = 'Lorem <a href="mailto:user@example.com">ipsum</a> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_link_email_withTitle() {
- $markdown = 'Lorem [ipsum](user@example.com "title") dolor';
- $expected = 'Lorem <a href="mailto:user@example.com" title="title">ipsum</a> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_link_literalEmail() {
- $markdown = 'Lorem <user@example.com> dolor';
- $expected = 'Lorem <a href="mailto:user@example.com">user@example.com</a> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_link_image() {
- $markdown = 'Lorem [](page.html) ipsum';
- $expected = 'Lorem <a href="page.html"><img src="image.jpg" alt="alt"></a> ipsum';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_link_image_complex() {
- $markdown = 'Lorem [![alt] (image.jpg "image title")] (page.html "link title") ipsum';
- $expected = 'Lorem <a href="page.html" title="link title"><img src="image.jpg" alt="alt" title="image title"></a> ipsum';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_image() {
- $markdown = 'Lorem  dolor';
- $expected = 'Lorem <img src="image.jpg" alt="alt text"> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_image_noAlt() {
- $markdown = 'Lorem  dolor';
- $expected = 'Lorem <img src="image.jpg"> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_image_withTitle() {
- $markdown = 'Lorem  dolor';
- $expected = 'Lorem <img src="image.jpg" alt="alt text" title="image title"> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_image_ref() {
- $markdown = "Lorem ![alt text][ref] dolor\n\n" .
- '[ref]: image.jpg "image title"';
- $expected = '<p>Lorem <img src="image.jpg" alt="alt text" title="image title"> dolor</p>';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
-
- public function test_htmlTags() {
- $markdown = 'Lorem <strong title=\'with " quote\' id="with \' apostrophe" lang=unquoted translate forbidden="true">ipsum</strong> dolor';
- $expected = 'Lorem <strong title="with " quote" id="with \' apostrophe" lang="unquoted" translate>ipsum</strong> dolor';
- $actual = $this->md($markdown);
- $this->assertSame($expected, $actual);
- }
- }
|