class InlineTests extends BaseTest { /** @type {Markdown} */ parser; md(markdown) { return normalizeWhitespace(this.parser.toHTML(markdown)); } setUp() { this.parser = Markdown.completeParser; } test_simpleText() { let markdown = 'Lorem ipsum'; let expected = 'Lorem ipsum'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_strong() { let markdown = 'Lorem **ipsum** dolor **sit**'; let expected = 'Lorem ipsum dolor sit'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_emphasis() { let markdown = 'Lorem _ipsum_ dolor _sit_'; let expected = 'Lorem ipsum dolor sit'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_strongEmphasis_cleanNesting1() { let markdown = 'Lorem **ipsum *dolor* sit** amet'; let expected = 'Lorem ipsum dolor sit amet'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_strongEmphasis_cleanNesting2() { let markdown = 'Lorem *ipsum **dolor** sit* amet'; let expected = 'Lorem ipsum dolor sit amet'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_strongEmphasis_tightNesting() { let markdown = 'Lorem ***ipsum*** dolor'; let expected1 = 'Lorem ipsum dolor'; let expected2 = 'Lorem ipsum dolor'; let actual = this.md(markdown); this.assertTrue(actual == expected1 || actual == expected2); } test_strongEmphasis_lopsidedNesting1() { let markdown = 'Lorem ***ipsum* dolor** sit'; let expected = 'Lorem ipsum dolor sit'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_strongEmphasis_lopsidedNesting2() { let markdown = 'Lorem ***ipsum** dolor* sit'; let expected = 'Lorem ipsum dolor sit'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_strongEmphasis_lopsidedNesting3() { let markdown = 'Lorem **ipsum *dolor*** sit'; let expected = 'Lorem ipsum dolor sit'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_strongEmphasis_lopsidedNesting4() { let markdown = 'Lorem *ipsum **dolor*** sit'; let expected = 'Lorem ipsum dolor sit'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_inlineCode() { let markdown = 'Lorem `ipsum` dolor'; let expected = 'Lorem ipsum dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_inlineCode_withInnerBacktick() { let markdown = 'Lorem ``ip`su`m`` dolor'; let expected = 'Lorem ip`su`m dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_strikethrough_double() { let markdown = 'Lorem ~~ipsum~~ dolor'; let expected = 'Lorem ipsum dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_subscript() { let markdown = 'H~2~O'; let expected = 'H2O'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_superscript() { let markdown = 'E=mc^2^'; let expected = 'E=mc2'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_highlight() { let markdown = 'Lorem ==ipsum== dolor'; let expected = 'Lorem ipsum dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_underline() { let markdown = 'Lorem __ipsum__ dolor'; let expected = 'Lorem ipsum dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_link_fullyQualified() { let markdown = 'Lorem [ipsum](https://example.com/path/page.html) dolor'; let expected = 'Lorem ipsum dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_link_relative() { let markdown = 'Lorem [ipsum](page.html) dolor'; let expected = 'Lorem ipsum dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_link_title() { let markdown = 'Lorem [ipsum](page.html "link title") dolor'; let expected = 'Lorem ipsum dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_link_literal() { let markdown = 'Lorem dolor'; let expected = 'Lorem https://example.com dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_link_ref() { let markdown = "Lorem [ipsum][ref] dolor\n\n[ref]: https://example.com"; let expected = '

Lorem ipsum dolor

'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_link_email() { let markdown = 'Lorem [ipsum](user@example.com) dolor'; let expected = 'Lorem ipsum dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_link_email_withTitle() { let markdown = 'Lorem [ipsum](user@example.com "title") dolor'; let expected = 'Lorem ipsum dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_link_literalEmail() { let markdown = 'Lorem dolor'; let expected = 'Lorem user@example.com dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_link_image() { let markdown = 'Lorem [![alt](image.jpg)](page.html) ipsum'; let expected = 'Lorem alt ipsum'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_link_image_complex() { let markdown = 'Lorem [![alt] (image.jpg "image title")] (page.html "link title") ipsum'; let expected = 'Lorem alt ipsum'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_image() { let markdown = 'Lorem ![alt text](image.jpg) dolor'; let expected = 'Lorem alt text dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_image_noAlt() { let markdown = 'Lorem ![](image.jpg) dolor'; let expected = 'Lorem dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_image_withTitle() { let markdown = 'Lorem ![alt text](image.jpg "image title") dolor'; let expected = 'Lorem alt text dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_image_ref() { let markdown = 'Lorem ![alt text][ref] dolor\n\n' + '[ref]: image.jpg "image title"'; let expected = '

Lorem alt text dolor

'; let actual = this.md(markdown); this.assertEqual(actual, expected); } test_htmlTags() { let markdown = 'Lorem ipsum dolor'; let expected = 'Lorem ipsum dolor'; let actual = this.md(markdown); this.assertEqual(actual, expected); } }