diff options
Diffstat (limited to 'utils/markdown/commonmark_test.go')
-rw-r--r-- | utils/markdown/commonmark_test.go | 1001 |
1 files changed, 1001 insertions, 0 deletions
diff --git a/utils/markdown/commonmark_test.go b/utils/markdown/commonmark_test.go new file mode 100644 index 000000000..0a0959030 --- /dev/null +++ b/utils/markdown/commonmark_test.go @@ -0,0 +1,1001 @@ +// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package markdown + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestCommonMarkReferenceStrings(t *testing.T) { + // For the most part, we aim for CommonMark compliance with the features that we support. We + // also support some GitHub flavored extensions. + // + // You can find most of the references used here: https://github.github.com/gfm/ + + // CommonMark handles leading tabs that aren't on 4-character boundaries differently, so the + // following reference strings will fail. The current implementation is much closer to our + // webapp's behavior though, so I'm leaving it as is for now. It doesn't really impact anything + // we use this package for anyways. + // + // " \tfoo\tbaz\t\tbim\n": "<pre><code>foo\tbaz\t\tbim\n</code></pre>", + // ">\t\tfoo": "<blockquote><pre><code> foo</code></pre></blockquote>", + + for name, tc := range map[string]struct { + Markdown string + ExpectedHTML string + }{ + "0.28-gfm-1": { + Markdown: "\tfoo\tbaz\t\tbim\n", + ExpectedHTML: "<pre><code>foo\tbaz\t\tbim\n</code></pre>", + }, + "0.28-gfm-3": { + Markdown: " a\ta\n ὐ\ta\n", + ExpectedHTML: "<pre><code>a\ta\nὐ\ta\n</code></pre>", + }, + "0.28-gfm-4": { + Markdown: " - foo\n\n\tbar\n", + ExpectedHTML: "<ul><li><p>foo</p><p>bar</p></li></ul>", + }, + "0.28-gfm-5": { + Markdown: "- foo\n\n\t\tbar", + ExpectedHTML: "<ul><li><p>foo</p><pre><code> bar</code></pre></li></ul>", + }, + "0.28-gfm-8": { + Markdown: " foo\n\tbar", + ExpectedHTML: "<pre><code>foo\nbar</code></pre>", + }, + "0.28-gfm-9": { + Markdown: " - foo\n - bar\n\t - baz", + ExpectedHTML: "<ul><li>foo<ul><li>bar<ul><li>baz</li></ul></li></ul></li></ul>", + }, + "0.28-gfm-12": { + Markdown: "- `one\n- two`", + ExpectedHTML: "<ul><li>`one</li><li>two`</li></ul>", + }, + "0.28-gfm-76": { + Markdown: " a simple\n indented code block", + ExpectedHTML: "<pre><code>a simple\n indented code block</code></pre>", + }, + "0.28-gfm-77": { + Markdown: " - foo\n\n bar", + ExpectedHTML: "<ul><li><p>foo</p><p>bar</p></li></ul>", + }, + "0.28-gfm-78": { + Markdown: "1. foo\n\n - bar", + ExpectedHTML: "<ol><li><p>foo</p><ul><li>bar</li></ul></li></ol>", + }, + "0.28-gfm-79": { + Markdown: " <a/>\n *hi*\n\n - one", + ExpectedHTML: "<pre><code><a/>\n*hi*\n\n- one</code></pre>", + }, + "0.28-gfm-80": { + Markdown: " chunk1\n\n chunk2\n \n \n \n chunk3", + ExpectedHTML: "<pre><code>chunk1\n\nchunk2\n\n\n\nchunk3</code></pre>", + }, + "0.28-gfm-81": { + Markdown: " chunk1\n \n chunk2", + ExpectedHTML: "<pre><code>chunk1\n \n chunk2</code></pre>", + }, + "0.28-gfm-82": { + Markdown: "Foo\n bar", + ExpectedHTML: "<p>Foo\nbar</p>", + }, + "0.28-gfm-83": { + Markdown: " foo\nbar", + ExpectedHTML: "<pre><code>foo\n</code></pre><p>bar</p>", + }, + "0.28-gfm-85": { + Markdown: " foo\n bar", + ExpectedHTML: "<pre><code> foo\nbar</code></pre>", + }, + "0.28-gfm-86": { + Markdown: "\n \n foo\n ", + ExpectedHTML: "<pre><code>foo\n</code></pre>", + }, + "0.28-gfm-87": { + Markdown: " foo ", + ExpectedHTML: "<pre><code>foo </code></pre>", + }, + "0.28-gfm-88": { + Markdown: "```\n<\n >\n```", + ExpectedHTML: "<pre><code><\n >\n</code></pre>", + }, + "0.28-gfm-89": { + Markdown: "~~~\n<\n >\n~~~", + ExpectedHTML: "<pre><code><\n >\n</code></pre>", + }, + "0.28-gfm-91": { + Markdown: "```\naaa\n~~~\n```", + ExpectedHTML: "<pre><code>aaa\n~~~\n</code></pre>", + }, + "0.28-gfm-92": { + Markdown: "~~~\naaa\n```\n~~~", + ExpectedHTML: "<pre><code>aaa\n```\n</code></pre>", + }, + "0.28-gfm-93": { + Markdown: "````\naaa\n```\n``````", + ExpectedHTML: "<pre><code>aaa\n```\n</code></pre>", + }, + "0.28-gfm-94": { + Markdown: "~~~~\naaa\n~~~\n~~~~", + ExpectedHTML: "<pre><code>aaa\n~~~\n</code></pre>", + }, + "0.28-gfm-95": { + Markdown: "```", + ExpectedHTML: "<pre><code></code></pre>", + }, + "0.28-gfm-96": { + Markdown: "`````\n\n```\naaa", + ExpectedHTML: "<pre><code>\n```\naaa</code></pre>", + }, + "0.28-gfm-97": { + Markdown: "> ```\n> aaa\n\nbbb", + ExpectedHTML: "<blockquote><pre><code>aaa\n</code></pre></blockquote><p>bbb</p>", + }, + "0.28-gfm-98": { + Markdown: "```\n\n \n```", + ExpectedHTML: "<pre><code>\n \n</code></pre>", + }, + "0.28-gfm-99": { + Markdown: "```\n```", + ExpectedHTML: "<pre><code></code></pre>", + }, + "0.28-gfm-100": { + Markdown: " ```\n aaa\naaa\n```", + ExpectedHTML: "<pre><code>aaa\naaa\n</code></pre>", + }, + "0.28-gfm-101": { + Markdown: " ```\naaa\n aaa\naaa\n ```", + ExpectedHTML: "<pre><code>aaa\naaa\naaa\n</code></pre>", + }, + "0.28-gfm-102": { + Markdown: " ```\n aaa\n aaa\n aaa\n ```", + ExpectedHTML: "<pre><code>aaa\n aaa\naaa\n</code></pre>", + }, + "0.28-gfm-103": { + Markdown: " ```\n aaa\n ```", + ExpectedHTML: "<pre><code>```\naaa\n```</code></pre>", + }, + "0.28-gfm-104": { + Markdown: "```\naaa\n ```", + ExpectedHTML: "<pre><code>aaa\n</code></pre>", + }, + "0.28-gfm-105": { + Markdown: " ```\naaa\n ```", + ExpectedHTML: "<pre><code>aaa\n</code></pre>", + }, + "0.28-gfm-106": { + Markdown: "```\naaa\n ```", + ExpectedHTML: "<pre><code>aaa\n ```</code></pre>", + }, + "0.28-gfm-108": { + Markdown: "~~~~~~\naaa\n~~~ ~~", + ExpectedHTML: "<pre><code>aaa\n~~~ ~~</code></pre>", + }, + "0.28-gfm-109": { + Markdown: "foo\n```\nbar\n```\nbaz", + ExpectedHTML: "<p>foo</p><pre><code>bar\n</code></pre><p>baz</p>", + }, + "0.28-gfm-111": { + Markdown: "```ruby\ndef foo(x)\n return 3\nend\n```", + ExpectedHTML: "<pre><code class=\"language-ruby\">def foo(x)\n return 3\nend\n</code></pre>", + }, + "0.28-gfm-112": { + Markdown: "```ruby startline=3 $%@#$\ndef foo(x)\n return 3\nend\n```", + ExpectedHTML: "<pre><code class=\"language-ruby\">def foo(x)\n return 3\nend\n</code></pre>", + }, + "0.28-gfm-113": { + Markdown: "````;\n````", + ExpectedHTML: "<pre><code class=\"language-;\"></code></pre>", + }, + "0.28-gfm-115": { + Markdown: "```\n``` aaa\n```", + ExpectedHTML: "<pre><code>``` aaa\n</code></pre>", + }, + "0.28-gfm-159": { + Markdown: "[foo]: /url \"title\"\n\n[foo]", + ExpectedHTML: `<p><a href="/url" title="title">foo</a></p>`, + }, + "0.28-gfm-160": { + Markdown: " [foo]: \n /url \n 'the title' \n\n[foo]", + ExpectedHTML: `<p><a href="/url" title="the title">foo</a></p>`, + }, + "0.28-gfm-161": { + Markdown: "[Foo*bar\\]]:my_(url) 'title (with parens)'\n\n[Foo*bar\\]]", + ExpectedHTML: `<p><a href="my_(url)" title="title (with parens)">Foo*bar]</a></p>`, + }, + "0.28-gfm-162": { + Markdown: "[Foo bar]:\n<my%20url>\n'title'\n\n[Foo bar]", + ExpectedHTML: `<p><a href="my%20url" title="title">Foo bar</a></p>`, + }, + "0.28-gfm-163": { + Markdown: "[foo]: /url '\ntitle\nline1\nline2\n'\n\n[foo]", + ExpectedHTML: "<p><a href=\"/url\" title=\"\ntitle\nline1\nline2\n\">foo</a></p>", + }, + "0.28-gfm-164": { + Markdown: "[foo]: /url 'title\n\nwith blank line'\n\n[foo]", + ExpectedHTML: "<p>[foo]: /url 'title</p><p>with blank line'</p><p>[foo]</p>", + }, + "0.28-gfm-165": { + Markdown: "[foo]:\n/url\n\n[foo]", + ExpectedHTML: `<p><a href="/url">foo</a></p>`, + }, + "0.28-gfm-166": { + Markdown: "[foo]:\n\n[foo]", + ExpectedHTML: `<p>[foo]:</p><p>[foo]</p>`, + }, + "0.28-gfm-167": { + Markdown: "[foo]: /url\\bar\\*baz \"foo\\\"bar\\baz\"\n\n[foo]", + ExpectedHTML: `<p><a href="/url%5Cbar*baz" title="foo"bar\baz">foo</a></p>`, + }, + "0.28-gfm-168": { + Markdown: "[foo]\n\n[foo]: url", + ExpectedHTML: `<p><a href="url">foo</a></p>`, + }, + "0.28-gfm-169": { + Markdown: "[foo]\n\n[foo]: first\n[foo]: second", + ExpectedHTML: `<p><a href="first">foo</a></p>`, + }, + "0.28-gfm-170": { + Markdown: "[FOO]: /url\n\n[Foo]", + ExpectedHTML: `<p><a href="/url">Foo</a></p>`, + }, + "0.28-gfm-171": { + Markdown: "[ΑΓΩ]: /φου\n\n[αγω]", + ExpectedHTML: `<p><a href="/%CF%86%CE%BF%CF%85">αγω</a></p>`, + }, + "0.28-gfm-172": { + Markdown: "[foo]: /url", + ExpectedHTML: ``, + }, + "0.28-gfm-173": { + Markdown: "[\nfoo\n]: /url\nbar", + ExpectedHTML: `<p>bar</p>`, + }, + "0.28-gfm-174": { + Markdown: `[foo]: /url "title" ok`, + ExpectedHTML: `<p>[foo]: /url "title" ok</p>`, + }, + "0.28-gfm-175": { + Markdown: "[foo]: /url\n\"title\" ok", + ExpectedHTML: `<p>"title" ok</p>`, + }, + "0.28-gfm-176": { + Markdown: " [foo]: /url \"title\"\n\n[foo]", + ExpectedHTML: "<pre><code>[foo]: /url "title"\n</code></pre><p>[foo]</p>", + }, + "0.28-gfm-177": { + Markdown: "```\n[foo]: /url\n```\n\n[foo]", + ExpectedHTML: "<pre><code>[foo]: /url\n</code></pre><p>[foo]</p>", + }, + "0.28-gfm-178": { + Markdown: "Foo\n[bar]: /baz\n\n[bar]", + ExpectedHTML: "<p>Foo\n[bar]: /baz</p><p>[bar]</p>", + }, + "0.28-gfm-180": { + Markdown: "[foo]: /foo-url \"foo\"\n[bar]: /bar-url\n\"bar\"\n[baz]: /baz-url\n\n[foo],\n[bar],\n[baz]", + ExpectedHTML: `<p><a href="/foo-url" title="foo">foo</a>, +<a href="/bar-url" title="bar">bar</a>, +<a href="/baz-url">baz</a></p>`, + }, + "0.28-gfm-181": { + Markdown: "[foo]\n\n> [foo]: /url", + ExpectedHTML: `<p><a href="/url">foo</a></p><blockquote></blockquote>`, + }, + "0.28-gfm-182": { + Markdown: "aaa\n\nbbb", + ExpectedHTML: "<p>aaa</p><p>bbb</p>", + }, + "0.28-gfm-183": { + Markdown: "aaa\nbbb\n\nccc\nddd", + ExpectedHTML: "<p>aaa\nbbb</p><p>ccc\nddd</p>", + }, + "0.28-gfm-184": { + Markdown: "aaa\n\n\nbbb", + ExpectedHTML: "<p>aaa</p><p>bbb</p>", + }, + "0.28-gfm-185": { + Markdown: " aaa\n bbb", + ExpectedHTML: "<p>aaa\nbbb</p>", + }, + "0.28-gfm-186": { + Markdown: "aaa\n bbb\n ccc", + ExpectedHTML: "<p>aaa\nbbb\nccc</p>", + }, + "0.28-gfm-187": { + Markdown: " aaa\nbbb", + ExpectedHTML: "<p>aaa\nbbb</p>", + }, + "0.28-gfm-188": { + Markdown: " aaa\nbbb", + ExpectedHTML: "<pre><code>aaa\n</code></pre><p>bbb</p>", + }, + "0.28-gfm-189": { + Markdown: "aaa \nbbb \n", + ExpectedHTML: "<p>aaa<br />bbb</p>", + }, + "0.28-gfm-204": { + Markdown: "> bar\nbaz\n> foo", + ExpectedHTML: "<blockquote><p>bar\nbaz\nfoo</p></blockquote>", + }, + "0.28-gfm-206": { + Markdown: "> - foo\n- bar", + ExpectedHTML: "<blockquote><ul><li>foo</li></ul></blockquote><ul><li>bar</li></ul>", + }, + "0.28-gfm-207": { + Markdown: "> foo\n bar", + ExpectedHTML: "<blockquote><pre><code>foo\n</code></pre></blockquote><pre><code>bar</code></pre>", + }, + "0.28-gfm-208": { + Markdown: "> ```\nfoo\n```", + ExpectedHTML: "<blockquote><pre><code></code></pre></blockquote><p>foo</p><pre><code></code></pre>", + }, + "0.28-gfm-209": { + Markdown: "> foo\n - bar", + ExpectedHTML: "<blockquote><p>foo\n- bar</p></blockquote>", + }, + "0.28-gfm-210": { + Markdown: ">", + ExpectedHTML: "<blockquote></blockquote>", + }, + "0.28-gfm-211": { + Markdown: ">\n> \n> ", + ExpectedHTML: "<blockquote></blockquote>", + }, + "0.28-gfm-212": { + Markdown: ">\n> foo\n> ", + ExpectedHTML: "<blockquote><p>foo</p></blockquote>", + }, + "0.28-gfm-213": { + Markdown: "> foo\n\n> bar", + ExpectedHTML: "<blockquote><p>foo</p></blockquote><blockquote><p>bar</p></blockquote>", + }, + "0.28-gfm-214": { + Markdown: "> foo\n> bar", + ExpectedHTML: "<blockquote><p>foo\nbar</p></blockquote>", + }, + "0.28-gfm-215": { + Markdown: "> foo\n>\n> bar", + ExpectedHTML: "<blockquote><p>foo</p><p>bar</p></blockquote>", + }, + "0.28-gfm-216": { + Markdown: "foo\n> bar", + ExpectedHTML: "<p>foo</p><blockquote><p>bar</p></blockquote>", + }, + "0.28-gfm-218": { + Markdown: "> bar\nbaz", + ExpectedHTML: "<blockquote><p>bar\nbaz</p></blockquote>", + }, + "0.28-gfm-219": { + Markdown: "> bar\n\nbaz", + ExpectedHTML: "<blockquote><p>bar</p></blockquote><p>baz</p>", + }, + "0.28-gfm-220": { + Markdown: "> bar\n>\nbaz", + ExpectedHTML: "<blockquote><p>bar</p></blockquote><p>baz</p>", + }, + "0.28-gfm-221": { + Markdown: "> > > foo\nbar", + ExpectedHTML: "<blockquote><blockquote><blockquote><p>foo\nbar</p></blockquote></blockquote></blockquote>", + }, + "0.28-gfm-222": { + Markdown: ">>> foo\n> bar\n>>baz", + ExpectedHTML: "<blockquote><blockquote><blockquote><p>foo\nbar\nbaz</p></blockquote></blockquote></blockquote>", + }, + "0.28-gfm-223": { + Markdown: "> code\n\n> not code", + ExpectedHTML: "<blockquote><pre><code>code\n</code></pre></blockquote><blockquote><p>not code</p></blockquote>", + }, + "0.28-gfm-224": { + Markdown: "A paragraph\nwith two lines.\n\n indented code\n\n> A block quote.", + ExpectedHTML: "<p>A paragraph\nwith two lines.</p><pre><code>indented code\n</code></pre><blockquote><p>A block quote.</p></blockquote>", + }, + "0.28-gfm-225": { + Markdown: "1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.", + 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>", + }, + "0.28-gfm-226": { + Markdown: "- one\n\n two", + ExpectedHTML: "<ul><li>one</li></ul><p>two</p>", + }, + "0.28-gfm-227": { + Markdown: "- one\n\n two", + ExpectedHTML: "<ul><li><p>one</p><p>two</p></li></ul>", + }, + "0.28-gfm-228": { + Markdown: " - one\n\n two", + ExpectedHTML: "<ul><li>one</li></ul><pre><code> two</code></pre>", + }, + "0.28-gfm-229": { + Markdown: " - one\n\n two", + ExpectedHTML: "<ul><li><p>one</p><p>two</p></li></ul>", + }, + "0.28-gfm-230": { + Markdown: " > > 1. one\n>>\n>> two", + ExpectedHTML: "<blockquote><blockquote><ol><li><p>one</p><p>two</p></li></ol></blockquote></blockquote>", + }, + "0.28-gfm-231": { + Markdown: ">>- one\n>>\n > > two", + ExpectedHTML: "<blockquote><blockquote><ul><li>one</li></ul><p>two</p></blockquote></blockquote>", + }, + "0.28-gfm-232": { + Markdown: "-one\n\n2.two", + ExpectedHTML: "<p>-one</p><p>2.two</p>", + }, + "0.28-gfm-233": { + Markdown: "- foo\n\n\n bar", + ExpectedHTML: "<ul><li><p>foo</p><p>bar</p></li></ul>", + }, + "0.28-gfm-234": { + Markdown: "1. foo\n\n ```\n bar\n ```\n\n baz\n\n > bam", + ExpectedHTML: "<ol><li><p>foo</p><pre><code>bar\n</code></pre><p>baz</p><blockquote><p>bam</p></blockquote></li></ol>", + }, + "0.28-gfm-235": { + Markdown: "- Foo\n\n bar\n\n\n baz", + ExpectedHTML: "<ul><li><p>Foo</p><pre><code>bar\n\n\nbaz</code></pre></li></ul>", + }, + "0.28-gfm-236": { + Markdown: "123456789. ok", + ExpectedHTML: `<ol start="123456789"><li>ok</li></ol>`, + }, + "0.28-gfm-237": { + Markdown: "1234567890. not ok", + ExpectedHTML: "<p>1234567890. not ok</p>", + }, + "0.28-gfm-238": { + Markdown: "0. ok", + ExpectedHTML: `<ol start="0"><li>ok</li></ol>`, + }, + "0.28-gfm-239": { + Markdown: "003. ok", + ExpectedHTML: `<ol start="3"><li>ok</li></ol>`, + }, + "0.28-gfm-240": { + Markdown: "-1. not ok", + ExpectedHTML: "<p>-1. not ok</p>", + }, + "0.28-gfm-241": { + Markdown: "- foo\n\n bar", + ExpectedHTML: "<ul><li><p>foo</p><pre><code>bar</code></pre></li></ul>", + }, + "0.28-gfm-242": { + Markdown: " 10. foo\n\n bar", + ExpectedHTML: `<ol start="10"><li><p>foo</p><pre><code>bar</code></pre></li></ol>`, + }, + "0.28-gfm-243": { + Markdown: " indented code\n\nparagraph\n\n more code", + ExpectedHTML: "<pre><code>indented code\n</code></pre><p>paragraph</p><pre><code>more code</code></pre>", + }, + "0.28-gfm-244": { + Markdown: "1. indented code\n\n paragraph\n\n more code", + ExpectedHTML: "<ol><li><pre><code>indented code\n</code></pre><p>paragraph</p><pre><code>more code</code></pre></li></ol>", + }, + "0.28-gfm-245": { + Markdown: "1. indented code\n\n paragraph\n\n more code", + ExpectedHTML: "<ol><li><pre><code> indented code\n</code></pre><p>paragraph</p><pre><code>more code</code></pre></li></ol>", + }, + "0.28-gfm-246": { + Markdown: " foo\n\nbar", + ExpectedHTML: "<p>foo</p><p>bar</p>", + }, + "0.28-gfm-247": { + Markdown: "- foo\n\n bar", + ExpectedHTML: "<ul><li>foo</li></ul><p>bar</p>", + }, + "0.28-gfm-248": { + Markdown: "- foo\n\n bar", + ExpectedHTML: "<ul><li><p>foo</p><p>bar</p></li></ul>", + }, + "0.28-gfm-249": { + Markdown: "-\n foo\n-\n ```\n bar\n ```\n-\n baz", + ExpectedHTML: "<ul><li>foo</li><li><pre><code>bar\n</code></pre></li><li><pre><code>baz</code></pre></li></ul>", + }, + "0.28-gfm-250": { + Markdown: "- \n foo", + ExpectedHTML: "<ul><li>foo</li></ul>", + }, + "0.28-gfm-251": { + Markdown: "-\n\n foo", + ExpectedHTML: "<ul><li></li></ul><p>foo</p>", + }, + "0.28-gfm-252": { + Markdown: "- foo\n-\n- bar", + ExpectedHTML: "<ul><li>foo</li><li></li><li>bar</li></ul>", + }, + "0.28-gfm-253": { + Markdown: "- foo\n- \n- bar", + ExpectedHTML: "<ul><li>foo</li><li></li><li>bar</li></ul>", + }, + "0.28-gfm-254": { + Markdown: "1. foo\n2.\n3. bar", + ExpectedHTML: "<ol><li>foo</li><li></li><li>bar</li></ol>", + }, + "0.28-gfm-255": { + Markdown: "*", + ExpectedHTML: "<ul><li></li></ul>", + }, + "0.28-gfm-256": { + Markdown: "foo\n*\n\nfoo\n1.", + ExpectedHTML: "<p>foo\n*</p><p>foo\n1.</p>", + }, + "0.28-gfm-257": { + Markdown: " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.", + 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>", + }, + "0.28-gfm-258": { + Markdown: " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.", + 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>", + }, + "0.28-gfm-259": { + Markdown: " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.", + 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>", + }, + "0.28-gfm-260": { + Markdown: " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.", + ExpectedHTML: "<pre><code>1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.</code></pre>", + }, + "0.28-gfm-261": { + Markdown: " 1. A paragraph\nwith two lines.\n\n indented code\n\n > A block quote.", + 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>", + }, + "0.28-gfm-262": { + Markdown: " 1. A paragraph\n with two lines.", + ExpectedHTML: "<ol><li>A paragraph\nwith two lines.</li></ol>", + }, + "0.28-gfm-263": { + Markdown: "> 1. > Blockquote\ncontinued here.", + ExpectedHTML: "<blockquote><ol><li><blockquote><p>Blockquote\ncontinued here.</p></blockquote></li></ol></blockquote>", + }, + "0.28-gfm-264": { + Markdown: "> 1. > Blockquote\n> continued here.", + ExpectedHTML: "<blockquote><ol><li><blockquote><p>Blockquote\ncontinued here.</p></blockquote></li></ol></blockquote>", + }, + "0.28-gfm-265": { + Markdown: "- foo\n - bar\n - baz\n - boo", + ExpectedHTML: "<ul><li>foo<ul><li>bar<ul><li>baz<ul><li>boo</li></ul></li></ul></li></ul></li></ul>", + }, + "0.28-gfm-266": { + Markdown: "- foo\n - bar\n - baz\n - boo", + ExpectedHTML: "<ul><li>foo</li><li>bar</li><li>baz</li><li>boo</li></ul>", + }, + "0.28-gfm-267": { + Markdown: "10) foo\n - bar", + ExpectedHTML: `<ol start="10"><li>foo<ul><li>bar</li></ul></li></ol>`, + }, + "0.28-gfm-268": { + Markdown: "10) foo\n - bar", + ExpectedHTML: `<ol start="10"><li>foo</li></ol><ul><li>bar</li></ul>`, + }, + "0.28-gfm-269": { + Markdown: "- - foo", + ExpectedHTML: "<ul><li><ul><li>foo</li></ul></li></ul>", + }, + "0.28-gfm-270": { + Markdown: "1. - 2. foo", + ExpectedHTML: `<ol><li><ul><li><ol start="2"><li>foo</li></ol></li></ul></li></ol>`, + }, + "0.28-gfm-274": { + Markdown: "- foo\n- bar\n+ baz", + ExpectedHTML: "<ul><li>foo</li><li>bar</li></ul><ul><li>baz</li></ul>", + }, + "0.28-gfm-275": { + Markdown: "1. foo\n2. bar\n3) baz", + ExpectedHTML: `<ol><li>foo</li><li>bar</li></ol><ol start="3"><li>baz</li></ol>`, + }, + "0.28-gfm-276": { + Markdown: "Foo\n- bar\n- baz", + ExpectedHTML: "<p>Foo</p><ul><li>bar</li><li>baz</li></ul>", + }, + "0.28-gfm-277": { + Markdown: "The number of windows in my house is\n14. The number of doors is 6.", + ExpectedHTML: "<p>The number of windows in my house is\n14. The number of doors is 6.</p>", + }, + "0.28-gfm-278": { + Markdown: "The number of windows in my house is\n1. The number of doors is 6.", + ExpectedHTML: "<p>The number of windows in my house is</p><ol><li>The number of doors is 6.</li></ol>", + }, + "0.28-gfm-279": { + Markdown: "- foo\n\n- bar\n\n\n- baz", + ExpectedHTML: "<ul><li><p>foo</p></li><li><p>bar</p></li><li><p>baz</p></li></ul>", + }, + "0.28-gfm-280": { + Markdown: "- foo\n - bar\n - baz\n\n\n bim", + ExpectedHTML: "<ul><li>foo<ul><li>bar<ul><li><p>baz</p><p>bim</p></li></ul></li></ul></li></ul>", + }, + "0.28-gfm-283": { + Markdown: "- a\n - b\n - c\n - d\n - e\n - f\n - g\n - h\n- i", + 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>", + }, + "0.28-gfm-284": { + Markdown: "1. a\n\n 2. b\n\n 3. c", + ExpectedHTML: "<ol><li><p>a</p></li><li><p>b</p></li><li><p>c</p></li></ol>", + }, + "0.28-gfm-285": { + Markdown: "- a\n- b\n\n- c", + ExpectedHTML: "<ul><li><p>a</p></li><li><p>b</p></li><li><p>c</p></li></ul>", + }, + "0.28-gfm-286": { + Markdown: "* a\n*\n\n* c", + ExpectedHTML: "<ul><li><p>a</p></li><li></li><li><p>c</p></li></ul>", + }, + "0.28-gfm-287": { + Markdown: "- a\n- b\n\n c\n- d", + ExpectedHTML: "<ul><li><p>a</p></li><li><p>b</p><p>c</p></li><li><p>d</p></li></ul>", + }, + "0.28-gfm-288": { + Markdown: "- a\n- b\n\n [ref]: /url\n- d", + ExpectedHTML: "<ul><li><p>a</p></li><li><p>b</p></li><li><p>d</p></li></ul>", + }, + "0.28-gfm-289": { + Markdown: "- a\n- ```\n b\n\n\n ```\n- c", + ExpectedHTML: "<ul><li>a</li><li><pre><code>b\n\n\n</code></pre></li><li>c</li></ul>", + }, + "0.28-gfm-290": { + Markdown: "- a\n - b\n\n c\n- d", + ExpectedHTML: "<ul><li>a<ul><li><p>b</p><p>c</p></li></ul></li><li>d</li></ul>", + }, + "0.28-gfm-291": { + Markdown: "* a\n > b\n >\n* c", + ExpectedHTML: "<ul><li>a<blockquote><p>b</p></blockquote></li><li>c</li></ul>", + }, + "0.28-gfm-292": { + Markdown: "- a\n > b\n ```\n c\n ```\n- d", + ExpectedHTML: "<ul><li>a<blockquote><p>b</p></blockquote><pre><code>c\n</code></pre></li><li>d</li></ul>", + }, + "0.28-gfm-293": { + Markdown: "- a", + ExpectedHTML: "<ul><li>a</li></ul>", + }, + "0.28-gfm-294": { + Markdown: "- a\n - b", + ExpectedHTML: "<ul><li>a<ul><li>b</li></ul></li></ul>", + }, + "0.28-gfm-295": { + Markdown: "1. ```\n foo\n ```\n\n bar", + ExpectedHTML: "<ol><li><pre><code>foo\n</code></pre><p>bar</p></li></ol>", + }, + "0.28-gfm-296": { + Markdown: "* foo\n * bar\n\n baz", + ExpectedHTML: "<ul><li><p>foo</p><ul><li>bar</li></ul><p>baz</p></li></ul>", + }, + "0.28-gfm-297": { + Markdown: "- a\n - b\n - c\n\n- d\n - e\n - f", + 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>", + }, + "0.28-gfm-298": { + Markdown: "`hi`lo`", + ExpectedHTML: "<p><code>hi</code>lo`</p>", + }, + "0.28-gfm-299": { + Markdown: `\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_` + "\\`" + `\{\|\}\~`, + ExpectedHTML: "<p>!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~</p>", + }, + "0.28-gfm-300": { + Markdown: `\→\A\a\ \3\φ\«`, + ExpectedHTML: `<p>\→\A\a\ \3\φ\«</p>`, + }, + "0.28-gfm-301": { + Markdown: `\*not emphasized* +\<br/> not a tag +\[not a link](/foo) +\` + "`not code`" + ` +1\. not a list +\* not a list +\# not a heading +\[foo]: /url "not a reference"`, + ExpectedHTML: `<p>*not emphasized* +<br/> not a tag +[not a link](/foo) +` + "`not code`" + ` +1. not a list +* not a list +# not a heading +[foo]: /url "not a reference"</p>`, + }, + "0.28-gfm-304": { + Markdown: "`` \\[\\` ``", + ExpectedHTML: "<p><code>\\[\\`</code></p>", + }, + "0.28-gfm-305": { + Markdown: ` \[\]`, + ExpectedHTML: `<pre><code>\[\]</code></pre>`, + }, + "0.28-gfm-306": { + Markdown: "~~~\n\\[\\]\n~~~", + ExpectedHTML: "<pre><code>\\[\\]\n</code></pre>", + }, + "0.28-gfm-309": { + Markdown: `[foo](/bar\* "ti\*tle")`, + ExpectedHTML: `<p><a href="/bar*" title="ti*tle">foo</a></p>`, + }, + "0.28-gfm-310": { + Markdown: `[foo] + +[foo]: /bar\* "ti\*tle"`, + ExpectedHTML: `<p><a href="/bar*" title="ti*tle">foo</a></p>`, + }, + "0.28-gfm-311": { + Markdown: "``` foo\\+bar\nfoo\n```", + ExpectedHTML: "<pre><code class=\"language-foo+bar\">foo\n</code></pre>", + }, + "0.28-gfm-312": { + Markdown: " & © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸", + ExpectedHTML: "<p>\u00a0 & © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸</p>", + }, + "0.28-gfm-313": { + Markdown: "# Ӓ Ϡ � �", + ExpectedHTML: "<p># Ӓ Ϡ � �</p>", + }, + "0.28-gfm-314": { + Markdown: "" ആ ಫ", + ExpectedHTML: "<p>" ആ ಫ</p>", + }, + "0.28-gfm-315": { + Markdown: "  &x; &#; &#x;\n&ThisIsNotDefined; &hi?;", + ExpectedHTML: "<p>&nbsp &x; &#; &#x;\n&ThisIsNotDefined; &hi?;</p>", + }, + "0.28-gfm-316": { + Markdown: "©", + ExpectedHTML: "<p>&copy</p>", + }, + "0.28-gfm-317": { + Markdown: "&MadeUpEntity;", + ExpectedHTML: "<p>&MadeUpEntity;</p>", + }, + "0.28-gfm-319": { + Markdown: `[foo](/föö "föö")`, + ExpectedHTML: `<p><a href="/f%C3%B6%C3%B6" title="föö">foo</a></p>`, + }, + "0.28-gfm-320": { + Markdown: "[foo]\n\n[foo]: /föö \"föö\"", + ExpectedHTML: `<p><a href="/f%C3%B6%C3%B6" title="föö">foo</a></p>`, + }, + "0.28-gfm-321": { + Markdown: "``` föö\nfoo\n```", + ExpectedHTML: "<pre><code class=\"language-föö\">foo\n</code></pre>", + }, + "0.28-gfm-322": { + Markdown: "`föö`", + ExpectedHTML: "<p><code>f&ouml;&ouml;</code></p>", + }, + "0.28-gfm-323": { + Markdown: " föfö", + ExpectedHTML: "<pre><code>f&ouml;f&ouml;</code></pre>", + }, + "0.28-gfm-324": { + Markdown: "`foo`", + ExpectedHTML: "<p><code>foo</code></p>", + }, + "0.28-gfm-325": { + Markdown: "`` foo ` bar ``", + ExpectedHTML: "<p><code>foo ` bar</code></p>", + }, + "0.28-gfm-326": { + Markdown: "` `` `", + ExpectedHTML: "<p><code>``</code></p>", + }, + "0.28-gfm-327": { + Markdown: "``\nfoo\n``", + ExpectedHTML: "<p><code>foo</code></p>", + }, + "0.28-gfm-328": { + Markdown: "`foo bar\n baz`", + ExpectedHTML: "<p><code>foo bar baz</code></p>", + }, + "0.28-gfm-329": { + Markdown: "`a\xa0\xa0b`", + ExpectedHTML: "<p><code>a\xa0\xa0b</code></p>", + }, + "0.28-gfm-330": { + Markdown: "`foo `` bar`", + ExpectedHTML: "<p><code>foo `` bar</code></p>", + }, + "0.28-gfm-331": { + Markdown: "`foo\\`bar`", + ExpectedHTML: "<p><code>foo\\</code>bar`</p>", + }, + "0.28-gfm-332": { + Markdown: "*foo`*`", + ExpectedHTML: "<p>*foo<code>*</code></p>", + }, + "0.28-gfm-333": { + Markdown: "[not a `link](/foo`)", + ExpectedHTML: "<p>[not a <code>link](/foo</code>)</p>", + }, + "0.28-gfm-334": { + Markdown: "`<a href=\"`\">`", + ExpectedHTML: "<p><code><a href="</code>">`</p>", + }, + "0.28-gfm-336": { + Markdown: "`<http://foo.bar.`baz>`", + ExpectedHTML: "<p><code><http://foo.bar.</code>baz>`</p>", + }, + "0.28-gfm-338": { + Markdown: "```foo``", + ExpectedHTML: "<p>```foo``</p>", + }, + "0.28-gfm-339": { + Markdown: "`foo", + ExpectedHTML: "<p>`foo</p>", + }, + "0.28-gfm-340": { + Markdown: "`foo``bar``", + ExpectedHTML: "<p>`foo<code>bar</code></p>", + }, + "0.28-gfm-472": { + Markdown: `[link](/uri "title")`, + ExpectedHTML: `<p><a href="/uri" title="title">link</a></p>`, + }, + "0.28-gfm-473": { + Markdown: `[link](/uri)`, + ExpectedHTML: `<p><a href="/uri">link</a></p>`, + }, + "0.28-gfm-474": { + Markdown: `[link]()`, + ExpectedHTML: `<p><a href="">link</a></p>`, + }, + "0.28-gfm-475": { + Markdown: `[link](<>)`, + ExpectedHTML: `<p><a href="">link</a></p>`, + }, + "0.28-gfm-476": { + Markdown: `[link](/my uri)`, + ExpectedHTML: `<p>[link](/my uri)</p>`, + }, + "0.28-gfm-477": { + Markdown: `[link](</my uri>)`, + ExpectedHTML: `<p>[link](</my uri>)</p>`, + }, + "0.28-gfm-478": { + Markdown: "[link](foo\nbar)", + ExpectedHTML: "<p>[link](foo\nbar)</p>", + }, + "0.28-gfm-480": { + Markdown: `[link](\(foo\))`, + ExpectedHTML: `<p><a href="(foo)">link</a></p>`, + }, + "0.28-gfm-481": { + Markdown: `[link](foo(and(bar)))`, + ExpectedHTML: `<p><a href="foo(and(bar))">link</a></p>`, + }, + "0.28-gfm-482": { + Markdown: `[link](foo\(and\(bar\))`, + ExpectedHTML: `<p><a href="foo(and(bar)">link</a></p>`, + }, + "0.28-gfm-483": { + Markdown: `[link](<foo(and(bar)>)`, + ExpectedHTML: `<p><a href="foo(and(bar)">link</a></p>`, + }, + "0.28-gfm-484": { + Markdown: `[link](foo\)\:)`, + ExpectedHTML: `<p><a href="foo):">link</a></p>`, + }, + "0.28-gfm-485": { + Markdown: "[link](#fragment)\n\n[link](http://example.com#fragment)\n\n[link](http://example.com?foo=3#frag)", + 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>`, + }, + "0.28-gfm-486": { + Markdown: `[link](foo\bar)`, + ExpectedHTML: `<p><a href="foo%5Cbar">link</a></p>`, + }, + "0.28-gfm-488": { + Markdown: `[link]("title")`, + ExpectedHTML: `<p><a href="%22title%22">link</a></p>`, + }, + "0.28-gfm-489": { + Markdown: "[link](/url \"title\")\n[link](/url 'title')\n[link](/url (title))", + 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>", + }, + "0.28-gfm-490": { + Markdown: `[link](/url "title \""")`, + ExpectedHTML: `<p><a href="/url" title="title """>link</a></p>`, + }, + "0.28-gfm-491": { + Markdown: "[link](/url\u00a0\"title\")", + ExpectedHTML: `<p><a href="/url%C2%A0%22title%22">link</a></p>`, + }, + "0.28-gfm-492": { + Markdown: `[link](/url "title "and" title")`, + ExpectedHTML: `<p>[link](/url "title "and" title")</p>`, + }, + "0.28-gfm-493": { + Markdown: `[link](/url 'title "and" title')`, + ExpectedHTML: `<p><a href="/url" title="title "and" title">link</a></p>`, + }, + "0.28-gfm-494": { + Markdown: "[link]( /uri\n \"title\" )", + ExpectedHTML: `<p><a href="/uri" title="title">link</a></p>`, + }, + "0.28-gfm-495": { + Markdown: "[link] (/uri)", + ExpectedHTML: `<p>[link] (/uri)</p>`, + }, + "0.28-gfm-496": { + Markdown: "[link [foo [bar]]](/uri)", + ExpectedHTML: `<p><a href="/uri">link [foo [bar]]</a></p>`, + }, + "0.28-gfm-497": { + Markdown: "[link] bar](/uri)", + ExpectedHTML: `<p>[link] bar](/uri)</p>`, + }, + "0.28-gfm-498": { + Markdown: "[link [bar](/uri)", + ExpectedHTML: `<p>[link <a href="/uri">bar</a></p>`, + }, + "0.28-gfm-499": { + Markdown: `[link \[bar](/uri)`, + ExpectedHTML: `<p><a href="/uri">link [bar</a></p>`, + }, + "0.28-gfm-501": { + Markdown: "[![moon](moon.jpg)](/uri)", + ExpectedHTML: `<p><a href="/uri"><img src="moon.jpg" alt="moon" /></a></p>`, + }, + "0.28-gfm-502": { + Markdown: "[foo [bar](/uri)](/uri)", + ExpectedHTML: `<p>[foo <a href="/uri">bar</a>](/uri)</p>`, + }, + "0.28-gfm-504": { + Markdown: "![[[foo](uri1)](uri2)](uri3)", + ExpectedHTML: `<p><img src="uri3" alt="[foo](uri2)" /></p>`, + }, + "0.28-gfm-505": { + Markdown: "*[foo*](/uri)", + ExpectedHTML: `<p>*<a href="/uri">foo*</a></p>`, + }, + "0.28-gfm-506": { + Markdown: "[foo *bar](baz*)", + ExpectedHTML: `<p><a href="baz*">foo *bar</a></p>`, + }, + "0.28-gfm-509": { + Markdown: "[foo`](/uri)`", + ExpectedHTML: `<p>[foo<code>](/uri)</code></p>`, + }, + "0.28-gfm-556": { + Markdown: `![foo](/url "title")`, + ExpectedHTML: `<p><img src="/url" alt="foo" title="title" /></p>`, + }, + "0.28-gfm-558": { + Markdown: `![foo ![bar](/url)](/url2)`, + ExpectedHTML: `<p><img src="/url2" alt="foo bar" /></p>`, + }, + "0.28-gfm-559": { + Markdown: `![foo [bar](/url)](/url2)`, + ExpectedHTML: `<p><img src="/url2" alt="foo bar" /></p>`, + }, + "0.28-gfm-562": { + Markdown: `![foo](train.jpg)`, + ExpectedHTML: `<p><img src="train.jpg" alt="foo" /></p>`, + }, + "0.28-gfm-563": { + Markdown: `My ![foo bar](/path/to/train.jpg "title" )`, + ExpectedHTML: `<p>My <img src="/path/to/train.jpg" alt="foo bar" title="title" /></p>`, + }, + "0.28-gfm-564": { + Markdown: `![foo](<url>)`, + ExpectedHTML: `<p><img src="url" alt="foo" /></p>`, + }, + "0.28-gfm-565": { + Markdown: `![](/url)`, + ExpectedHTML: `<p><img src="/url" alt="" /></p>`, + }, + "0.28-gfm-647": { + Markdown: "hello $.;'there", + ExpectedHTML: "<p>hello $.;'there</p>", + }, + "0.28-gfm-648": { + Markdown: "Foo χρῆν", + ExpectedHTML: "<p>Foo χρῆν</p>", + }, + "0.28-gfm-649": { + Markdown: "Multiple spaces", + ExpectedHTML: "<p>Multiple spaces</p>", + }, + } { + t.Run(name, func(t *testing.T) { + assert.Equal(t, tc.ExpectedHTML, RenderHTML(tc.Markdown)) + }) + } +} |