3 namespace Tests\Entity;
5 use BookStack\Entities\Tools\Markdown\HtmlToMarkdown;
8 class MarkdownToHtmlTest extends TestCase
10 public function test_basic_formatting_conversion()
12 $this->assertConversion(
13 '<h1>Dogcat</h1><p>Some <strong>bold</strong> text</p>',
14 "# Dogcat\n\nSome **bold** text"
18 public function test_callouts_remain_html()
20 $this->assertConversion(
21 '<h1>Dogcat</h1><p class="callout info">Some callout text</p><p>Another line</p>',
22 "# Dogcat\n\n<p class=\"callout info\">Some callout text</p>\n\nAnother line"
26 public function test_wysiwyg_code_format_handled_cleanly()
28 $this->assertConversion(
29 '<h1>Dogcat</h1>' . "\r\n" . '<pre id="bkmrk-var-a-%3D-%27cat%27%3B"><code class="language-JavaScript">var a = \'cat\';</code></pre><p>Another line</p>',
30 "# Dogcat\n\n```JavaScript\nvar a = 'cat';\n```\n\nAnother line"
34 public function test_tasklist_checkboxes_are_handled()
36 $this->assertConversion(
37 '<ul><li><input type="checkbox" checked="checked">Item A</li><li><input type="checkbox">Item B</li></ul>',
38 "- [x] Item A\n- [ ] Item B"
42 public function test_drawing_blocks_remain_html()
44 $this->assertConversion(
45 '<div drawio-diagram="190" id="bkmrk--0" contenteditable="false"><img src="http://example.com/uploads/images/drawio/2022-04/drawing-1.png" alt="" /></div>Some text',
46 '<div drawio-diagram="190"><img src="http://example.com/uploads/images/drawio/2022-04/drawing-1.png" alt=""/></div>' . "\n\nSome text"
50 protected function assertConversion(string $html, string $expectedMarkdown, bool $partialMdMatch = false)
52 $markdown = (new HtmlToMarkdown($html))->convert();
54 if ($partialMdMatch) {
55 static::assertStringContainsString($expectedMarkdown, $markdown);
57 static::assertEquals($expectedMarkdown, $markdown);