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 ipsum dolor sit'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_emphasis() { $markdown = 'Lorem _ipsum_ dolor _sit_'; $expected = 'Lorem ipsum dolor sit'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_strongEmphasis_cleanNesting1() { $markdown = 'Lorem **ipsum *dolor* sit** amet'; $expected = 'Lorem ipsum dolor sit amet'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_strongEmphasis_cleanNesting2() { $markdown = 'Lorem *ipsum **dolor** sit* amet'; $expected = 'Lorem ipsum dolor sit amet'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_strongEmphasis_tightNesting() { $markdown = 'Lorem ***ipsum*** dolor'; $expected = 'Lorem ipsum dolor'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_strongEmphasis_lopsidedNesting1() { $markdown = 'Lorem ***ipsum* dolor** sit'; $expected = 'Lorem ipsum dolor sit'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_strongEmphasis_lopsidedNesting2() { $markdown = 'Lorem ***ipsum** dolor* sit'; $expected = 'Lorem ipsum dolor sit'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_strongEmphasis_lopsidedNesting3() { $markdown = 'Lorem **ipsum *dolor*** sit'; $expected = 'Lorem ipsum dolor sit'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_strongEmphasis_lopsidedNesting4() { $markdown = 'Lorem *ipsum **dolor*** sit'; $expected = 'Lorem ipsum dolor sit'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_inlineCode() { $markdown = 'Lorem `ipsum` dolor'; $expected = 'Lorem ipsum dolor'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_inlineCode_withInnerBacktick() { $markdown = 'Lorem ``ip`su`m`` dolor'; $expected = 'Lorem ip`su`m dolor'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_strikethrough_double() { $markdown = 'Lorem ~~ipsum~~ dolor'; $expected = 'Lorem ipsum dolor'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_subscript() { $markdown = 'H~2~O'; $expected = 'H2O'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_superscript() { $markdown = 'E=mc^2^'; $expected = 'E=mc2'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_highlight() { $markdown = 'Lorem ==ipsum== dolor'; $expected = 'Lorem ipsum dolor'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_underline() { $markdown = 'Lorem __ipsum__ dolor'; $expected = 'Lorem ipsum 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 ipsum dolor'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_link_relative() { $markdown = 'Lorem [ipsum](page.html) dolor'; $expected = 'Lorem ipsum dolor'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_link_title() { $markdown = 'Lorem [ipsum](page.html "link title") dolor'; $expected = 'Lorem ipsum dolor'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_link_literal() { $markdown = 'Lorem dolor'; $expected = 'Lorem https://example.com 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 = '

Lorem ipsum dolor

'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_link_email() { $markdown = 'Lorem [ipsum](user@example.com) dolor'; $expected = 'Lorem ipsum 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 ipsum dolor'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_link_literalEmail() { $markdown = 'Lorem dolor'; $expected = 'Lorem user@example.com dolor'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_link_image() { $markdown = 'Lorem [![alt](image.jpg)](page.html) ipsum'; $expected = 'Lorem alt 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 alt ipsum'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_image() { $markdown = 'Lorem ![alt text](image.jpg) dolor'; $expected = 'Lorem alt text dolor'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_image_noAlt() { $markdown = 'Lorem ![](image.jpg) dolor'; $expected = 'Lorem dolor'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_image_withTitle() { $markdown = 'Lorem ![alt text](image.jpg "image title") dolor'; $expected = 'Lorem alt text 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 = '

Lorem alt text dolor

'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } public function test_htmlTags() { $markdown = 'Lorem ipsum dolor'; $expected = 'Lorem ipsum dolor'; $actual = $this->md($markdown); $this->assertSame($expected, $actual); } }