2014-01-17 21:08:45 +01:00
{
"regular_tests" : [
{
"name" : "codeblock_hilite" ,
2014-03-06 00:05:49 +01:00
"input" : "Hamlet said:\n~~~~.python \ndef speak(self):\n x = 1\n~~~~" ,
2016-09-12 20:50:10 +02:00
"expected_output" : "<p>Hamlet said:</p>\n<div class=\"codehilite\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">speak</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n</pre></div>" ,
2014-01-17 21:08:45 +01:00
"bugdown_matches_marked" : false
} ,
{
"name" : "basic_paragraph" ,
"input" : "test_input" ,
"expected_output" : "<p>test_input</p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "codeblock_multiline" ,
"input" : "Hamlet once said\n~~~~\ndef func():\n x = 1\n\n y = 2\n\n z = 3\n~~~~\nAnd all was good." ,
2016-09-12 20:50:10 +02:00
"expected_output" : "<p>Hamlet once said</p>\n<div class=\"codehilite\"><pre><span></span>def func():\n x = 1\n\n y = 2\n\n z = 3\n</pre></div>\n\n\n<p>And all was good.</p>" ,
2014-01-21 20:46:43 +01:00
"bugdown_matches_marked" : true
2014-01-17 21:08:45 +01:00
} ,
2017-03-20 18:54:00 +01:00
{
"name" : "codeblock_trailing_whitespace" ,
"input" : "Hamlet once said\n~~~~\ndef func():\n x = 1\n\n y = 2\t\t\n\n z = 3 \n~~~~\nAnd all was good." ,
"expected_output" : "<p>Hamlet once said</p>\n<div class=\"codehilite\"><pre><span></span>def func():\n x = 1\n\n y = 2\n\n z = 3\n</pre></div>\n\n\n<p>And all was good.</p>" ,
"bugdown_matches_marked" : true
} ,
2014-01-17 21:08:45 +01:00
{
"name" : "codeblock_backticks" ,
"input" : "\n```\nfenced code\n```\n\n```inline code```\n" ,
2016-09-12 20:50:10 +02:00
"expected_output" : "<div class=\"codehilite\"><pre><span></span>fenced code\n</pre></div>\n\n\n<p><code>inline code</code></p>" ,
2014-01-21 20:46:43 +01:00
"bugdown_matches_marked" : true
2014-01-17 21:08:45 +01:00
} ,
{
"name" : "hanging_multi_codeblock" ,
"input" : "Hamlet said:\n~~~~\ndef speak(self):\n x = 1\n# Comment to make this code block longer to test Trac #1162\n~~~~\n\nThen he mentioned ````y = 4 + x**2```` and\n~~~~\ndef foobar(self):\n return self.baz()" ,
2016-09-12 20:50:10 +02:00
"expected_output" : "<p>Hamlet said:</p>\n<div class=\"codehilite\"><pre><span></span>def speak(self):\n x = 1\n# Comment to make this code block longer to test Trac #1162\n</pre></div>\n\n\n<p>Then he mentioned <code>y = 4 + x**2</code> and</p>\n<div class=\"codehilite\"><pre><span></span>def foobar(self):\n return self.baz()\n</pre></div>" ,
2014-01-27 23:21:48 +01:00
"bugdown_matches_marked" : true
2014-01-17 21:08:45 +01:00
} ,
{
"name" : "fenced_quote" ,
"input" : "Hamlet said:\n~~~ quote\nTo be or **not** to be.\n\nThat is the question\n~~~" ,
"expected_output" : "<p>Hamlet said:</p>\n<blockquote>\n<p>To be or <strong>not</strong> to be.</p>\n<p>That is the question</p>\n</blockquote>" ,
2014-01-27 23:21:48 +01:00
"bugdown_matches_marked" : true
2014-01-17 21:08:45 +01:00
} ,
{
"name" : "fenced_nested_quote" ,
"input" : "Hamlet said:\n~~~ quote\nPolonius said:\n> This above all: to thine ownself be true,\nAnd it must follow, as the night the day,\nThou canst not then be false to any man.\n\nWhat good advice!\n~~~" ,
"expected_output" : "<p>Hamlet said:</p>\n<blockquote>\n<p>Polonius said:</p>\n<blockquote>\n<p>This above all: to thine ownself be true,<br>\nAnd it must follow, as the night the day,<br>\nThou canst not then be false to any man.</p>\n</blockquote>\n<p>What good advice!</p>\n</blockquote>" ,
2014-01-27 23:21:48 +01:00
"bugdown_matches_marked" : true
2014-01-17 21:08:45 +01:00
} ,
{
"name" : "complexly_nested_quote" ,
2014-01-27 23:21:48 +01:00
"input" : "I heard about this second hand...\n~~~ quote\n\nHe said:\n~~~ quote\nThe customer is complaining.\n\nThey looked at this code:\n``` \ndef hello(): print 'hello\n```\nThey would prefer:\n~~~\ndef hello()\n puts 'hello'\nend\n~~~\n\nPlease advise.\n~~~\n\nShe said:\n~~~ quote\nJust send them this:\n```\necho \"hello\n\"\n```\n~~~" ,
2016-09-12 20:50:10 +02:00
"expected_output" : "<p>I heard about this second hand...</p>\n<blockquote>\n<p>He said:</p>\n<blockquote>\n<p>The customer is complaining.</p>\n<p>They looked at this code:</p>\n<div class=\"codehilite\"><pre><span></span>def hello(): print 'hello\n</pre></div>\n\n\n<p>They would prefer:</p>\n</blockquote>\n<p>def hello()<br>\n puts 'hello'<br>\nend</p>\n</blockquote>\n<p>Please advise.</p>\n<div class=\"codehilite\"><pre><span></span>She said:\n~~~ quote\nJust send them this:\n```\necho "hello\n"\n```\n</pre></div>" ,
2014-01-17 21:08:45 +01:00
"bugdown_matches_marked" : false
} ,
{
"name" : "dangerous_block" ,
"input" : "xxxxxx xxxxx xxxxxxxx xxxx. x xxxx xxxxxxxxxx:\n\n```\"xxxx xxxx\\xxxxx\\xxxxxx\"```\n\nxxx xxxx xxxxx:```xx.xxxxxxx(x'^xxxx$', xx.xxxxxxxxx)```\n\nxxxxxxx'x xxxx xxxxxxxxxx ```'xxxx'```, xxxxx xxxxxxxxx xxxxx ^ xxx $ xxxxxx xxxxx xxxxxxxxxxxx xxx xxxx xx x xxxx xx xxxx xx xxx xxxxx xxxxxx?" ,
"expected_output" : "<p>xxxxxx xxxxx xxxxxxxx xxxx. x xxxx xxxxxxxxxx:</p>\n<p><code>\"xxxx xxxx\\xxxxx\\xxxxxx\"</code></p>\n<p>xxx xxxx xxxxx:<code>xx.xxxxxxx(x'^xxxx$', xx.xxxxxxxxx)</code></p>\n<p>xxxxxxx'x xxxx xxxxxxxxxx <code>'xxxx'</code>, xxxxx xxxxxxxxx xxxxx ^ xxx $ xxxxxx xxxxx xxxxxxxxxxxx xxx xxxx xx x xxxx xx xxxx xx xxx xxxxx xxxxxx?</p>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "dangerous_block" ,
"input" : "``` one ```\n\n``` two ```\n\n~~~~\nx = 1" ,
2016-09-12 20:50:10 +02:00
"expected_output" : "<p><code>one</code></p>\n<p><code>two</code></p>\n<div class=\"codehilite\"><pre><span></span>x = 1\n</pre></div>" ,
2014-01-27 23:21:48 +01:00
"bugdown_matches_marked" : true
2014-01-17 21:08:45 +01:00
} ,
2017-03-26 21:14:05 +02:00
{
"name" : "four_space_code_block" ,
"input" : " def foo(): pass" ,
"expected_output" : "<div class=\"codehilite\"><pre><span></span>def foo(): pass\n</pre></div>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "two_space_not_code_block" ,
"input" : " notcode" ,
"expected_output" : "<p>notcode</p>" ,
"bugdown_matches_marked" : false
} ,
2014-01-17 21:08:45 +01:00
{
"name" : "ulist_standard" ,
"input" : "Some text with a list:\n\n* One item\n* Two items\n* Three items" ,
"expected_output" : "<p>Some text with a list:</p>\n<ul>\n<li>One item</li>\n<li>Two items</li>\n<li>Three items</li>\n</ul>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "ulist_hanging" ,
"input" : "Some text with a hanging list:\n* One item\n* Two items\n* Three items" ,
"expected_output" : "<p>Some text with a hanging list:</p>\n<ul>\n<li>One item</li>\n<li>Two items</li>\n<li>Three items</li>\n</ul>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "ulist_hanging_mixed" ,
"input" : "Plain list\n\n* Alpha\n\n* Beta\n\nThen hang it off:\n* Ypsilon\n* Zeta" ,
"expected_output" : "<p>Plain list</p>\n<ul>\n<li>\n<p>Alpha</p>\n</li>\n<li>\n<p>Beta</p>\n</li>\n</ul>\n<p>Then hang it off:</p>\n<ul>\n<li>Ypsilon</li>\n<li>Zeta</li>\n</ul>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "ulist_hanging_multi" ,
"input" : "Plain list\n* Alpha\n* Beta\n\nAnd Again:\n* A\n* B\n* C\n\nOnce more for feeling:\n* Q\n* E\n* D" ,
"expected_output" : "<p>Plain list</p>\n<ul>\n<li>Alpha</li>\n<li>Beta</li>\n</ul>\n<p>And Again:</p>\n<ul>\n<li>A</li>\n<li>B</li>\n<li>C</li>\n</ul>\n<p>Once more for feeling:</p>\n<ul>\n<li>Q</li>\n<li>E</li>\n<li>D</li>\n</ul>" ,
"bugdown_matches_marked" : true
} ,
2017-03-26 21:14:05 +02:00
{
"name" : "ulist_nested_ulist_two_space_indent" ,
"input" : "Nested list\n* I am outer list\n * I am inner nested list first item\n * I am inner nested list second item" ,
"expected_output" : "<p>Nested list</p>\n<ul>\n<li>I am outer list<ul>\n<li>I am inner nested list first item</li>\n<li>I am inner nested list second item</li>\n</ul>\n</li>\n</ul>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "ulist_list_two_space_indent" ,
"input" : "* I am outer list\n I am something inside" ,
"expected_output" : "<ul>\n<li>I am outer list<br>\n I am something inside</li>\n</ul>" ,
"bugdown_matches_marked" : false
} ,
2014-01-17 21:08:45 +01:00
{
"name" : "ulist_codeblock" ,
"input" : "~~~\nint x = 3\n* 4;\n~~~" ,
2016-09-12 20:50:10 +02:00
"expected_output" : "<div class=\"codehilite\"><pre><span></span>int x = 3\n* 4;\n</pre></div>" ,
2014-01-17 21:08:45 +01:00
"bugdown_matches_marked" : true
} ,
{
"name" : "malformed_fence" ,
"input" : "~~~~~~~~xxxxxxxxx: xxxxxxxxxxxx xxxxx x xxxxxxxx~~~~~~" ,
"expected_output" : "<p>~~~~~~~~xxxxxxxxx: xxxxxxxxxxxx xxxxx x xxxxxxxx~~~~~~</p>" ,
"bugdown_matches_marked" : true
} ,
2016-11-08 07:26:38 +01:00
{
"name" : "strikthrough_basic" ,
"input" : "I like ~~software~~ hardware" ,
"expected_output" : "<p>I like <del>software</del> hardware</p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "strikthrough_multiword" ,
"input" : "I ~~like software~~ love hardware" ,
"expected_output" : "<p>I <del>like software</del> love hardware</p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "strikthrough_multiword" ,
"input" : "I ~~ like software ~~ love hardware" ,
"expected_output" : "<p>I <del> like software </del> love hardware</p>" ,
"bugdown_matches_marked" : true
} ,
2014-01-17 21:08:45 +01:00
{
"name" : "underscore_disabled" ,
"input" : "_foo_" ,
"expected_output" : "<p>_foo_</p>" ,
"bugdown_matches_marked" : true
} ,
{
2016-11-03 07:56:28 +01:00
"name" : "emphasis_text" ,
2014-01-17 21:08:45 +01:00
"input" : "*foo*" ,
2016-11-03 07:56:28 +01:00
"expected_output" : "<p><em>foo</em></p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "emphasis_code" ,
"input" : "const char *x = (char *)y" ,
"expected_output" : "<p>const char *x = (char *)y</p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "emphasis_with_space" ,
"input" : "A *foo bar* is a *baz quux*" ,
"expected_output" : "<p>A <em>foo bar</em> is a <em>baz quux</em></p>" ,
2014-01-17 21:08:45 +01:00
"bugdown_matches_marked" : true
} ,
{
"name" : "underscore_strong_disabled" ,
"input" : "__foo__" ,
"expected_output" : "<p>__foo__</p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "star_strong" ,
"input" : "**foo**" ,
"expected_output" : "<p><strong>foo</strong></p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "linkify_interference" ,
"input" : "link: xx, x xxxxx xx xxxx xx\n\n[xxxxx #xx](http://xxxxxxxxx:xxxx/xxx/xxxxxx%xxxxxx/xx/):**xxxxxxx**\n\nxxxxxxx xxxxx xxxx xxxxx:\n`xxxxxx`: xxxxxxx\n`xxxxxx`: xxxxx\n`xxxxxx`: xxxxx xxxxx" ,
"expected_output" : "<p>link: xx, x xxxxx xx xxxx xx</p>\n<p><a href=\"http://xxxxxxxxx:xxxx/xxx/xxxxxx%xxxxxx/xx/\" target=\"_blank\" title=\"http://xxxxxxxxx:xxxx/xxx/xxxxxx%xxxxxx/xx/\">xxxxx #xx</a>:<strong>xxxxxxx</strong></p>\n<p>xxxxxxx xxxxx xxxx xxxxx:<br>\n<code>xxxxxx</code>: xxxxxxx<br>\n<code>xxxxxx</code>: xxxxx<br>\n<code>xxxxxx</code>: xxxxx xxxxx</p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "inline_image" ,
"input" : "Google logo today: https://www.google.com/images/srpr/logo4w.png\nKinda boring" ,
"expected_output" : "<p>Google logo today: <a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">https://www.google.com/images/srpr/logo4w.png</a><br>\nKinda boring</p>\n<div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img src=\"https://www.google.com/images/srpr/logo4w.png\"></a></div>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "two_inline_images" ,
"input" : "Google logo today: https://www.google.com/images/srpr/logo4w.png\nKinda boringGoogle logo today: https://www.google.com/images/srpr/logo4w.png\nKinda boring" ,
"expected_output" : "<p>Google logo today: <a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">https://www.google.com/images/srpr/logo4w.png</a><br>\nKinda boringGoogle logo today: <a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\">https://www.google.com/images/srpr/logo4w.png</a><br>\nKinda boring</p>\n<div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img src=\"https://www.google.com/images/srpr/logo4w.png\"></a></div><div class=\"message_inline_image\"><a href=\"https://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"https://www.google.com/images/srpr/logo4w.png\"><img src=\"https://www.google.com/images/srpr/logo4w.png\"></a></div>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "camo" ,
"input" : "Google logo today: http://www.google.com/images/srpr/logo4w.png" ,
2015-06-10 20:27:50 +02:00
"expected_output" : "<p>Google logo today: <a href=\"http://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"http://www.google.com/images/srpr/logo4w.png\">http://www.google.com/images/srpr/logo4w.png</a></p>\n<div class=\"message_inline_image\"><a href=\"http://www.google.com/images/srpr/logo4w.png\" target=\"_blank\" title=\"http://www.google.com/images/srpr/logo4w.png\"><img src=\"https://external-content.zulipcdn.net/7b6552b60c635e41e8f6daeb36d88afc4eabde79/687474703a2f2f7777772e676f6f676c652e636f6d2f696d616765732f737270722f6c6f676f34772e706e67\"></a></div>" ,
2014-01-17 21:08:45 +01:00
"bugdown_matches_marked" : false
} ,
{
"name" : "nl2br" ,
"input" : "test\nbar" ,
"expected_output" : "<p>test<br>\nbar</p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "nl2br_trailing_space" ,
"input" : "test " ,
"expected_output" : "<p>test </p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "tables" ,
"input" : "This is a table:\n\nFirst Header | Second Header\n------------- | -------------\nContent Cell | Content Cell\nContent Cell | Content Cell\n" ,
"expected_output" : "<p>This is a table:</p>\n<table>\n<thead>\n<tr>\n<th>First Header</th>\n<th>Second Header</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content Cell</td>\n<td>Content Cell</td>\n</tr>\n<tr>\n<td>Content Cell</td>\n<td>Content Cell</td>\n</tr>\n</tbody>\n</table>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "multiline_strong" ,
"input" : "You can check out **any time you'd like\nBut you can never leave**" ,
"expected_output" : "<p>You can check out **any time you'd like<br>\nBut you can never leave**</p>" ,
"bugdown_matches_marked" : false
2014-01-24 22:52:37 +01:00
} ,
{
"name" : "many_emoji" ,
"input" : "test :smile: again :poop:\n:) foo:)bar x::y::z :wasted waste: :fakeemojithisshouldnotrender:" ,
2017-02-04 23:27:24 +01:00
"expected_output" : "<p>test <img alt=\":smile:\" class=\"emoji\" src=\"/static/generated/emoji/images/emoji/unicode/1f604.png\" title=\":smile:\"> again <img alt=\":poop:\" class=\"emoji\" src=\"/static/generated/emoji/images/emoji/unicode/1f4a9.png\" title=\":poop:\"><br>\n:) foo:)bar x::y::z :wasted waste: :fakeemojithisshouldnotrender:</p>" ,
2014-01-24 22:52:37 +01:00
"bugdown_matches_marked" : true
} ,
{
"name" : "random_emoji_1" ,
2017-01-26 08:35:23 +01:00
"input" : ":airplane:" ,
2017-02-04 23:27:24 +01:00
"expected_output" : "<p><img alt=\":airplane:\" class=\"emoji\" src=\"/static/generated/emoji/images/emoji/unicode/2708.png\" title=\":airplane:\"></p>" ,
2014-01-24 22:52:37 +01:00
"bugdown_matches_marked" : true
} ,
2017-02-27 03:27:20 +01:00
{
"name" : "zulip_emoji" ,
"input" : ":zulip:" ,
"expected_output" : "<p><img alt=\":zulip:\" class=\"emoji\" src=\"/static/generated/emoji/images/emoji/unicode/zulip.png\" title=\":zulip:\"></p>" ,
"bugdown_matches_marked" : true
} ,
2014-01-24 22:52:37 +01:00
{
"name" : "random_emoji_2" ,
"input" : ":poop:" ,
2017-02-04 23:27:24 +01:00
"expected_output" : "<p><img alt=\":poop:\" class=\"emoji\" src=\"/static/generated/emoji/images/emoji/unicode/1f4a9.png\" title=\":poop:\"></p>" ,
2014-01-24 22:52:37 +01:00
"bugdown_matches_marked" : true
} ,
2016-11-08 12:20:56 +01:00
{
"name" : "emojis_without_space" ,
"input" : ":cat:hello:dog::rabbit:" ,
2017-02-04 23:27:24 +01:00
"expected_output" : "<p><img alt=\":cat:\" class=\"emoji\" src=\"/static/generated/emoji/images/emoji/unicode/1f408.png\" title=\":cat:\">hello<img alt=\":dog:\" class=\"emoji\" src=\"/static/generated/emoji/images/emoji/unicode/1f415.png\" title=\":dog:\"><img alt=\":rabbit:\" class=\"emoji\" src=\"/static/generated/emoji/images/emoji/unicode/1f407.png\" title=\":rabbit:\"></p>" ,
2016-11-08 12:20:56 +01:00
"bugdown_matches_marked" : true
} ,
{
"name" : "emojis_newline" ,
"input" : ":cat:\n:dog:" ,
2017-02-04 23:27:24 +01:00
"expected_output" : "<p><img alt=\":cat:\" class=\"emoji\" src=\"/static/generated/emoji/images/emoji/unicode/1f408.png\" title=\":cat:\"><br>\n<img alt=\":dog:\" class=\"emoji\" src=\"/static/generated/emoji/images/emoji/unicode/1f415.png\" title=\":dog:\"></p>" ,
2016-11-08 12:20:56 +01:00
"bugdown_matches_marked" : true
} ,
2014-01-24 22:52:37 +01:00
{
"name" : "not_emoji" ,
"input" : ":not_an_emoji:" ,
"expected_output" : "<p>:not_an_emoji:</p>" ,
"bugdown_matches_marked" : true
} ,
2016-06-24 22:39:44 +02:00
{
"name" : "unicode_emoji" ,
"input" : "\ud83d\udca9" ,
2017-06-20 15:52:14 +02:00
"expected_output" : "<p><img alt=\":poop:\" class=\"emoji\" src=\"\/static\/generated\/emoji\/images\/emoji\/unicode\/1f4a9.png\" title=\":poop:\"><\/p>" ,
2016-06-24 22:39:44 +02:00
"bugdown_matches_marked" : true
} ,
{
"name" : "two_unicode_emoji" ,
"input" : "\ud83d\udca9\ud83d\udca9" ,
2017-06-20 15:52:14 +02:00
"expected_output" : "<p><img alt=\":poop:\" class=\"emoji\" src=\"\/static\/generated\/emoji\/images\/emoji\/unicode\/1f4a9.png\" title=\":poop:\"><img alt=\":poop:\" class=\"emoji\" src=\"\/static\/generated\/emoji\/images\/emoji\/unicode\/1f4a9.png\" title=\":poop:\"><\/p>" ,
2016-06-24 22:39:44 +02:00
"bugdown_matches_marked" : true
} ,
{
"name" : "two_unicode_emoji_separated_by_text" ,
"input" : "\ud83d\udca9 word \ud83d\udca9" ,
2017-06-20 15:52:14 +02:00
"expected_output" : "<p><img alt=\":poop:\" class=\"emoji\" src=\"\/static\/generated\/emoji\/images\/emoji\/unicode\/1f4a9.png\" title=\":poop:\"> word <img alt=\":poop:\" class=\"emoji\" src=\"\/static\/generated\/emoji\/images\/emoji\/unicode\/1f4a9.png\" title=\":poop:\"><\/p>" ,
2016-06-24 22:39:44 +02:00
"bugdown_matches_marked" : true
} ,
2017-05-15 11:24:01 +02:00
{
"name" : "miscellaneous_symbols_and_pictographs" ,
"input" : "Merry Christmas!!\ud83c\udf84" ,
2017-06-20 15:52:14 +02:00
"expected_output" : "<p>Merry Christmas!!<img alt=\":christmas_tree:\" class=\"emoji\" src=\"\/static\/generated\/emoji\/images\/emoji\/unicode\/1f384.png\" title=\":christmas_tree:\"><\/p>" ,
2017-05-15 11:24:01 +02:00
"bugdown_matches_marked" : true
} ,
2016-11-12 23:37:47 +01:00
{
"name" : "miscellaneous_and_dingbats_emoji" ,
"input" : "\u2693\u2797" ,
2017-06-20 15:52:14 +02:00
"expected_output" : "<p><img alt=\":anchor:\" class=\"emoji\" src=\"\/static\/generated\/emoji\/images\/emoji\/unicode\/2693.png\" title=\":anchor:\"><img alt=\":heavy_division_sign:\" class=\"emoji\" src=\"\/static\/generated\/emoji\/images\/emoji\/unicode\/2797.png\" title=\":heavy_division_sign:\"><\/p>" ,
2016-11-12 23:37:47 +01:00
"bugdown_matches_marked" : true
} ,
2017-05-15 11:24:01 +02:00
{
"name" : "supplemental_symbols_and_pictographs" ,
"input" : "I am a robot \ud83e\udd16." ,
2017-06-20 15:52:14 +02:00
"expected_output" : "<p>I am a robot <img alt=\":robot_face:\" class=\"emoji\" src=\"\/static\/generated\/emoji\/images\/emoji\/unicode\/1f916.png\" title=\":robot_face:\">.<\/p>" ,
2017-05-15 11:24:01 +02:00
"bugdown_matches_marked" : true
} ,
{
"name" : "miscellaneous_symbols_and_arrows" ,
"input" : "Black upward arrow \u2b06" ,
2017-06-20 15:52:14 +02:00
"expected_output" : "<p>Black upward arrow <img alt=\":arrow_up:\" class=\"emoji\" src=\"\/static\/generated\/emoji\/images\/emoji\/unicode\/2b06.png\" title=\":arrow_up:\"><\/p>" ,
2017-05-15 11:24:01 +02:00
"bugdown_matches_marked" : true
} ,
2016-11-12 19:10:51 +01:00
{
"name" : "unicode_emoji_without_space" ,
"input" : "Extra\ud83d\udc7dTerrestrial" ,
2017-06-20 15:52:14 +02:00
"expected_output" : "<p>Extra<img alt=\":alien:\" class=\"emoji\" src=\"\/static\/generated\/emoji\/images\/emoji\/unicode\/1f47d.png\" title=\":alien:\">Terrestrial<\/p>" ,
2016-11-12 19:10:51 +01:00
"bugdown_matches_marked" : true
} ,
{
"name" : "unicode_emojis_new_line" ,
"input" : "\ud83d\udc7d\n\ud83d\udc7d" ,
2017-06-20 15:52:14 +02:00
"expected_output" : "<p><img alt=\":alien:\" class=\"emoji\" src=\"\/static\/generated\/emoji\/images\/emoji\/unicode\/1f47d.png\" title=\":alien:\"><br>\n<img alt=\":alien:\" class=\"emoji\" src=\"\/static\/generated\/emoji\/images\/emoji\/unicode\/1f47d.png\" title=\":alien:\"><\/p>" ,
2016-11-12 19:10:51 +01:00
"bugdown_matches_marked" : true
} ,
2014-01-24 22:52:37 +01:00
{
"name" : "emoji_alongside_punctuation" ,
"input" : ":smile:, :smile:; :smile:" ,
2017-02-04 23:27:24 +01:00
"expected_output" : "<p><img alt=\":smile:\" class=\"emoji\" src=\"/static/generated/emoji/images/emoji/unicode/1f604.png\" title=\":smile:\">, <img alt=\":smile:\" class=\"emoji\" src=\"/static/generated/emoji/images/emoji/unicode/1f604.png\" title=\":smile:\">; <img alt=\":smile:\" class=\"emoji\" src=\"/static/generated/emoji/images/emoji/unicode/1f604.png\" title=\":smile:\"></p>" ,
2014-01-24 22:52:37 +01:00
"bugdown_matches_marked" : true
2014-02-03 17:13:40 +01:00
} ,
{
"name" : "safe_html" ,
"input" : "<h1>stay normal</h1> thanks" ,
"expected_output" : "<p><h1>stay normal</h1> thanks</p>" ,
"bugdown_matches_marked" : true
} ,
2016-10-17 22:47:52 +02:00
{
"name" : "safe_html_with_simple_script_tag" ,
"input" : "<script>alert(1)</script>" ,
"expected_output" : "<p><script>alert(1)</script></p>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "safe_html_nested_script_tag" ,
"input" : "<<script>script>evil()<</script>/script>" ,
"expected_output" : "<p><<script>script>evil()<</script>/script></p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "safe_html_nested_script_tag_with_parse_error" ,
"input" : "<<x>script>evil()<</x>/script>" ,
"expected_output" : "<p><<x>script>evil()<</x>/script></p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "safe_html_messed_up_complexly_nested_script_tags" ,
"input" : "<scr<script></script>ipt type=\"text/javascript\">alert(\"foo\");</<script></script>script<del></del>>" ,
"expected_output" : "<p><scr<script></script>ipt type=\"text/javascript\">alert(\"foo\");</<script></script>script<del></del>></p>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "safe_html_unclosed_tag" ,
"input" : "<script src=http://xx.com/xss.js<b>" ,
"expected_output" : "<p><script src=http://xx.com/xss.js<b></p>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "safe_html_unclosed_tag_and_quotes" ,
"input" : "<script src=\"http://xx.com/xss.js\"<b>" ,
"expected_output" : "<p><script src=\"http://xx.com/xss.js\"<b></p>" ,
"bugdown_matches_marked" : false
} ,
2014-02-03 17:13:40 +01:00
{
"name" : "safe_html_in_code" ,
"input" : "~~~\n<h1>stay normal</h1>" ,
2016-09-12 20:50:10 +02:00
"expected_output" : "<div class=\"codehilite\"><pre><span></span><h1>stay normal</h1>\n</pre></div>" ,
2014-02-03 17:13:40 +01:00
"bugdown_matches_marked" : true
2014-02-05 16:57:23 +01:00
} ,
{
"name" : "ulist_with_inline_code" ,
"input" : "gonna take a break for a bit--all yours if you want to play around too. what I did:\n\n* install cmake\n* git clone zulip desktop\n* run `cmake-gui ..` in `c:\\zulip\\zulip-desktop\\msvcbuild`\n* hit configure/generate until it generated the msvc project (had to make a fix to some cmake files)\n* opened vs2013 \n* tried to build\n" ,
"expected_output" : "<p>gonna take a break for a bit--all yours if you want to play around too. what I did:</p>\n<ul>\n<li>install cmake</li>\n<li>git clone zulip desktop</li>\n<li>run <code>cmake-gui ..</code> in <code>c:\\zulip\\zulip-desktop\\msvcbuild</code></li>\n<li>hit configure/generate until it generated the msvc project (had to make a fix to some cmake files)</li>\n<li>opened vs2013 </li>\n<li>tried to build</li>\n</ul>" ,
"bugdown_matches_marked" : true
2016-08-17 03:09:32 +02:00
} ,
{
"name" : "modal_link" ,
"input" : "!modal_link(#settings, Settings page)" ,
2017-06-03 21:36:16 +02:00
"expected_output" : "<p><a href=\"#settings\" title=\"#settings\">Settings page</a></p>" ,
2016-08-17 03:09:32 +02:00
"bugdown_matches_marked" : false
} ,
{
"name" : "modal_link_escaped" ,
"input" : "`!modal_link(#settings, Settings page)`" ,
"expected_output" : "<p><code>!modal_link(#settings, Settings page)</code></p>" ,
"bugdown_matches_marked" : true
} ,
2016-08-18 23:48:02 +02:00
{
"name" : "avatar" ,
"input" : "!avatar(username@example.com)" ,
"expected_output" : "<p><img alt=\"username@example.com\" class=\"message_body_gravatar\" src=\"/avatar/username@example.com?s=30\" title=\"username@example.com\"></p>" ,
2016-10-19 16:49:53 +02:00
"bugdown_matches_marked" : true
2016-08-18 23:48:02 +02:00
} ,
{
"name" : "gravatar" ,
"input" : "!gravatar(username@example.com)" ,
"expected_output" : "<p><img alt=\"username@example.com\" class=\"message_body_gravatar\" src=\"/avatar/username@example.com?s=30\" title=\"username@example.com\"></p>" ,
2016-10-20 21:42:55 +02:00
"bugdown_matches_marked" : true
2016-08-18 23:48:02 +02:00
} ,
2016-08-17 03:09:32 +02:00
{
"name" : "avatar_escaped" ,
"input" : "`!avatar(username@example.com)`" ,
"expected_output" : "<p><code>!avatar(username@example.com)</code></p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "gravatar_escaped" ,
"input" : "`!gravatar(username@example.com)`" ,
"expected_output" : "<p><code>!gravatar(username@example.com)</code></p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "stream_subscribe_button" ,
"input" : "!_stream_subscribe_button(streamname)" ,
"expected_output" : "<p><span class=\"inline-subscribe\" data-stream-name=\"streamname\"><button class=\"inline-subscribe-button btn\">Subscribe to streamname</button><span class=\"inline-subscribe-error\"></span></span></p>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "stream_subscribe_button_escaped" ,
"input" : "`!_stream_subscribe_button(streamname)`" ,
"expected_output" : "<p><code>!_stream_subscribe_button(streamname)</code></p>" ,
"bugdown_matches_marked" : true
2017-03-20 16:56:39 +01:00
} ,
{
"name" : "tex_inline" ,
"input" : "$$1 \\oplus 0 = 1$$" ,
"expected_output" : "<p><span class=\"katex\"><span class=\"katex-mathml\"><math><semantics><mrow><mn>1</mn><mo>⊕</mo><mn>0</mn><mo>=</mo><mn>1</mn></mrow><annotation encoding=\"application/x-tex\">1 \\oplus 0 = 1</annotation></semantics></math></span><span aria-hidden=\"true\" class=\"katex-html\"><span class=\"strut\" style=\"height:0.64444em;\"></span><span class=\"strut bottom\" style=\"height:0.72777em;vertical-align:-0.08333em;\"></span><span class=\"base textstyle uncramped\"><span class=\"mord mathrm\">1</span><span class=\"mbin\">⊕</span><span class=\"mord mathrm\">0</span><span class=\"mrel\">=</span><span class=\"mord mathrm\">1</span></span></span></span></p>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "tex_complex" ,
"input" : "$$\\Phi_E = \\oint E \\cdot dA$$" ,
"expected_output" : "<p><span class=\"katex\"><span class=\"katex-mathml\"><math><semantics><mrow><msub><mi mathvariant=\"normal\">Φ</mi><mi>E</mi></msub><mo>=</mo><mo>∮</mo><mi>E</mi><mo>⋅</mo><mi>d</mi><mi>A</mi></mrow><annotation encoding=\"application/x-tex\">\\Phi_E = \\oint E \\cdot dA</annotation></semantics></math></span><span aria-hidden=\"true\" class=\"katex-html\"><span class=\"strut\" style=\"height:0.805em;\"></span><span class=\"strut bottom\" style=\"height:1.11112em;vertical-align:-0.30612em;\"></span><span class=\"base textstyle uncramped\"><span class=\"mord\"><span class=\"mord mathrm\">Φ</span><span class=\"msupsub\"><span class=\"vlist\"><span style=\"top:0.15em;margin-right:0.05em;margin-left:0em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span><span class=\"reset-textstyle scriptstyle cramped mtight\"><span class=\"mord mathit mtight\" style=\"margin-right:0.05764em;\">E</span></span></span><span class=\"baseline-fix\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span> </span></span></span></span><span class=\"mrel\">=</span><span class=\"mop op-symbol small-op\" style=\"margin-right:0.19445em;top:-0.0005599999999999772em;\">∮</span><span class=\"mord mathit\" style=\"margin-right:0.05764em;\">E</span><span class=\"mbin\">⋅</span><span class=\"mord mathit\">d</span><span class=\"mord mathit\">A</span></span></span></span></p>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "tex_escaped" ,
"input" : "`$$a$$`" ,
"expected_output" : "<p><code>$$a$$</code></p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "tex_fenced_math" ,
"input" : "```math\na^2 = b^2 + c^2\n```" ,
"expected_output" : "<p><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>=</mo><msup><mi>b</mi><mn>2</mn></msup><mo>+</mo><msup><mi>c</mi><mn>2</mn></msup></mrow><annotation encoding=\"application/x-tex\">a^2 = b^2 + c^2</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"strut\" style=\"height:0.8641079999999999em;\"></span><span class=\"strut bottom\" style=\"height:0.9474379999999999em;vertical-align:-0.08333em;\"></span><span class=\"base displaystyle textstyle uncramped\"><span class=\"mord\"><span class=\"mord mathit\">a</span><span class=\"msupsub\"><span class=\"vlist\"><span style=\"top:-0.413em;margin-right:0.05em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span><span class=\"reset-textstyle scriptstyle uncramped mtight\"><span class=\"mord mathrm mtight\">2</span></span></span><span class=\"baseline-fix\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span> </span></span></span></span><span class=\"mrel\">=</span><span class=\"mord\"><span class=\"mord mathit\">b</span><span class=\"msupsub\"><span class=\"vlist\"><span style=\"top:-0.413em;margin-right:0.05em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span><span class=\"reset-textstyle scriptstyle uncramped mtight\"><span class=\"mord mathrm mtight\">2</span></span></span><span class=\"baseline-fix\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span> </span></span></span></span><span class=\"mbin\">+</span><span class=\"mord\"><span class=\"mord mathit\">c</span><span class=\"msupsub\"><span class=\"vlist\"><span style=\"top:-0.413em;margin-right:0.05em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span><span class=\"reset-textstyle scriptstyle uncramped mtight\"><span class=\"mord mathrm mtight\">2</span></span></span><span class=\"baseline-fix\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span> </span></span></span></span></span></span></span></span></p>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "tex_fenced_tex" ,
"input" : "```tex\n\n\\pi \\textbf{ is not } 3.14\n```" ,
"expected_output" : "<p><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math><semantics><mrow><mi>π</mi><mtext><mtext> </mtext><mi mathvariant=\"normal\">i</mi><mi mathvariant=\"normal\">s</mi><mtext> </mtext><mi mathvariant=\"normal\">n</mi><mi mathvariant=\"normal\">o</mi><mi mathvariant=\"normal\">t</mi><mtext> </mtext></mtext><mn>3</mn><mi mathvariant=\"normal\">.</mi><mn>1</mn><mn>4</mn></mrow><annotation encoding=\"application/x-tex\">\n\\pi \\textbf{ is not } 3.14</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"strut\" style=\"height:0.69444em;\"></span><span class=\"strut bottom\" style=\"height:0.69444em;vertical-align:0em;\"></span><span class=\"base displaystyle textstyle uncramped\"><span class=\"mord mathit\" style=\"margin-right:0.03588em;\">π</span><span class=\"mord text displaystyle textstyle uncramped\"><span class=\"mord mathrm\"> </span><span class=\"mord mathbf\">is</span><span class=\"mord mathrm\"> </span><span class=\"mord mathbf\">not</span><span class=\"mord mathrm\"> </span></span><span class=\"mord mathrm\">3</span><span class=\"mord mathrm\">.</span><span class=\"mord mathrm\">1</span><span class=\"mord mathrm\">4</span></span></span></span></span></p>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "tex_fenced_latex" ,
"input" : "```latex\n\n\\frac{1}{\\sqrt{2}}\n\\begin{bmatrix}\n1 & 1 \\\\\n1 & -1\n\\end{bmatrix}\n```" ,
"expected_output" : "<p><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math><semantics><mrow><mfrac><mrow><mn>1</mn></mrow><mrow><msqrt><mrow><mn>2</mn></mrow></msqrt></mrow></mfrac><mrow><mo fence=\"true\">[</mo><mtable><mtr><mtd><mrow><mn>1</mn></mrow></mtd><mtd><mrow><mn>1</mn></mrow></mtd></mtr><mtr><mtd><mrow><mn>1</mn></mrow></mtd><mtd><mrow><mo>− </mo><mn>1</mn></mrow></mtd></mtr></mtable><mo fence=\"true\">]</mo></mrow></mrow><annotation encoding=\"application/x-tex\">\n\\frac{1}{\\sqrt{2}}\n\\begin{bmatrix}\n1 & 1 \\\\\n1 & -1\n\\end{bmatrix}</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"strut\" style=\"height:1.45em;\"></span><span class=\"strut bottom\" style=\"height:2.40003em;vertical-align:-0.95003em;\"></span><span class=\"base displaystyle textstyle uncramped\"><span class=\"mord reset-textstyle displaystyle textstyle uncramped\"><span class=\"mopen sizing reset-size5 size5 reset-textstyle textstyle uncramped nulldelimiter\"></span><span class=\"mfrac\"><span class=\"vlist\"><span style=\"top:0.7972200000000003em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:1em;\"> </span></span><span class=\"reset-textstyle textstyle cramped\"><span class=\"mord textstyle cramped\"><span class=\"mord sqrt\"><span class=\"sqrt-sign\" style=\"top:-0.06722000000000006em;\"><span class=\"style-wrap reset-textstyle textstyle uncramped\">√</span></span><span class=\"vlist\"><span style=\"top:0em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:1em;\"> </span></span><span class=\"mord textstyle cramped\"><span class=\"mord mathrm\">2</span></span></span><span style=\"top:-0.8272200000000001em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:1em;\"> </span></span><span class=\"reset-textstyle textstyle uncramped sqrt-line\"></span></span><span class=\"baseline-fix\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:1em;\"> </span></span> </span></span></span></span></span></span><span style=\"top:-0.22999999999999998em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:1em;\"> </span></span><span class=\"reset-textstyle textstyle uncramped frac-line\"></span></span><span style=\"top:-0.677em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:1em;\"> </span></span><span class=\"reset-textstyle textstyle uncramped\"><span class=\"mord textstyle uncramped\"><span class=\"mord mathrm\">1</span></span></span></span><span class=\"baseline-fix\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:1em;\"> </span></span> </span></span></span><span class=\"mclose sizing reset-size5 size5 reset-textstyle textstyle uncramped nulldelimiter\"></span></span><span class=\"minner displaystyle textstyle uncramped\"><span class=\"mopen style-wrap reset-textstyle textstyle uncramped\" style=\"top:0em;\"><span class=\"delimsizing size3\">[</span></span><span class=\"mord\"><span class=\"mtable\"><span class=\"col-align-c\"><span class=\"vlist\"><span style=\"top:-0.6099999999999999em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span><span class=\"mord displaystyle textstyle uncramped\"><span class=\"mord mathrm\">1</span></span></span><span style=\"top:0.5900000000000003em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span><span class=\"mord displaystyle textstyle uncramped\"><span class=\"mord mathrm\">1</span></span></span><span class=\"baseline-fix\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span> </span></span></span><span class=\"arraycolsep\" style=\"width:0.5em;\"></span><span class=\"arraycolsep\" style=\"width:0.5em;\"></span><span class=\"col-align-c\"><span class=\"vlist\"><span style=\"top:-0.6099999999999999em;\"><span class=\"fontsize-ensurer reset-size5 size5\" > < s p a n s t
"bugdown_matches_marked" : false
} ,
{
"name" : "tex_money" ,
"input" : "Tickets are $5 to $20 for youth, $10-$30 for adults, so we are hoping to bring in $500 from the event ($$x \\approx 500\\$$$)" ,
"expected_output" : "<p>Tickets are $5 to $20 for youth, $10-$30 for adults, so we are hoping to bring in $500 from the event (<span class=\"katex\"><span class=\"katex-mathml\"><math><semantics><mrow><mi>x</mi><mo>≈</mo><mn>5</mn><mn>0</mn><mn>0</mn><mi mathvariant=\"normal\">$</mi></mrow><annotation encoding=\"application/x-tex\">x \\approx 500\\$</annotation></semantics></math></span><span aria-hidden=\"true\" class=\"katex-html\"><span class=\"strut\" style=\"height:0.75em;\"></span><span class=\"strut bottom\" style=\"height:0.80556em;vertical-align:-0.05556em;\"></span><span class=\"base textstyle uncramped\"><span class=\"mord mathit\">x</span><span class=\"mrel\">≈</span><span class=\"mord mathrm\">5</span><span class=\"mord mathrm\">0</span><span class=\"mord mathrm\">0</span><span class=\"mord mathrm\">$</span></span></span></span>)</p>" ,
"bugdown_matches_marked" : false
} ,
{
"name" : "tex_dollar_smiley" ,
"input" : "$$_$$ is a fun money-related smiley!" ,
"expected_output" : "<p>$$_$$ is a fun money-related smiley!</p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "tex_multiple_dollars" ,
"input" : "We are going to make some $$$ or maybe even $$$$!" ,
"expected_output" : "<p>We are going to make some $$$ or maybe even $$$$!</p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "tex_non_matching_dollar_count" ,
"input" : "$foo is$$" ,
"expected_output" : "<p>$foo is$$</p>" ,
"bugdown_matches_marked" : true
} ,
{
"name" : "tex_safe_script_tag" ,
"input" : "$$<script type='text/javascript'>alert('xss');</script>$$\n\n~~~math\n<script type='text/javascript'>alert('xss');</script>\n~~~" ,
"expected_output" : "<p><span class=\"katex\"><span class=\"katex-mathml\"><math><semantics><mrow><mo><</mo><mi>s</mi><mi>c</mi><mi>r</mi><mi>i</mi><mi>p</mi><mi>t</mi><mi>t</mi><mi>y</mi><mi>p</mi><mi>e</mi><msup><mo>=</mo><mrow><mi mathvariant=\"normal\">′ </mi></mrow></msup><mi>t</mi><mi>e</mi><mi>x</mi><mi>t</mi><mi mathvariant=\"normal\">/</mi><mi>j</mi><mi>a</mi><mi>v</mi><mi>a</mi><mi>s</mi><mi>c</mi><mi>r</mi><mi>i</mi><mi>p</mi><msup><mi>t</mi><mrow><mi mathvariant=\"normal\">′ </mi></mrow></msup><mo>></mo><mi>a</mi><mi>l</mi><mi>e</mi><mi>r</mi><mi>t</mi><msup><mo>(</mo><mrow><mi mathvariant=\"normal\">′ </mi></mrow></msup><mi>x</mi><mi>s</mi><msup><mi>s</mi><mrow><mi mathvariant=\"normal\">′ </mi></mrow></msup><mo>)</mo><mo separator=\"true\">;</mo><mo><</mo><mi mathvariant=\"normal\">/</mi><mi>s</mi><mi>c</mi><mi>r</mi><mi>i</mi><mi>p</mi><mi>t</mi><mo>></mo></mrow><annotation encoding=\"application/x-tex\"><script type='text/javascript'>alert('xss');</script></annotation></semantics></math></span><span aria-hidden=\"true\" class=\"katex-html\"><span class=\"strut\" style=\"height:0.751892em;\"></span><span class=\"strut bottom\" style=\"height:1.001892em;vertical-align:-0.25em;\"></span><span class=\"base textstyle uncramped\"><span class=\"mrel\"><</span><span class=\"mord mathit\">s</span><span class=\"mord mathit\">c</span><span class=\"mord mathit\" style=\"margin-right:0.02778em;\">r</span><span class=\"mord mathit\">i</span><span class=\"mord mathit\">p</span><span class=\"mord mathit\">t</span><span class=\"mord mathit\">t</span><span class=\"mord mathit\" style=\"margin-right:0.03588em;\">y</span><span class=\"mord mathit\">p</span><span class=\"mord mathit\">e</span><span class=\"mrel\"><span class=\"mrel\">=</span><span class=\"msupsub\"><span class=\"vlist\"><span style=\"top:-0.363em;margin-right:0.05em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span><span class=\"reset-textstyle scriptstyle uncramped mtight\"><span class=\"mord scriptstyle uncramped mtight\"><span class=\"mord mathrm mtight\">′ </span></span></span></span><span class=\"baseline-fix\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span> </span></span></span></span><span class=\"mord mathit\">t</span><span class=\"mord mathit\">e</span><span class=\"mord mathit\">x</span><span class=\"mord mathit\">t</span><span class=\"mord mathrm\">/</span><span class=\"mord mathit\" style=\"margin-right:0.05724em;\">j</span><span class=\"mord mathit\">a</span><span class=\"mord mathit\" style=\"margin-right:0.03588em;\">v</span><span class=\"mord mathit\">a</span><span class=\"mord mathit\">s</span><span class=\"mord mathit\">c</span><span class=\"mord mathit\" style=\"margin-right:0.02778em;\">r</span><span class=\"mord mathit\">i</span><span class=\"mord mathit\">p</span><span class=\"mord\"><span class=\"mord mathit\">t</span><span class=\"msupsub\"><span class=\"vlist\"><span style=\"top:-0.363em;margin-right:0.05em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span><span class=\"reset-textstyle scriptstyle uncramped mtight\"><span class=\"mord scriptstyle uncramped mtight\"><span class=\"mord mathrm mtight\">′ </span></span></span></span><span class=\"baseline-fix\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span> </span></span></span></span><span class=\"mrel\">></span><span class=\"mord mathit\">a</span><span class=\"mord mathit\" style=\"margin-right:0.01968em;\">l</span><span class=\"mord mathit\">e</span><span class=\"mord mathit\" style=\"margin-right:0.02778em;\">r</span><span class=\"mord mathit\">t</span><span class=\"mopen\"><span class=\"mopen\">(</span><span class=\"msupsub\"><span class=\"vlist\"><span style=\"top:-0.363em;margin-right:0.05em;\"><span class=\"fontsize-ensurer reset-size5 size5\"><span style=\"font-size:0em;\"> </span></span><span class=\" r e s e t - t e x t s t y l e s c r i p t s t y l
"bugdown_matches_marked" : false
} ,
{
"name" : "tex_error_safe_script_tag" ,
"input" : "$$\\<script type='text/javascript'>alert('xss');</script>$$\n\n~~~math\n\\<script type='text/javascript'>alert('xss');</script>\n~~~" ,
"expected_output" : "<p><span class=\"tex-error\">$$\\<script type='text/javascript'>alert('xss');</script>$$</span></p>\n<p><span class=\"tex-error\">\\<script type='text/javascript'>alert('xss');</script></span></p>" ,
"bugdown_matches_marked" : false
2014-01-17 21:08:45 +01:00
}
] ,
"linkify_tests" : [
[
"http://www.google.com" ,
"<p>%s</p>" ,
"http://www.google.com"
] ,
[
"https://www.google.com" ,
"<p>%s</p>" ,
"https://www.google.com"
] ,
[
"http://www.theregister.co.uk/foo/bar" ,
"<p>%s</p>" ,
"http://www.theregister.co.uk/foo/bar"
] ,
[
" some text https://www.google.com/" ,
"<p>some text %s</p>" ,
"https://www.google.com/"
] ,
[
"with short example.com url" ,
"<p>with short %s url</p>" ,
"example.com"
] ,
[
"t.co" ,
"<p>%s</p>" ,
"t.co"
] ,
2016-12-30 03:15:48 +01:00
[
"readme.md" ,
"<p>readme.md</p>" ,
"readme.md"
] ,
2014-01-17 21:08:45 +01:00
[
"go to views.org please" ,
"<p>go to %s please</p>" ,
"views.org"
] ,
[
"http://foo.com/blah_blah/" ,
"<p>%s</p>" ,
"http://foo.com/blah_blah/"
] ,
[
"python class views.py is" ,
"<p>python class views.py is</p>" ,
""
] ,
[
"with www www.zulip.com/foo ok?" ,
"<p>with www %s ok?</p>" ,
"www.zulip.com/foo"
] ,
[
"allow questions like foo.com?" ,
"<p>allow questions like %s?</p>" ,
"foo.com"
] ,
[
"\"is.gd/foo/ \"" ,
"<p>\"%s \"</p>" ,
"is.gd/foo/"
] ,
[
"end of sentence https://t.co." ,
"<p>end of sentence %s.</p>" ,
"https://t.co"
] ,
[
"(Something like http://foo.com/blah_blah)" ,
"<p>(Something like %s)</p>" ,
"http://foo.com/blah_blah"
] ,
[
"\"is.gd/foo/\"" ,
"<p>\"%s\"</p>" ,
"is.gd/foo/"
] ,
[
"end with a quote www.google.com\"" ,
"<p>end with a quote %s\"</p>" ,
"www.google.com"
] ,
2014-03-05 21:17:48 +01:00
[
"end with an exclamation www.google.com!" ,
"<p>end with an exclamation %s!</p>" ,
"www.google.com"
] ,
2014-01-17 21:08:45 +01:00
[
"http://www.guardian.co.uk/foo/bar" ,
"<p>%s</p>" ,
"http://www.guardian.co.uk/foo/bar"
] ,
[
"from http://supervisord.org/running.html:" ,
"<p>from %s:</p>" ,
"http://supervisord.org/running.html"
] ,
[
"http://raven.io" ,
"<p>%s</p>" ,
"http://raven.io"
] ,
[
"at https://zulip.com/api. Check it!" ,
"<p>at %s. Check it!</p>" ,
"https://zulip.com/api"
] ,
[
"goo.gl/abc" ,
"<p>%s</p>" ,
"goo.gl/abc"
] ,
[
"I spent a year at ucl.ac.uk" ,
"<p>I spent a year at %s</p>" ,
"ucl.ac.uk"
] ,
[
"http://a.cc/i/FMXO" ,
"<p>%s</p>" ,
"http://a.cc/i/FMXO"
] ,
[
"http://fmota.eu/blog/test.html" ,
"<p>%s</p>" ,
"http://fmota.eu/blog/test.html"
] ,
[
"http://j.mp/14Hwm3X" ,
"<p>%s</p>" ,
"http://j.mp/14Hwm3X"
] ,
[
"http://localhost:9991/?show_debug=1" ,
"<p>%s</p>" ,
"http://localhost:9991/?show_debug=1"
] ,
[
"anyone before? (http://a.cc/i/FMXO)" ,
"<p>anyone before? (%s)</p>" ,
"http://a.cc/i/FMXO"
] ,
[
"(http://en.wikipedia.org/wiki/Each-way_(bet))" ,
"<p>(%s)</p>" ,
"http://en.wikipedia.org/wiki/Each-way_(bet)"
] ,
[
"(http://en.wikipedia.org/wiki/Each-way_(bet)_(more_parens))" ,
"<p>(%s)</p>" ,
"http://en.wikipedia.org/wiki/Each-way_(bet)_(more_parens)"
] ,
[
"http://en.wikipedia.org/wiki/Qt_(framework)" ,
"<p>%s</p>" ,
"http://en.wikipedia.org/wiki/Qt_(framework)"
] ,
[
"http://fr.wikipedia.org/wiki/Fichier:SMirC-facepalm.svg" ,
"<p>%s</p>" ,
"http://fr.wikipedia.org/wiki/Fichier:SMirC-facepalm.svg"
] ,
[
"https://en.wikipedia.org/wiki/File:Methamphetamine_from_ephedrine_with_HI_en.mov" ,
"<p>%s</p>" ,
"https://en.wikipedia.org/wiki/File:Methamphetamine_from_ephedrine_with_HI_en.mov"
] ,
[
"https://jira.atlassian.com/browse/JRA-31953?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel" ,
"<p>%s</p>" ,
"https://jira.atlassian.com/browse/JRA-31953?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel"
] ,
[
"http://web.archive.org/web/20120630032016/http://web.mit.edu/mitcard/idpolicies.html" ,
"<p>%s</p>" ,
"http://web.archive.org/web/20120630032016/http://web.mit.edu/mitcard/idpolicies.html"
] ,
[
"http://www.postgresql.org/message-id/14040.1364490185@sss.pgh.pa.us" ,
"<p>%s</p>" ,
"http://www.postgresql.org/message-id/14040.1364490185@sss.pgh.pa.us"
] ,
[
"javascript:alert(\"hi\");.com" ,
"<p>javascript:alert(\"hi\");.com</p>" ,
""
] ,
[
"javascript:foo.com" ,
"<p>javascript:%s</p>" ,
"foo.com"
] ,
[
"javascript://foo.com" ,
"<p>javascript://foo.com</p>" ,
""
] ,
[
"foobarscript://foo.com" ,
"<p>foobarscript://foo.com</p>" ,
""
] ,
[
"about:blank.com" ,
"<p>about:%s</p>" ,
"blank.com"
] ,
[
"[foo](javascript:foo.com)" ,
"<p>[foo](javascript:%s)</p>" ,
"foo.com"
] ,
[
"[foo](javascript://foo.com)" ,
"<p>[foo](javascript://foo.com)</p>" ,
""
] ,
[
"aim:addbuddy?screenname=foo" ,
"<p>aim:addbuddy?screenname=foo</p>" ,
""
] ,
[
"itms://itunes.com/apps/appname" ,
"<p>itms://itunes.com/apps/appname</p>" ,
""
] ,
[
"[foo](itms://itunes.com/apps/appname)" ,
"<p>[foo](itms://itunes.com/apps/appname)</p>" ,
""
] ,
[
"1 [](foo://) 3 [](foo://) 5" ,
"<p>1 [](foo://) 3 [](foo://) 5</p>" ,
""
] ,
[
"javascript:<i>\"foo&bar\"</i>" ,
"<p>javascript:<i>\"foo&bar\"</i></p>" ,
""
] ,
[
"[foo](javascript:<i>\"foo&bar\"</i>)" ,
"<p>[foo](javascript:<i>\"foo&bar\"</i>)</p>" ,
""
] ,
[
"a@b.com" ,
"<p>%s</p>" ,
"a@b.com"
] ,
[
"<a@b.com>" ,
"<p><%s></p>" ,
"a@b.com"
] ,
[
"a@b.com/foo" ,
"<p>a@b.com/foo</p>" ,
""
] ,
[
"http://leo@foo.com/my/file" ,
"<p>%s</p>" ,
"http://leo@foo.com/my/file"
] ,
[
"http://example.com/something?with,commas,in,url, but not at end" ,
"<p>%s, but not at end</p>" ,
"http://example.com/something?with,commas,in,url"
] ,
[
"http://www.yelp.com/biz/taim-mobile-falafel-and-smoothie-truck-new-york#query" ,
"<p>%s</p>" ,
"http://www.yelp.com/biz/taim-mobile-falafel-and-smoothie-truck-new-york#query"
] ,
[
" some text https://www.google.com/baz_(match)?with=foo&bar=baz with extras" ,
"<p>some text %s with extras</p>" ,
"https://www.google.com/baz_(match)?with=foo&bar=baz"
] ,
[
"hash it http://foo.com/blah_(wikipedia)_blah#cite-1" ,
"<p>hash it %s</p>" ,
"http://foo.com/blah_(wikipedia)_blah#cite-1"
] ,
[
"http://technet.microsoft.com/en-us/library/Cc751099.rk20_25_big(l=en-us).mov" ,
"<p>%s</p>" ,
"http://technet.microsoft.com/en-us/library/Cc751099.rk20_25_big(l=en-us).mov"
] ,
[
"https://metacpan.org/module/Image::Resize::OpenCV" ,
"<p>%s</p>" ,
"https://metacpan.org/module/Image::Resize::OpenCV"
] ,
[
"foo.com/a::trollface::b" ,
"<p>%s</p>" ,
"foo.com/a::trollface::b"
] ,
[
"a.commandstuff()" ,
"<p>a.commandstuff()</p>" ,
""
] ,
[
"love...it" ,
"<p>love...it</p>" ,
""
] ,
[
"sorry,http://example.com/" ,
"<p>sorry,%s</p>" ,
"http://example.com/"
2014-02-06 23:07:24 +01:00
] ,
[
"two nested parens https://zulip.com/(we_like_(to_nest_)_nest)_nest" ,
"<p>two nested parens %s</p>" ,
"https://zulip.com/(we_like_(to_nest_)_nest)_nest"
] ,
[
"three nested parens https://zulip.com/(we_like_(to_(and_)nest_)_nest)_nest" ,
"<p>three nested parens %s</p>" ,
"https://zulip.com/(we_like_(to_(and_)nest_)_nest)_nest"
] ,
[
"four nested parens https://zulip.com/(we_like_(to_n(e)st_)_n(es)t)_nest" ,
"<p>four nested parens %s</p>" ,
"https://zulip.com/(we_like_(to_n(e)st_)_n(es)t)_nest"
] ,
[
"six nested parens https://zulip.com/(we_like_((t(d(o(___)o)o))o_nest_)_nest)_nest" ,
"<p>six nested parens %s</p>" ,
"https://zulip.com/(we_like_((t(d(o(___)o)o))o_nest_)_nest)_nest"
] ,
[
"eight is too many https://zulip.com/(we_like_((t(d(o(_(1(2)1)__)o)o))o_nest_)_nest)_nest" ,
"<p>eight is too many https://zulip.com/(we_like_((t(d(o(_(1(2)1)__)o)o))o_nest_)_nest)_nest</p>" ,
""
] ,
[
"nested with autodetection zulip.us/(we_like_(to_n(e)st_)_n(es)t)_nest" ,
"<p>nested with autodetection %s</p>" ,
"zulip.us/(we_like_(to_n(e)st_)_n(es)t)_nest"
] ,
[
"quora http://generate.quora.net/render?width=700&from=-4hours&until=now&height=400&bgcolor=black&lineMode=connected&title=arb%20hint%20status&target=alias(ans.hintland.hand.arb.enhint_rate%2C%22enhint%20rate%22)&target=alias(ans.hintland.hand.arb.unhint_rate%2C%22unhint%20rate%22)&target=alias(ans.hintland.hand.arb.size%2C%22hint%20size%22)&target=alias(scale(ans.vagabond.dingarb_cube_count%2C10000)%2C%22cube%20count%20x%2010K%22)&target=alias(scale(hnumbers.time.ding.gegevens.query.count%2C10)%2C%22ding%20gegevens%20query%20count%20x%2010%22)&fgcolor=white&uniq=0.44046106841415167" ,
"<p>quora %s</p>" ,
"http://generate.quora.net/render?width=700&from=-4hours&until=now&height=400&bgcolor=black&lineMode=connected&title=arb%20hint%20status&target=alias(ans.hintland.hand.arb.enhint_rate%2C%22enhint%20rate%22)&target=alias(ans.hintland.hand.arb.unhint_rate%2C%22unhint%20rate%22)&target=alias(ans.hintland.hand.arb.size%2C%22hint%20size%22)&target=alias(scale(ans.vagabond.dingarb_cube_count%2C10000)%2C%22cube%20count%20x%2010K%22)&target=alias(scale(hnumbers.time.ding.gegevens.query.count%2C10)%2C%22ding%20gegevens%20query%20count%20x%2010%22)&fgcolor=white&uniq=0.44046106841415167"
2014-01-17 21:08:45 +01:00
]
]
2014-03-06 00:05:49 +01:00
}