github.com/levb/mattermost-server@v5.3.1+incompatible/utils/markdown/commonmark_test.go (about) 1 // Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package markdown 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestCommonMarkReferenceStrings(t *testing.T) { 13 // For the most part, we aim for CommonMark compliance with the features that we support. We 14 // also support some GitHub flavored extensions. 15 // 16 // You can find most of the references used here: https://github.github.com/gfm/ 17 18 // CommonMark handles leading tabs that aren't on 4-character boundaries differently, so the 19 // following reference strings will fail. The current implementation is much closer to our 20 // webapp's behavior though, so I'm leaving it as is for now. It doesn't really impact anything 21 // we use this package for anyways. 22 // 23 // " \tfoo\tbaz\t\tbim\n": "<pre><code>foo\tbaz\t\tbim\n</code></pre>", 24 // ">\t\tfoo": "<blockquote><pre><code> foo</code></pre></blockquote>", 25 26 for name, tc := range map[string]struct { 27 Markdown string 28 ExpectedHTML string 29 }{ 30 "0.28-gfm-1": { 31 Markdown: "\tfoo\tbaz\t\tbim\n", 32 ExpectedHTML: "<pre><code>foo\tbaz\t\tbim\n</code></pre>", 33 }, 34 "0.28-gfm-3": { 35 Markdown: " a\ta\n ὐ\ta\n", 36 ExpectedHTML: "<pre><code>a\ta\nὐ\ta\n</code></pre>", 37 }, 38 "0.28-gfm-4": { 39 Markdown: " - foo\n\n\tbar\n", 40 ExpectedHTML: "<ul><li><p>foo</p><p>bar</p></li></ul>", 41 }, 42 "0.28-gfm-5": { 43 Markdown: "- foo\n\n\t\tbar", 44 ExpectedHTML: "<ul><li><p>foo</p><pre><code> bar</code></pre></li></ul>", 45 }, 46 "0.28-gfm-8": { 47 Markdown: " foo\n\tbar", 48 ExpectedHTML: "<pre><code>foo\nbar</code></pre>", 49 }, 50 "0.28-gfm-9": { 51 Markdown: " - foo\n - bar\n\t - baz", 52 ExpectedHTML: "<ul><li>foo<ul><li>bar<ul><li>baz</li></ul></li></ul></li></ul>", 53 }, 54 "0.28-gfm-12": { 55 Markdown: "- `one\n- two`", 56 ExpectedHTML: "<ul><li>`one</li><li>two`</li></ul>", 57 }, 58 "0.28-gfm-76": { 59 Markdown: " a simple\n indented code block", 60 ExpectedHTML: "<pre><code>a simple\n indented code block</code></pre>", 61 }, 62 "0.28-gfm-77": { 63 Markdown: " - foo\n\n bar", 64 ExpectedHTML: "<ul><li><p>foo</p><p>bar</p></li></ul>", 65 }, 66 "0.28-gfm-78": { 67 Markdown: "1. foo\n\n - bar", 68 ExpectedHTML: "<ol><li><p>foo</p><ul><li>bar</li></ul></li></ol>", 69 }, 70 "0.28-gfm-79": { 71 Markdown: " <a/>\n *hi*\n\n - one", 72 ExpectedHTML: "<pre><code><a/>\n*hi*\n\n- one</code></pre>", 73 }, 74 "0.28-gfm-80": { 75 Markdown: " chunk1\n\n chunk2\n \n \n \n chunk3", 76 ExpectedHTML: "<pre><code>chunk1\n\nchunk2\n\n\n\nchunk3</code></pre>", 77 }, 78 "0.28-gfm-81": { 79 Markdown: " chunk1\n \n chunk2", 80 ExpectedHTML: "<pre><code>chunk1\n \n chunk2</code></pre>", 81 }, 82 "0.28-gfm-82": { 83 Markdown: "Foo\n bar", 84 ExpectedHTML: "<p>Foo\nbar</p>", 85 }, 86 "0.28-gfm-83": { 87 Markdown: " foo\nbar", 88 ExpectedHTML: "<pre><code>foo\n</code></pre><p>bar</p>", 89 }, 90 "0.28-gfm-85": { 91 Markdown: " foo\n bar", 92 ExpectedHTML: "<pre><code> foo\nbar</code></pre>", 93 }, 94 "0.28-gfm-86": { 95 Markdown: "\n \n foo\n ", 96 ExpectedHTML: "<pre><code>foo\n</code></pre>", 97 }, 98 "0.28-gfm-87": { 99 Markdown: " foo ", 100 ExpectedHTML: "<pre><code>foo </code></pre>", 101 }, 102 "0.28-gfm-88": { 103 Markdown: "```\n<\n >\n```", 104 ExpectedHTML: "<pre><code><\n >\n</code></pre>", 105 }, 106 "0.28-gfm-89": { 107 Markdown: "~~~\n<\n >\n~~~", 108 ExpectedHTML: "<pre><code><\n >\n</code></pre>", 109 }, 110 "0.28-gfm-91": { 111 Markdown: "```\naaa\n~~~\n```", 112 ExpectedHTML: "<pre><code>aaa\n~~~\n</code></pre>", 113 }, 114 "0.28-gfm-92": { 115 Markdown: "~~~\naaa\n```\n~~~", 116 ExpectedHTML: "<pre><code>aaa\n```\n</code></pre>", 117 }, 118 "0.28-gfm-93": { 119 Markdown: "````\naaa\n```\n``````", 120 ExpectedHTML: "<pre><code>aaa\n```\n</code></pre>", 121 }, 122 "0.28-gfm-94": { 123 Markdown: "~~~~\naaa\n~~~\n~~~~", 124 ExpectedHTML: "<pre><code>aaa\n~~~\n</code></pre>", 125 }, 126 "0.28-gfm-95": { 127 Markdown: "```", 128 ExpectedHTML: "<pre><code></code></pre>", 129 }, 130 "0.28-gfm-96": { 131 Markdown: "`````\n\n```\naaa", 132 ExpectedHTML: "<pre><code>\n```\naaa</code></pre>", 133 }, 134 "0.28-gfm-97": { 135 Markdown: "> ```\n> aaa\n\nbbb", 136 ExpectedHTML: "<blockquote><pre><code>aaa\n</code></pre></blockquote><p>bbb</p>", 137 }, 138 "0.28-gfm-98": { 139 Markdown: "```\n\n \n```", 140 ExpectedHTML: "<pre><code>\n \n</code></pre>", 141 }, 142 "0.28-gfm-99": { 143 Markdown: "```\n```", 144 ExpectedHTML: "<pre><code></code></pre>", 145 }, 146 "0.28-gfm-100": { 147 Markdown: " ```\n aaa\naaa\n```", 148 ExpectedHTML: "<pre><code>aaa\naaa\n</code></pre>", 149 }, 150 "0.28-gfm-101": { 151 Markdown: " ```\naaa\n aaa\naaa\n ```", 152 ExpectedHTML: "<pre><code>aaa\naaa\naaa\n</code></pre>", 153 }, 154 "0.28-gfm-102": { 155 Markdown: " ```\n aaa\n aaa\n aaa\n ```", 156 ExpectedHTML: "<pre><code>aaa\n aaa\naaa\n</code></pre>", 157 }, 158 "0.28-gfm-103": { 159 Markdown: " ```\n aaa\n ```", 160 ExpectedHTML: "<pre><code>```\naaa\n```</code></pre>", 161 }, 162 "0.28-gfm-104": { 163 Markdown: "```\naaa\n ```", 164 ExpectedHTML: "<pre><code>aaa\n</code></pre>", 165 }, 166 "0.28-gfm-105": { 167 Markdown: " ```\naaa\n ```", 168 ExpectedHTML: "<pre><code>aaa\n</code></pre>", 169 }, 170 "0.28-gfm-106": { 171 Markdown: "```\naaa\n ```", 172 ExpectedHTML: "<pre><code>aaa\n ```</code></pre>", 173 }, 174 "0.28-gfm-108": { 175 Markdown: "~~~~~~\naaa\n~~~ ~~", 176 ExpectedHTML: "<pre><code>aaa\n~~~ ~~</code></pre>", 177 }, 178 "0.28-gfm-109": { 179 Markdown: "foo\n```\nbar\n```\nbaz", 180 ExpectedHTML: "<p>foo</p><pre><code>bar\n</code></pre><p>baz</p>", 181 }, 182 "0.28-gfm-111": { 183 Markdown: "```ruby\ndef foo(x)\n return 3\nend\n```", 184 ExpectedHTML: "<pre><code class=\"language-ruby\">def foo(x)\n return 3\nend\n</code></pre>", 185 }, 186 "0.28-gfm-112": { 187 Markdown: "```ruby startline=3 $%@#$\ndef foo(x)\n return 3\nend\n```", 188 ExpectedHTML: "<pre><code class=\"language-ruby\">def foo(x)\n return 3\nend\n</code></pre>", 189 }, 190 "0.28-gfm-113": { 191 Markdown: "````;\n````", 192 ExpectedHTML: "<pre><code class=\"language-;\"></code></pre>", 193 }, 194 "0.28-gfm-115": { 195 Markdown: "```\n``` aaa\n```", 196 ExpectedHTML: "<pre><code>``` aaa\n</code></pre>", 197 }, 198 "0.28-gfm-159": { 199 Markdown: "[foo]: /url \"title\"\n\n[foo]", 200 ExpectedHTML: `<p><a href="/url" title="title">foo</a></p>`, 201 }, 202 "0.28-gfm-160": { 203 Markdown: " [foo]: \n /url \n 'the title' \n\n[foo]", 204 ExpectedHTML: `<p><a href="/url" title="the title">foo</a></p>`, 205 }, 206 "0.28-gfm-161": { 207 Markdown: "[Foo*bar\\]]:my_(url) 'title (with parens)'\n\n[Foo*bar\\]]", 208 ExpectedHTML: `<p><a href="my_(url)" title="title (with parens)">Foo*bar]</a></p>`, 209 }, 210 "0.28-gfm-162": { 211 Markdown: "[Foo bar]:\n<my%20url>\n'title'\n\n[Foo bar]", 212 ExpectedHTML: `<p><a href="my%20url" title="title">Foo bar</a></p>`, 213 }, 214 "0.28-gfm-163": { 215 Markdown: "[foo]: /url '\ntitle\nline1\nline2\n'\n\n[foo]", 216 ExpectedHTML: "<p><a href=\"/url\" title=\"\ntitle\nline1\nline2\n\">foo</a></p>", 217 }, 218 "0.28-gfm-164": { 219 Markdown: "[foo]: /url 'title\n\nwith blank line'\n\n[foo]", 220 ExpectedHTML: "<p>[foo]: /url 'title</p><p>with blank line'</p><p>[foo]</p>", 221 }, 222 "0.28-gfm-165": { 223 Markdown: "[foo]:\n/url\n\n[foo]", 224 ExpectedHTML: `<p><a href="/url">foo</a></p>`, 225 }, 226 "0.28-gfm-166": { 227 Markdown: "[foo]:\n\n[foo]", 228 ExpectedHTML: `<p>[foo]:</p><p>[foo]</p>`, 229 }, 230 "0.28-gfm-167": { 231 Markdown: "[foo]: /url\\bar\\*baz \"foo\\\"bar\\baz\"\n\n[foo]", 232 ExpectedHTML: `<p><a href="/url%5Cbar*baz" title="foo"bar\baz">foo</a></p>`, 233 }, 234 "0.28-gfm-168": { 235 Markdown: "[foo]\n\n[foo]: url", 236 ExpectedHTML: `<p><a href="url">foo</a></p>`, 237 }, 238 "0.28-gfm-169": { 239 Markdown: "[foo]\n\n[foo]: first\n[foo]: second", 240 ExpectedHTML: `<p><a href="first">foo</a></p>`, 241 }, 242 "0.28-gfm-170": { 243 Markdown: "[FOO]: /url\n\n[Foo]", 244 ExpectedHTML: `<p><a href="/url">Foo</a></p>`, 245 }, 246 "0.28-gfm-171": { 247 Markdown: "[ΑΓΩ]: /φου\n\n[αγω]", 248 ExpectedHTML: `<p><a href="/%CF%86%CE%BF%CF%85">αγω</a></p>`, 249 }, 250 "0.28-gfm-172": { 251 Markdown: "[foo]: /url", 252 ExpectedHTML: ``, 253 }, 254 "0.28-gfm-173": { 255 Markdown: "[\nfoo\n]: /url\nbar", 256 ExpectedHTML: `<p>bar</p>`, 257 }, 258 "0.28-gfm-174": { 259 Markdown: `[foo]: /url "title" ok`, 260 ExpectedHTML: `<p>[foo]: /url "title" ok</p>`, 261 }, 262 "0.28-gfm-175": { 263 Markdown: "[foo]: /url\n\"title\" ok", 264 ExpectedHTML: `<p>"title" ok</p>`, 265 }, 266 "0.28-gfm-176": { 267 Markdown: " [foo]: /url \"title\"\n\n[foo]", 268 ExpectedHTML: "<pre><code>[foo]: /url "title"\n</code></pre><p>[foo]</p>", 269 }, 270 "0.28-gfm-177": { 271 Markdown: "```\n[foo]: /url\n```\n\n[foo]", 272 ExpectedHTML: "<pre><code>[foo]: /url\n</code></pre><p>[foo]</p>", 273 }, 274 "0.28-gfm-178": { 275 Markdown: "Foo\n[bar]: /baz\n\n[bar]", 276 ExpectedHTML: "<p>Foo\n[bar]: /baz</p><p>[bar]</p>", 277 }, 278 "0.28-gfm-180": { 279 Markdown: "[foo]: /foo-url \"foo\"\n[bar]: /bar-url\n\"bar\"\n[baz]: /baz-url\n\n[foo],\n[bar],\n[baz]", 280 ExpectedHTML: `<p><a href="/foo-url" title="foo">foo</a>, 281 <a href="/bar-url" title="bar">bar</a>, 282 <a href="/baz-url">baz</a></p>`, 283 }, 284 "0.28-gfm-181": { 285 Markdown: "[foo]\n\n> [foo]: /url", 286 ExpectedHTML: `<p><a href="/url">foo</a></p><blockquote></blockquote>`, 287 }, 288 "0.28-gfm-182": { 289 Markdown: "aaa\n\nbbb", 290 ExpectedHTML: "<p>aaa</p><p>bbb</p>", 291 }, 292 "0.28-gfm-183": { 293 Markdown: "aaa\nbbb\n\nccc\nddd", 294 ExpectedHTML: "<p>aaa\nbbb</p><p>ccc\nddd</p>", 295 }, 296 "0.28-gfm-184": { 297 Markdown: "aaa\n\n\nbbb", 298 ExpectedHTML: "<p>aaa</p><p>bbb</p>", 299 }, 300 "0.28-gfm-185": { 301 Markdown: " aaa\n bbb", 302 ExpectedHTML: "<p>aaa\nbbb</p>", 303 }, 304 "0.28-gfm-186": { 305 Markdown: "aaa\n bbb\n ccc", 306 ExpectedHTML: "<p>aaa\nbbb\nccc</p>", 307 }, 308 "0.28-gfm-187": { 309 Markdown: " aaa\nbbb", 310 ExpectedHTML: "<p>aaa\nbbb</p>", 311 }, 312 "0.28-gfm-188": { 313 Markdown: " aaa\nbbb", 314 ExpectedHTML: "<pre><code>aaa\n</code></pre><p>bbb</p>", 315 }, 316 "0.28-gfm-189": { 317 Markdown: "aaa \nbbb \n", 318 ExpectedHTML: "<p>aaa<br />bbb</p>", 319 }, 320 "0.28-gfm-204": { 321 Markdown: "> bar\nbaz\n> foo", 322 ExpectedHTML: "<blockquote><p>bar\nbaz\nfoo</p></blockquote>", 323 }, 324 "0.28-gfm-206": { 325 Markdown: "> - foo\n- bar", 326 ExpectedHTML: "<blockquote><ul><li>foo</li></ul></blockquote><ul><li>bar</li></ul>", 327 }, 328 "0.28-gfm-207": { 329 Markdown: "> foo\n bar", 330 ExpectedHTML: "<blockquote><pre><code>foo\n</code></pre></blockquote><pre><code>bar</code></pre>", 331 }, 332 "0.28-gfm-208": { 333 Markdown: "> ```\nfoo\n```", 334 ExpectedHTML: "<blockquote><pre><code></code></pre></blockquote><p>foo</p><pre><code></code></pre>", 335 }, 336 "0.28-gfm-209": { 337 Markdown: "> foo\n - bar", 338 ExpectedHTML: "<blockquote><p>foo\n- bar</p></blockquote>", 339 }, 340 "0.28-gfm-210": { 341 Markdown: ">", 342 ExpectedHTML: "<blockquote></blockquote>", 343 }, 344 "0.28-gfm-211": { 345 Markdown: ">\n> \n> ", 346 ExpectedHTML: "<blockquote></blockquote>", 347 }, 348 "0.28-gfm-212": { 349 Markdown: ">\n> foo\n> ", 350 ExpectedHTML: "<blockquote><p>foo</p></blockquote>", 351 }, 352 "0.28-gfm-213": { 353 Markdown: "> foo\n\n> bar", 354 ExpectedHTML: "<blockquote><p>foo</p></blockquote><blockquote><p>bar</p></blockquote>", 355 }, 356 "0.28-gfm-214": { 357 Markdown: "> foo\n> bar", 358 ExpectedHTML: "<blockquote><p>foo\nbar</p></blockquote>", 359 }, 360 "0.28-gfm-215": { 361 Markdown: "> foo\n>\n> bar", 362 ExpectedHTML: "<blockquote><p>foo</p><p>bar</p></blockquote>", 363 }, 364 "0.28-gfm-216": { 365 Markdown: "foo\n> bar", 366 ExpectedHTML: "<p>foo</p><blockquote><p>bar</p></blockquote>", 367 }, 368 "0.28-gfm-218": { 369 Markdown: "> bar\nbaz", 370 ExpectedHTML: "<blockquote><p>bar\nbaz</p></blockquote>", 371 }, 372 "0.28-gfm-219": { 373 Markdown: "> bar\n\nbaz", 374 ExpectedHTML: "<blockquote><p>bar</p></blockquote><p>baz</p>", 375 }, 376 "0.28-gfm-220": { 377 Markdown: "> bar\n>\nbaz", 378 ExpectedHTML: "<blockquote><p>bar</p></blockquote><p>baz</p>", 379 }, 380 "0.28-gfm-221": { 381 Markdown: "> > > foo\nbar", 382 ExpectedHTML: "<blockquote><blockquote><blockquote><p>foo\nbar</p></blockquote></blockquote></blockquote>", 383 }, 384 "0.28-gfm-222": { 385 Markdown: ">>> foo\n> bar\n>>baz", 386 ExpectedHTML: "<blockquote><blockquote><blockquote><p>foo\nbar\nbaz</p></blockquote></blockquote></blockquote>", 387 }, 388 "0.28-gfm-223": { 389 Markdown: "> code\n\n> not code", 390 ExpectedHTML: "<blockquote><pre><code>code\n</code></pre></blockquote><blockquote><p>not code</p></blockquote>", 391 }, 392 "0.28-gfm-224": { 393 Markdown: "A paragraph\nwith two lines.\n\n indented code\n\n> A block quote.", 394 ExpectedHTML: "<p>A paragraph\nwith two lines.</p><pre><code>indented code\n</code></pre><blockquote><p>A block quote.</p></blockquote>", 395 }, 396 "0.28-gfm-225": { 397 Markdown: "1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.", 398 ExpectedHTML: "<ol><li><p>A paragraph\nwith two lines.</p><pre><code>indented code\n</code></pre><blockquote><p>A block quote.</p></blockquote></li></ol>", 399 }, 400 "0.28-gfm-226": { 401 Markdown: "- one\n\n two", 402 ExpectedHTML: "<ul><li>one</li></ul><p>two</p>", 403 }, 404 "0.28-gfm-227": { 405 Markdown: "- one\n\n two", 406 ExpectedHTML: "<ul><li><p>one</p><p>two</p></li></ul>", 407 }, 408 "0.28-gfm-228": { 409 Markdown: " - one\n\n two", 410 ExpectedHTML: "<ul><li>one</li></ul><pre><code> two</code></pre>", 411 }, 412 "0.28-gfm-229": { 413 Markdown: " - one\n\n two", 414 ExpectedHTML: "<ul><li><p>one</p><p>two</p></li></ul>", 415 }, 416 "0.28-gfm-230": { 417 Markdown: " > > 1. one\n>>\n>> two", 418 ExpectedHTML: "<blockquote><blockquote><ol><li><p>one</p><p>two</p></li></ol></blockquote></blockquote>", 419 }, 420 "0.28-gfm-231": { 421 Markdown: ">>- one\n>>\n > > two", 422 ExpectedHTML: "<blockquote><blockquote><ul><li>one</li></ul><p>two</p></blockquote></blockquote>", 423 }, 424 "0.28-gfm-232": { 425 Markdown: "-one\n\n2.two", 426 ExpectedHTML: "<p>-one</p><p>2.two</p>", 427 }, 428 "0.28-gfm-233": { 429 Markdown: "- foo\n\n\n bar", 430 ExpectedHTML: "<ul><li><p>foo</p><p>bar</p></li></ul>", 431 }, 432 "0.28-gfm-234": { 433 Markdown: "1. foo\n\n ```\n bar\n ```\n\n baz\n\n > bam", 434 ExpectedHTML: "<ol><li><p>foo</p><pre><code>bar\n</code></pre><p>baz</p><blockquote><p>bam</p></blockquote></li></ol>", 435 }, 436 "0.28-gfm-235": { 437 Markdown: "- Foo\n\n bar\n\n\n baz", 438 ExpectedHTML: "<ul><li><p>Foo</p><pre><code>bar\n\n\nbaz</code></pre></li></ul>", 439 }, 440 "0.28-gfm-236": { 441 Markdown: "123456789. ok", 442 ExpectedHTML: `<ol start="123456789"><li>ok</li></ol>`, 443 }, 444 "0.28-gfm-237": { 445 Markdown: "1234567890. not ok", 446 ExpectedHTML: "<p>1234567890. not ok</p>", 447 }, 448 "0.28-gfm-238": { 449 Markdown: "0. ok", 450 ExpectedHTML: `<ol start="0"><li>ok</li></ol>`, 451 }, 452 "0.28-gfm-239": { 453 Markdown: "003. ok", 454 ExpectedHTML: `<ol start="3"><li>ok</li></ol>`, 455 }, 456 "0.28-gfm-240": { 457 Markdown: "-1. not ok", 458 ExpectedHTML: "<p>-1. not ok</p>", 459 }, 460 "0.28-gfm-241": { 461 Markdown: "- foo\n\n bar", 462 ExpectedHTML: "<ul><li><p>foo</p><pre><code>bar</code></pre></li></ul>", 463 }, 464 "0.28-gfm-242": { 465 Markdown: " 10. foo\n\n bar", 466 ExpectedHTML: `<ol start="10"><li><p>foo</p><pre><code>bar</code></pre></li></ol>`, 467 }, 468 "0.28-gfm-243": { 469 Markdown: " indented code\n\nparagraph\n\n more code", 470 ExpectedHTML: "<pre><code>indented code\n</code></pre><p>paragraph</p><pre><code>more code</code></pre>", 471 }, 472 "0.28-gfm-244": { 473 Markdown: "1. indented code\n\n paragraph\n\n more code", 474 ExpectedHTML: "<ol><li><pre><code>indented code\n</code></pre><p>paragraph</p><pre><code>more code</code></pre></li></ol>", 475 }, 476 "0.28-gfm-245": { 477 Markdown: "1. indented code\n\n paragraph\n\n more code", 478 ExpectedHTML: "<ol><li><pre><code> indented code\n</code></pre><p>paragraph</p><pre><code>more code</code></pre></li></ol>", 479 }, 480 "0.28-gfm-246": { 481 Markdown: " foo\n\nbar", 482 ExpectedHTML: "<p>foo</p><p>bar</p>", 483 }, 484 "0.28-gfm-247": { 485 Markdown: "- foo\n\n bar", 486 ExpectedHTML: "<ul><li>foo</li></ul><p>bar</p>", 487 }, 488 "0.28-gfm-248": { 489 Markdown: "- foo\n\n bar", 490 ExpectedHTML: "<ul><li><p>foo</p><p>bar</p></li></ul>", 491 }, 492 "0.28-gfm-249": { 493 Markdown: "-\n foo\n-\n ```\n bar\n ```\n-\n baz", 494 ExpectedHTML: "<ul><li>foo</li><li><pre><code>bar\n</code></pre></li><li><pre><code>baz</code></pre></li></ul>", 495 }, 496 "0.28-gfm-250": { 497 Markdown: "- \n foo", 498 ExpectedHTML: "<ul><li>foo</li></ul>", 499 }, 500 "0.28-gfm-251": { 501 Markdown: "-\n\n foo", 502 ExpectedHTML: "<ul><li></li></ul><p>foo</p>", 503 }, 504 "0.28-gfm-252": { 505 Markdown: "- foo\n-\n- bar", 506 ExpectedHTML: "<ul><li>foo</li><li></li><li>bar</li></ul>", 507 }, 508 "0.28-gfm-253": { 509 Markdown: "- foo\n- \n- bar", 510 ExpectedHTML: "<ul><li>foo</li><li></li><li>bar</li></ul>", 511 }, 512 "0.28-gfm-254": { 513 Markdown: "1. foo\n2.\n3. bar", 514 ExpectedHTML: "<ol><li>foo</li><li></li><li>bar</li></ol>", 515 }, 516 "0.28-gfm-255": { 517 Markdown: "*", 518 ExpectedHTML: "<ul><li></li></ul>", 519 }, 520 "0.28-gfm-256": { 521 Markdown: "foo\n*\n\nfoo\n1.", 522 ExpectedHTML: "<p>foo\n*</p><p>foo\n1.</p>", 523 }, 524 "0.28-gfm-257": { 525 Markdown: " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.", 526 ExpectedHTML: "<ol><li><p>A paragraph\nwith two lines.</p><pre><code>indented code\n</code></pre><blockquote><p>A block quote.</p></blockquote></li></ol>", 527 }, 528 "0.28-gfm-258": { 529 Markdown: " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.", 530 ExpectedHTML: "<ol><li><p>A paragraph\nwith two lines.</p><pre><code>indented code\n</code></pre><blockquote><p>A block quote.</p></blockquote></li></ol>", 531 }, 532 "0.28-gfm-259": { 533 Markdown: " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.", 534 ExpectedHTML: "<ol><li><p>A paragraph\nwith two lines.</p><pre><code>indented code\n</code></pre><blockquote><p>A block quote.</p></blockquote></li></ol>", 535 }, 536 "0.28-gfm-260": { 537 Markdown: " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.", 538 ExpectedHTML: "<pre><code>1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.</code></pre>", 539 }, 540 "0.28-gfm-261": { 541 Markdown: " 1. A paragraph\nwith two lines.\n\n indented code\n\n > A block quote.", 542 ExpectedHTML: "<ol><li><p>A paragraph\nwith two lines.</p><pre><code>indented code\n</code></pre><blockquote><p>A block quote.</p></blockquote></li></ol>", 543 }, 544 "0.28-gfm-262": { 545 Markdown: " 1. A paragraph\n with two lines.", 546 ExpectedHTML: "<ol><li>A paragraph\nwith two lines.</li></ol>", 547 }, 548 "0.28-gfm-263": { 549 Markdown: "> 1. > Blockquote\ncontinued here.", 550 ExpectedHTML: "<blockquote><ol><li><blockquote><p>Blockquote\ncontinued here.</p></blockquote></li></ol></blockquote>", 551 }, 552 "0.28-gfm-264": { 553 Markdown: "> 1. > Blockquote\n> continued here.", 554 ExpectedHTML: "<blockquote><ol><li><blockquote><p>Blockquote\ncontinued here.</p></blockquote></li></ol></blockquote>", 555 }, 556 "0.28-gfm-265": { 557 Markdown: "- foo\n - bar\n - baz\n - boo", 558 ExpectedHTML: "<ul><li>foo<ul><li>bar<ul><li>baz<ul><li>boo</li></ul></li></ul></li></ul></li></ul>", 559 }, 560 "0.28-gfm-266": { 561 Markdown: "- foo\n - bar\n - baz\n - boo", 562 ExpectedHTML: "<ul><li>foo</li><li>bar</li><li>baz</li><li>boo</li></ul>", 563 }, 564 "0.28-gfm-267": { 565 Markdown: "10) foo\n - bar", 566 ExpectedHTML: `<ol start="10"><li>foo<ul><li>bar</li></ul></li></ol>`, 567 }, 568 "0.28-gfm-268": { 569 Markdown: "10) foo\n - bar", 570 ExpectedHTML: `<ol start="10"><li>foo</li></ol><ul><li>bar</li></ul>`, 571 }, 572 "0.28-gfm-269": { 573 Markdown: "- - foo", 574 ExpectedHTML: "<ul><li><ul><li>foo</li></ul></li></ul>", 575 }, 576 "0.28-gfm-270": { 577 Markdown: "1. - 2. foo", 578 ExpectedHTML: `<ol><li><ul><li><ol start="2"><li>foo</li></ol></li></ul></li></ol>`, 579 }, 580 "0.28-gfm-274": { 581 Markdown: "- foo\n- bar\n+ baz", 582 ExpectedHTML: "<ul><li>foo</li><li>bar</li></ul><ul><li>baz</li></ul>", 583 }, 584 "0.28-gfm-275": { 585 Markdown: "1. foo\n2. bar\n3) baz", 586 ExpectedHTML: `<ol><li>foo</li><li>bar</li></ol><ol start="3"><li>baz</li></ol>`, 587 }, 588 "0.28-gfm-276": { 589 Markdown: "Foo\n- bar\n- baz", 590 ExpectedHTML: "<p>Foo</p><ul><li>bar</li><li>baz</li></ul>", 591 }, 592 "0.28-gfm-277": { 593 Markdown: "The number of windows in my house is\n14. The number of doors is 6.", 594 ExpectedHTML: "<p>The number of windows in my house is\n14. The number of doors is 6.</p>", 595 }, 596 "0.28-gfm-278": { 597 Markdown: "The number of windows in my house is\n1. The number of doors is 6.", 598 ExpectedHTML: "<p>The number of windows in my house is</p><ol><li>The number of doors is 6.</li></ol>", 599 }, 600 "0.28-gfm-279": { 601 Markdown: "- foo\n\n- bar\n\n\n- baz", 602 ExpectedHTML: "<ul><li><p>foo</p></li><li><p>bar</p></li><li><p>baz</p></li></ul>", 603 }, 604 "0.28-gfm-280": { 605 Markdown: "- foo\n - bar\n - baz\n\n\n bim", 606 ExpectedHTML: "<ul><li>foo<ul><li>bar<ul><li><p>baz</p><p>bim</p></li></ul></li></ul></li></ul>", 607 }, 608 "0.28-gfm-283": { 609 Markdown: "- a\n - b\n - c\n - d\n - e\n - f\n - g\n - h\n- i", 610 ExpectedHTML: "<ul><li>a</li><li>b</li><li>c</li><li>d</li><li>e</li><li>f</li><li>g</li><li>h</li><li>i</li></ul>", 611 }, 612 "0.28-gfm-284": { 613 Markdown: "1. a\n\n 2. b\n\n 3. c", 614 ExpectedHTML: "<ol><li><p>a</p></li><li><p>b</p></li><li><p>c</p></li></ol>", 615 }, 616 "0.28-gfm-285": { 617 Markdown: "- a\n- b\n\n- c", 618 ExpectedHTML: "<ul><li><p>a</p></li><li><p>b</p></li><li><p>c</p></li></ul>", 619 }, 620 "0.28-gfm-286": { 621 Markdown: "* a\n*\n\n* c", 622 ExpectedHTML: "<ul><li><p>a</p></li><li></li><li><p>c</p></li></ul>", 623 }, 624 "0.28-gfm-287": { 625 Markdown: "- a\n- b\n\n c\n- d", 626 ExpectedHTML: "<ul><li><p>a</p></li><li><p>b</p><p>c</p></li><li><p>d</p></li></ul>", 627 }, 628 "0.28-gfm-288": { 629 Markdown: "- a\n- b\n\n [ref]: /url\n- d", 630 ExpectedHTML: "<ul><li><p>a</p></li><li><p>b</p></li><li><p>d</p></li></ul>", 631 }, 632 "0.28-gfm-289": { 633 Markdown: "- a\n- ```\n b\n\n\n ```\n- c", 634 ExpectedHTML: "<ul><li>a</li><li><pre><code>b\n\n\n</code></pre></li><li>c</li></ul>", 635 }, 636 "0.28-gfm-290": { 637 Markdown: "- a\n - b\n\n c\n- d", 638 ExpectedHTML: "<ul><li>a<ul><li><p>b</p><p>c</p></li></ul></li><li>d</li></ul>", 639 }, 640 "0.28-gfm-291": { 641 Markdown: "* a\n > b\n >\n* c", 642 ExpectedHTML: "<ul><li>a<blockquote><p>b</p></blockquote></li><li>c</li></ul>", 643 }, 644 "0.28-gfm-292": { 645 Markdown: "- a\n > b\n ```\n c\n ```\n- d", 646 ExpectedHTML: "<ul><li>a<blockquote><p>b</p></blockquote><pre><code>c\n</code></pre></li><li>d</li></ul>", 647 }, 648 "0.28-gfm-293": { 649 Markdown: "- a", 650 ExpectedHTML: "<ul><li>a</li></ul>", 651 }, 652 "0.28-gfm-294": { 653 Markdown: "- a\n - b", 654 ExpectedHTML: "<ul><li>a<ul><li>b</li></ul></li></ul>", 655 }, 656 "0.28-gfm-295": { 657 Markdown: "1. ```\n foo\n ```\n\n bar", 658 ExpectedHTML: "<ol><li><pre><code>foo\n</code></pre><p>bar</p></li></ol>", 659 }, 660 "0.28-gfm-296": { 661 Markdown: "* foo\n * bar\n\n baz", 662 ExpectedHTML: "<ul><li><p>foo</p><ul><li>bar</li></ul><p>baz</p></li></ul>", 663 }, 664 "0.28-gfm-297": { 665 Markdown: "- a\n - b\n - c\n\n- d\n - e\n - f", 666 ExpectedHTML: "<ul><li><p>a</p><ul><li>b</li><li>c</li></ul></li><li><p>d</p><ul><li>e</li><li>f</li></ul></li></ul>", 667 }, 668 "0.28-gfm-298": { 669 Markdown: "`hi`lo`", 670 ExpectedHTML: "<p><code>hi</code>lo`</p>", 671 }, 672 "0.28-gfm-299": { 673 Markdown: `\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_` + "\\`" + `\{\|\}\~`, 674 ExpectedHTML: "<p>!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~</p>", 675 }, 676 "0.28-gfm-300": { 677 Markdown: `\→\A\a\ \3\φ\«`, 678 ExpectedHTML: `<p>\→\A\a\ \3\φ\«</p>`, 679 }, 680 "0.28-gfm-301": { 681 Markdown: `\*not emphasized* 682 \<br/> not a tag 683 \[not a link](/foo) 684 \` + "`not code`" + ` 685 1\. not a list 686 \* not a list 687 \# not a heading 688 \[foo]: /url "not a reference"`, 689 ExpectedHTML: `<p>*not emphasized* 690 <br/> not a tag 691 [not a link](/foo) 692 ` + "`not code`" + ` 693 1. not a list 694 * not a list 695 # not a heading 696 [foo]: /url "not a reference"</p>`, 697 }, 698 "0.28-gfm-304": { 699 Markdown: "`` \\[\\` ``", 700 ExpectedHTML: "<p><code>\\[\\`</code></p>", 701 }, 702 "0.28-gfm-305": { 703 Markdown: ` \[\]`, 704 ExpectedHTML: `<pre><code>\[\]</code></pre>`, 705 }, 706 "0.28-gfm-306": { 707 Markdown: "~~~\n\\[\\]\n~~~", 708 ExpectedHTML: "<pre><code>\\[\\]\n</code></pre>", 709 }, 710 "0.28-gfm-309": { 711 Markdown: `[foo](/bar\* "ti\*tle")`, 712 ExpectedHTML: `<p><a href="/bar*" title="ti*tle">foo</a></p>`, 713 }, 714 "0.28-gfm-310": { 715 Markdown: `[foo] 716 717 [foo]: /bar\* "ti\*tle"`, 718 ExpectedHTML: `<p><a href="/bar*" title="ti*tle">foo</a></p>`, 719 }, 720 "0.28-gfm-311": { 721 Markdown: "``` foo\\+bar\nfoo\n```", 722 ExpectedHTML: "<pre><code class=\"language-foo+bar\">foo\n</code></pre>", 723 }, 724 "0.28-gfm-312": { 725 Markdown: " & © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸", 726 ExpectedHTML: "<p>\u00a0 & © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸</p>", 727 }, 728 "0.28-gfm-313": { 729 Markdown: "# Ӓ Ϡ � �", 730 ExpectedHTML: "<p># Ӓ Ϡ � �</p>", 731 }, 732 "0.28-gfm-314": { 733 Markdown: "" ആ ಫ", 734 ExpectedHTML: "<p>" ആ ಫ</p>", 735 }, 736 "0.28-gfm-315": { 737 Markdown: "  &x; &#; &#x;\n&ThisIsNotDefined; &hi?;", 738 ExpectedHTML: "<p>&nbsp &x; &#; &#x;\n&ThisIsNotDefined; &hi?;</p>", 739 }, 740 "0.28-gfm-316": { 741 Markdown: "©", 742 ExpectedHTML: "<p>&copy</p>", 743 }, 744 "0.28-gfm-317": { 745 Markdown: "&MadeUpEntity;", 746 ExpectedHTML: "<p>&MadeUpEntity;</p>", 747 }, 748 "0.28-gfm-319": { 749 Markdown: `[foo](/föö "föö")`, 750 ExpectedHTML: `<p><a href="/f%C3%B6%C3%B6" title="föö">foo</a></p>`, 751 }, 752 "0.28-gfm-320": { 753 Markdown: "[foo]\n\n[foo]: /föö \"föö\"", 754 ExpectedHTML: `<p><a href="/f%C3%B6%C3%B6" title="föö">foo</a></p>`, 755 }, 756 "0.28-gfm-321": { 757 Markdown: "``` föö\nfoo\n```", 758 ExpectedHTML: "<pre><code class=\"language-föö\">foo\n</code></pre>", 759 }, 760 "0.28-gfm-322": { 761 Markdown: "`föö`", 762 ExpectedHTML: "<p><code>f&ouml;&ouml;</code></p>", 763 }, 764 "0.28-gfm-323": { 765 Markdown: " föfö", 766 ExpectedHTML: "<pre><code>f&ouml;f&ouml;</code></pre>", 767 }, 768 "0.28-gfm-324": { 769 Markdown: "`foo`", 770 ExpectedHTML: "<p><code>foo</code></p>", 771 }, 772 "0.28-gfm-325": { 773 Markdown: "`` foo ` bar ``", 774 ExpectedHTML: "<p><code>foo ` bar</code></p>", 775 }, 776 "0.28-gfm-326": { 777 Markdown: "` `` `", 778 ExpectedHTML: "<p><code>``</code></p>", 779 }, 780 "0.28-gfm-327": { 781 Markdown: "``\nfoo\n``", 782 ExpectedHTML: "<p><code>foo</code></p>", 783 }, 784 "0.28-gfm-328": { 785 Markdown: "`foo bar\n baz`", 786 ExpectedHTML: "<p><code>foo bar baz</code></p>", 787 }, 788 "0.28-gfm-329": { 789 Markdown: "`a\xa0\xa0b`", 790 ExpectedHTML: "<p><code>a\xa0\xa0b</code></p>", 791 }, 792 "0.28-gfm-330": { 793 Markdown: "`foo `` bar`", 794 ExpectedHTML: "<p><code>foo `` bar</code></p>", 795 }, 796 "0.28-gfm-331": { 797 Markdown: "`foo\\`bar`", 798 ExpectedHTML: "<p><code>foo\\</code>bar`</p>", 799 }, 800 "0.28-gfm-332": { 801 Markdown: "*foo`*`", 802 ExpectedHTML: "<p>*foo<code>*</code></p>", 803 }, 804 "0.28-gfm-333": { 805 Markdown: "[not a `link](/foo`)", 806 ExpectedHTML: "<p>[not a <code>link](/foo</code>)</p>", 807 }, 808 "0.28-gfm-334": { 809 Markdown: "`<a href=\"`\">`", 810 ExpectedHTML: "<p><code><a href="</code>">`</p>", 811 }, 812 "0.28-gfm-336": { 813 Markdown: "`<http://foo.bar.`baz>`", 814 ExpectedHTML: "<p><code><http://foo.bar.</code>baz>`</p>", 815 }, 816 "0.28-gfm-338": { 817 Markdown: "```foo``", 818 ExpectedHTML: "<p>```foo``</p>", 819 }, 820 "0.28-gfm-339": { 821 Markdown: "`foo", 822 ExpectedHTML: "<p>`foo</p>", 823 }, 824 "0.28-gfm-340": { 825 Markdown: "`foo``bar``", 826 ExpectedHTML: "<p>`foo<code>bar</code></p>", 827 }, 828 "0.28-gfm-472": { 829 Markdown: `[link](/uri "title")`, 830 ExpectedHTML: `<p><a href="/uri" title="title">link</a></p>`, 831 }, 832 "0.28-gfm-473": { 833 Markdown: `[link](/uri)`, 834 ExpectedHTML: `<p><a href="/uri">link</a></p>`, 835 }, 836 "0.28-gfm-474": { 837 Markdown: `[link]()`, 838 ExpectedHTML: `<p><a href="">link</a></p>`, 839 }, 840 "0.28-gfm-475": { 841 Markdown: `[link](<>)`, 842 ExpectedHTML: `<p><a href="">link</a></p>`, 843 }, 844 "0.28-gfm-476": { 845 Markdown: `[link](/my uri)`, 846 ExpectedHTML: `<p>[link](/my uri)</p>`, 847 }, 848 "0.28-gfm-477": { 849 Markdown: `[link](</my uri>)`, 850 ExpectedHTML: `<p>[link](</my uri>)</p>`, 851 }, 852 "0.28-gfm-478": { 853 Markdown: "[link](foo\nbar)", 854 ExpectedHTML: "<p>[link](foo\nbar)</p>", 855 }, 856 "0.28-gfm-480": { 857 Markdown: `[link](\(foo\))`, 858 ExpectedHTML: `<p><a href="(foo)">link</a></p>`, 859 }, 860 "0.28-gfm-481": { 861 Markdown: `[link](foo(and(bar)))`, 862 ExpectedHTML: `<p><a href="foo(and(bar))">link</a></p>`, 863 }, 864 "0.28-gfm-482": { 865 Markdown: `[link](foo\(and\(bar\))`, 866 ExpectedHTML: `<p><a href="foo(and(bar)">link</a></p>`, 867 }, 868 "0.28-gfm-483": { 869 Markdown: `[link](<foo(and(bar)>)`, 870 ExpectedHTML: `<p><a href="foo(and(bar)">link</a></p>`, 871 }, 872 "0.28-gfm-484": { 873 Markdown: `[link](foo\)\:)`, 874 ExpectedHTML: `<p><a href="foo):">link</a></p>`, 875 }, 876 "0.28-gfm-485": { 877 Markdown: "[link](#fragment)\n\n[link](http://example.com#fragment)\n\n[link](http://example.com?foo=3#frag)", 878 ExpectedHTML: `<p><a href="#fragment">link</a></p><p><a href="http://example.com#fragment">link</a></p><p><a href="http://example.com?foo=3#frag">link</a></p>`, 879 }, 880 "0.28-gfm-486": { 881 Markdown: `[link](foo\bar)`, 882 ExpectedHTML: `<p><a href="foo%5Cbar">link</a></p>`, 883 }, 884 "0.28-gfm-488": { 885 Markdown: `[link]("title")`, 886 ExpectedHTML: `<p><a href="%22title%22">link</a></p>`, 887 }, 888 "0.28-gfm-489": { 889 Markdown: "[link](/url \"title\")\n[link](/url 'title')\n[link](/url (title))", 890 ExpectedHTML: "<p><a href=\"/url\" title=\"title\">link</a>\n<a href=\"/url\" title=\"title\">link</a>\n<a href=\"/url\" title=\"title\">link</a></p>", 891 }, 892 "0.28-gfm-490": { 893 Markdown: `[link](/url "title \""")`, 894 ExpectedHTML: `<p><a href="/url" title="title """>link</a></p>`, 895 }, 896 "0.28-gfm-491": { 897 Markdown: "[link](/url\u00a0\"title\")", 898 ExpectedHTML: `<p><a href="/url%C2%A0%22title%22">link</a></p>`, 899 }, 900 "0.28-gfm-492": { 901 Markdown: `[link](/url "title "and" title")`, 902 ExpectedHTML: `<p>[link](/url "title "and" title")</p>`, 903 }, 904 "0.28-gfm-493": { 905 Markdown: `[link](/url 'title "and" title')`, 906 ExpectedHTML: `<p><a href="/url" title="title "and" title">link</a></p>`, 907 }, 908 "0.28-gfm-494": { 909 Markdown: "[link]( /uri\n \"title\" )", 910 ExpectedHTML: `<p><a href="/uri" title="title">link</a></p>`, 911 }, 912 "0.28-gfm-495": { 913 Markdown: "[link] (/uri)", 914 ExpectedHTML: `<p>[link] (/uri)</p>`, 915 }, 916 "0.28-gfm-496": { 917 Markdown: "[link [foo [bar]]](/uri)", 918 ExpectedHTML: `<p><a href="/uri">link [foo [bar]]</a></p>`, 919 }, 920 "0.28-gfm-497": { 921 Markdown: "[link] bar](/uri)", 922 ExpectedHTML: `<p>[link] bar](/uri)</p>`, 923 }, 924 "0.28-gfm-498": { 925 Markdown: "[link [bar](/uri)", 926 ExpectedHTML: `<p>[link <a href="/uri">bar</a></p>`, 927 }, 928 "0.28-gfm-499": { 929 Markdown: `[link \[bar](/uri)`, 930 ExpectedHTML: `<p><a href="/uri">link [bar</a></p>`, 931 }, 932 "0.28-gfm-501": { 933 Markdown: "[](/uri)", 934 ExpectedHTML: `<p><a href="/uri"><img src="moon.jpg" alt="moon" /></a></p>`, 935 }, 936 "0.28-gfm-502": { 937 Markdown: "[foo [bar](/uri)](/uri)", 938 ExpectedHTML: `<p>[foo <a href="/uri">bar</a>](/uri)</p>`, 939 }, 940 "0.28-gfm-504": { 941 Markdown: "](uri2)](uri3)", 942 ExpectedHTML: `<p><img src="uri3" alt="[foo](uri2)" /></p>`, 943 }, 944 "0.28-gfm-505": { 945 Markdown: "*[foo*](/uri)", 946 ExpectedHTML: `<p>*<a href="/uri">foo*</a></p>`, 947 }, 948 "0.28-gfm-506": { 949 Markdown: "[foo *bar](baz*)", 950 ExpectedHTML: `<p><a href="baz*">foo *bar</a></p>`, 951 }, 952 "0.28-gfm-509": { 953 Markdown: "[foo`](/uri)`", 954 ExpectedHTML: `<p>[foo<code>](/uri)</code></p>`, 955 }, 956 "0.28-gfm-556": { 957 Markdown: ``, 958 ExpectedHTML: `<p><img src="/url" alt="foo" title="title" /></p>`, 959 }, 960 "0.28-gfm-558": { 961 Markdown: `](/url2)`, 962 ExpectedHTML: `<p><img src="/url2" alt="foo bar" /></p>`, 963 }, 964 "0.28-gfm-559": { 965 Markdown: `](/url2)`, 966 ExpectedHTML: `<p><img src="/url2" alt="foo bar" /></p>`, 967 }, 968 "0.28-gfm-562": { 969 Markdown: ``, 970 ExpectedHTML: `<p><img src="train.jpg" alt="foo" /></p>`, 971 }, 972 "0.28-gfm-563": { 973 Markdown: `My `, 974 ExpectedHTML: `<p>My <img src="/path/to/train.jpg" alt="foo bar" title="title" /></p>`, 975 }, 976 "0.28-gfm-564": { 977 Markdown: ``, 978 ExpectedHTML: `<p><img src="url" alt="foo" /></p>`, 979 }, 980 "0.28-gfm-565": { 981 Markdown: ``, 982 ExpectedHTML: `<p><img src="/url" alt="" /></p>`, 983 }, 984 "0.28-gfm-647": { 985 Markdown: "hello $.;'there", 986 ExpectedHTML: "<p>hello $.;'there</p>", 987 }, 988 "0.28-gfm-648": { 989 Markdown: "Foo χρῆν", 990 ExpectedHTML: "<p>Foo χρῆν</p>", 991 }, 992 "0.28-gfm-649": { 993 Markdown: "Multiple spaces", 994 ExpectedHTML: "<p>Multiple spaces</p>", 995 }, 996 } { 997 t.Run(name, func(t *testing.T) { 998 assert.Equal(t, tc.ExpectedHTML, RenderHTML(tc.Markdown)) 999 }) 1000 } 1001 } 1002 1003 func TestCommonMarkReferenceAutolinks(t *testing.T) { 1004 // These tests are adapted from the GitHub-flavoured CommonMark extension tests located at 1005 // https://github.com/github/cmark/blob/master/test/extensions.txt 1006 for name, tc := range map[string]struct { 1007 Markdown string 1008 ExpectedHTML string 1009 }{ 1010 "autolinks-1": { 1011 Markdown: `: http://google.com https://google.com 1012 1013 http://google.com/å 1014 1015 www.github.com www.github.com/á 1016 1017 www.google.com/a_b 1018 1019  1020 1021 Full stop outside parens shouldn't be included http://google.com/ok. 1022 1023 (Full stop inside parens shouldn't be included http://google.com/ok.) 1024 1025 "http://google.com" 1026 1027 'http://google.com' 1028 1029 http://🍄.ga/ http://x🍄.ga/`, 1030 ExpectedHTML: `<p>: <a href="http://google.com">http://google.com</a> <a href="https://google.com">https://google.com</a></p><p><a href="http://google.com/%C3%A5">http://google.com/å</a></p><p><a href="http://www.github.com">www.github.com</a> <a href="http://www.github.com/%C3%A1">www.github.com/á</a></p><p><a href="http://www.google.com/a_b">www.google.com/a_b</a></p><p><img src="http://inline.com/image" alt="http://inline.com/image" /></p><p>Full stop outside parens shouldn't be included <a href="http://google.com/ok">http://google.com/ok</a>.</p><p>(Full stop inside parens shouldn't be included <a href="http://google.com/ok">http://google.com/ok</a>.)</p><p>"<a href="http://google.com">http://google.com</a>"</p><p>'<a href="http://google.com">http://google.com</a>'</p><p><a href="http://%F0%9F%8D%84.ga/">http://🍄.ga/</a> <a href="http://x%F0%9F%8D%84.ga/">http://x🍄.ga/</a></p>`, 1031 }, 1032 "autolinks-2": { 1033 Markdown: `These should not link: 1034 1035 * @a.b.c@. x 1036 * n@. b`, 1037 ExpectedHTML: `<p>These should not link:</p><ul><li>@a.b.c@. x</li><li>n@. b</li></ul>`, 1038 }, 1039 } { 1040 t.Run(name, func(t *testing.T) { 1041 assert.Equal(t, tc.ExpectedHTML, RenderHTML(tc.Markdown)) 1042 }) 1043 } 1044 }