PHP and Javascript implementations of a simple markdown parser
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

InlineTests.js 7.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. class InlineTests extends BaseTest {
  2. /** @type {Markdown} */
  3. parser;
  4. md(markdown) {
  5. return normalizeWhitespace(this.parser.toHTML(markdown));
  6. }
  7. setUp() {
  8. this.parser = Markdown.completeParser;
  9. }
  10. test_simpleText() {
  11. let markdown = 'Lorem ipsum';
  12. let expected = 'Lorem ipsum';
  13. let actual = this.md(markdown);
  14. this.assertEqual(actual, expected);
  15. }
  16. test_strong() {
  17. let markdown = 'Lorem **ipsum** dolor **sit**';
  18. let expected = 'Lorem <strong>ipsum</strong> dolor <strong>sit</strong>';
  19. let actual = this.md(markdown);
  20. this.assertEqual(actual, expected);
  21. }
  22. test_emphasis() {
  23. let markdown = 'Lorem _ipsum_ dolor _sit_';
  24. let expected = 'Lorem <em>ipsum</em> dolor <em>sit</em>';
  25. let actual = this.md(markdown);
  26. this.assertEqual(actual, expected);
  27. }
  28. test_strongEmphasis_cleanNesting1() {
  29. let markdown = 'Lorem **ipsum *dolor* sit** amet';
  30. let expected = 'Lorem <strong>ipsum <em>dolor</em> sit</strong> amet';
  31. let actual = this.md(markdown);
  32. this.assertEqual(actual, expected);
  33. }
  34. test_strongEmphasis_cleanNesting2() {
  35. let markdown = 'Lorem *ipsum **dolor** sit* amet';
  36. let expected = 'Lorem <em>ipsum <strong>dolor</strong> sit</em> amet';
  37. let actual = this.md(markdown);
  38. this.assertEqual(actual, expected);
  39. }
  40. test_strongEmphasis_tightNesting() {
  41. let markdown = 'Lorem ***ipsum*** dolor';
  42. let expected1 = 'Lorem <strong><em>ipsum</em></strong> dolor';
  43. let expected2 = 'Lorem <em><strong>ipsum</strong></em> dolor';
  44. let actual = this.md(markdown);
  45. this.assertTrue(actual == expected1 || actual == expected2);
  46. }
  47. test_strongEmphasis_lopsidedNesting1() {
  48. let markdown = 'Lorem ***ipsum* dolor** sit';
  49. let expected = 'Lorem <strong><em>ipsum</em> dolor</strong> sit';
  50. let actual = this.md(markdown);
  51. this.assertEqual(actual, expected);
  52. }
  53. test_strongEmphasis_lopsidedNesting2() {
  54. let markdown = 'Lorem ***ipsum** dolor* sit';
  55. let expected = 'Lorem <em><strong>ipsum</strong> dolor</em> sit';
  56. let actual = this.md(markdown);
  57. this.assertEqual(actual, expected);
  58. }
  59. test_strongEmphasis_lopsidedNesting3() {
  60. let markdown = 'Lorem **ipsum *dolor*** sit';
  61. let expected = 'Lorem <strong>ipsum <em>dolor</em></strong> sit';
  62. let actual = this.md(markdown);
  63. this.assertEqual(actual, expected);
  64. }
  65. test_strongEmphasis_lopsidedNesting4() {
  66. let markdown = 'Lorem *ipsum **dolor*** sit';
  67. let expected = 'Lorem <em>ipsum <strong>dolor</strong></em> sit';
  68. let actual = this.md(markdown);
  69. this.assertEqual(actual, expected);
  70. }
  71. test_inlineCode() {
  72. let markdown = 'Lorem `ipsum` dolor';
  73. let expected = 'Lorem <code>ipsum</code> dolor';
  74. let actual = this.md(markdown);
  75. this.assertEqual(actual, expected);
  76. }
  77. test_inlineCode_withInnerBacktick() {
  78. let markdown = 'Lorem ``ip`su`m`` dolor';
  79. let expected = 'Lorem <code>ip`su`m</code> dolor';
  80. let actual = this.md(markdown);
  81. this.assertEqual(actual, expected);
  82. }
  83. test_strikethrough_double() {
  84. let markdown = 'Lorem ~~ipsum~~ dolor';
  85. let expected = 'Lorem <s>ipsum</s> dolor';
  86. let actual = this.md(markdown);
  87. this.assertEqual(actual, expected);
  88. }
  89. test_subscript() {
  90. let markdown = 'H~2~O';
  91. let expected = 'H<sub>2</sub>O';
  92. let actual = this.md(markdown);
  93. this.assertEqual(actual, expected);
  94. }
  95. test_superscript() {
  96. let markdown = 'E=mc^2^';
  97. let expected = 'E=mc<sup>2</sup>';
  98. let actual = this.md(markdown);
  99. this.assertEqual(actual, expected);
  100. }
  101. test_highlight() {
  102. let markdown = 'Lorem ==ipsum== dolor';
  103. let expected = 'Lorem <mark>ipsum</mark> dolor';
  104. let actual = this.md(markdown);
  105. this.assertEqual(actual, expected);
  106. }
  107. test_underline() {
  108. let markdown = 'Lorem __ipsum__ dolor';
  109. let expected = 'Lorem <u>ipsum</u> dolor';
  110. let actual = this.md(markdown);
  111. this.assertEqual(actual, expected);
  112. }
  113. test_link_fullyQualified() {
  114. let markdown = 'Lorem [ipsum](https://example.com/path/page.html) dolor';
  115. let expected = 'Lorem <a href="https://example.com/path/page.html">ipsum</a> dolor';
  116. let actual = this.md(markdown);
  117. this.assertEqual(actual, expected);
  118. }
  119. test_link_relative() {
  120. let markdown = 'Lorem [ipsum](page.html) dolor';
  121. let expected = 'Lorem <a href="page.html">ipsum</a> dolor';
  122. let actual = this.md(markdown);
  123. this.assertEqual(actual, expected);
  124. }
  125. test_link_title() {
  126. let markdown = 'Lorem [ipsum](page.html "link title") dolor';
  127. let expected = 'Lorem <a href="page.html" title="link title">ipsum</a> dolor';
  128. let actual = this.md(markdown);
  129. this.assertEqual(actual, expected);
  130. }
  131. test_link_literal() {
  132. let markdown = 'Lorem <https://example.com> dolor';
  133. let expected = 'Lorem <a href="https://example.com">https://example.com</a> dolor';
  134. let actual = this.md(markdown);
  135. this.assertEqual(actual, expected);
  136. }
  137. test_link_ref() {
  138. let markdown = "Lorem [ipsum][ref] dolor\n\n[ref]: https://example.com";
  139. let expected = '<p>Lorem <a href="https://example.com">ipsum</a> dolor</p>';
  140. let actual = this.md(markdown);
  141. this.assertEqual(actual, expected);
  142. }
  143. test_link_email() {
  144. let markdown = 'Lorem [ipsum](user@example.com) dolor';
  145. let expected = 'Lorem <a href="mailto:&#117;&#115;&#101;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;">ipsum</a> dolor';
  146. let actual = this.md(markdown);
  147. this.assertEqual(actual, expected);
  148. }
  149. test_link_email_withTitle() {
  150. let markdown = 'Lorem [ipsum](user@example.com "title") dolor';
  151. let expected = 'Lorem <a href="mailto:&#117;&#115;&#101;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;" title="title">ipsum</a> dolor';
  152. let actual = this.md(markdown);
  153. this.assertEqual(actual, expected);
  154. }
  155. test_link_literalEmail() {
  156. let markdown = 'Lorem <user@example.com> dolor';
  157. let expected = 'Lorem <a href="mailto:&#117;&#115;&#101;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;">&#117;&#115;&#101;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;</a> dolor';
  158. let actual = this.md(markdown);
  159. this.assertEqual(actual, expected);
  160. }
  161. test_link_image() {
  162. let markdown = 'Lorem [![alt](image.jpg)](page.html) ipsum';
  163. let expected = 'Lorem <a href="page.html"><img src="image.jpg" alt="alt"></a> ipsum';
  164. let actual = this.md(markdown);
  165. this.assertEqual(actual, expected);
  166. }
  167. test_link_image_complex() {
  168. let markdown = 'Lorem [![alt] (image.jpg "image title")] (page.html "link title") ipsum';
  169. let expected = 'Lorem <a href="page.html" title="link title"><img src="image.jpg" alt="alt" title="image title"></a> ipsum';
  170. let actual = this.md(markdown);
  171. this.assertEqual(actual, expected);
  172. }
  173. test_image() {
  174. let markdown = 'Lorem ![alt text](image.jpg) dolor';
  175. let expected = 'Lorem <img src="image.jpg" alt="alt text"> dolor';
  176. let actual = this.md(markdown);
  177. this.assertEqual(actual, expected);
  178. }
  179. test_image_noAlt() {
  180. let markdown = 'Lorem ![](image.jpg) dolor';
  181. let expected = 'Lorem <img src="image.jpg"> dolor';
  182. let actual = this.md(markdown);
  183. this.assertEqual(actual, expected);
  184. }
  185. test_image_withTitle() {
  186. let markdown = 'Lorem ![alt text](image.jpg "image title") dolor';
  187. let expected = 'Lorem <img src="image.jpg" alt="alt text" title="image title"> dolor';
  188. let actual = this.md(markdown);
  189. this.assertEqual(actual, expected);
  190. }
  191. test_image_ref() {
  192. let markdown = 'Lorem ![alt text][ref] dolor\n\n' +
  193. '[ref]: image.jpg "image title"';
  194. let expected = '<p>Lorem <img src="image.jpg" alt="alt text" title="image title"> dolor</p>';
  195. let actual = this.md(markdown);
  196. this.assertEqual(actual, expected);
  197. }
  198. test_htmlTags() {
  199. let markdown = 'Lorem <strong title=\'with " quote\' id="with \' apostrophe" lang=unquoted translate forbidden="true">ipsum</strong> dolor';
  200. let expected = 'Lorem <strong title="with &quot; quote" id="with \' apostrophe" lang="unquoted" translate>ipsum</strong> dolor';
  201. let actual = this.md(markdown);
  202. this.assertEqual(actual, expected);
  203. }
  204. }