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 [](page.html) ipsum';
$expected = 'Lorem
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
ipsum';
$actual = $this->md($markdown);
$this->assertSame($expected, $actual);
}
public function test_image() {
$markdown = 'Lorem  dolor';
$expected = 'Lorem
dolor';
$actual = $this->md($markdown);
$this->assertSame($expected, $actual);
}
public function test_image_noAlt() {
$markdown = 'Lorem  dolor';
$expected = 'Lorem
dolor';
$actual = $this->md($markdown);
$this->assertSame($expected, $actual);
}
public function test_image_withTitle() {
$markdown = 'Lorem  dolor';
$expected = 'Lorem
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
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);
}
}