-
Notifications
You must be signed in to change notification settings - Fork 6
/
conformance.js
1 lines (1 loc) · 64.5 KB
/
conformance.js
1
var cases = {};cases.autolink = {"usernames":[{"description":"Autolink trailing username","text":"text @username","expected":"text <a title=\"Search @username\" class=\"app-tag-link\" href=\"#flowser/all/@username\">@username</a>"},{"description":"Autolink username at the beginning","text":"@username text","expected":"<a title=\"Search @username\" class=\"app-tag-link\" href=\"#flowser/all/@username\">@username</a> text"},{"description":"DO NOT Autolink username preceded by a letter","text":"meet@the beach","expected":"meet@the beach"},{"description":"Autolink username preceded by punctuation","text":"great.@username","expected":"great.<a title=\"Search @username\" class=\"app-tag-link\" href=\"#flowser/all/@username\">@username</a>"},{"description":"Autolink username followed by punctuation","text":"@username&^$%^","expected":"<a title=\"Search @username\" class=\"app-tag-link\" href=\"#flowser/all/@username\">@username</a>&^$%^"},{"description":"Autolink username followed by accented latin characters","text":"@aliceìnheiro something something","expected":"<a title=\"Search @aliceìnheiro\" class=\"app-tag-link\" href=\"#flowser/all/@aliceìnheiro\">@aliceìnheiro</a> something something"},{"description":"Autolink usernames over 20 characters","text":"@username9012345678901","expected":"<a title=\"Search @username9012345678901\" class=\"app-tag-link\" href=\"#flowser/all/@username9012345678901\">@username9012345678901</a>"},{"description":"Autolink two usernames","text":"@foo @bar","expected":"<a title=\"Search @foo\" class=\"app-tag-link\" href=\"#flowser/all/@foo\">@foo</a> <a title=\"Search @bar\" class=\"app-tag-link\" href=\"#flowser/all/@bar\">@bar</a>"},{"description":"Autolink usernames followed by :","text":"@foo: @bar","expected":"<a title=\"Search @foo\" class=\"app-tag-link\" href=\"#flowser/all/@foo\">@foo</a>: <a title=\"Search @bar\" class=\"app-tag-link\" href=\"#flowser/all/@bar\">@bar</a>"},{"description":"Autolink usernames that are followed by international characters","text":"@foo îs in the house","expected":"<a title=\"Search @foo\" class=\"app-tag-link\" href=\"#flowser/all/@foo\">@foo</a> îs in the house"}],"hashtags":[{"description":"Autolink trailing hashtag","text":"text #hashtag","expected":"text <a href=\"#flowser/all/hashtag\" title=\"#hashtag\" class=\"app-tag-link\">#hashtag</a>"},{"description":"Autolink alphanumeric hashtag (letter-number-letter)","text":"text #hash0tag","expected":"text <a href=\"#flowser/all/hash0tag\" title=\"#hash0tag\" class=\"app-tag-link\">#hash0tag</a>"},{"description":"Autolink alphanumeric hashtag (number-letter)","text":"text #1tag","expected":"text <a href=\"#flowser/all/1tag\" title=\"#1tag\" class=\"app-tag-link\">#1tag</a>"},{"description":"Autolink hashtag with underscore","text":"text #hash_tag","expected":"text <a href=\"#flowser/all/hash_tag\" title=\"#hash_tag\" class=\"app-tag-link\">#hash_tag</a>"},{"description":"DO NOT Autolink all-numeric hashtags","text":"text #1234","expected":"text <a href=\"#flowser/all/1234\" title=\"#1234\" class=\"app-tag-link\">#1234</a>"},{"description":"DO NOT Autolink hashtag preceded by a letter","text":"text#hashtag","expected":"text#hashtag"},{"description":"Autolink multiple hashtags","text":"text #hashtag1 #hashtag2","expected":"text <a href=\"#flowser/all/hashtag1\" title=\"#hashtag1\" class=\"app-tag-link\">#hashtag1</a> <a href=\"#flowser/all/hashtag2\" title=\"#hashtag2\" class=\"app-tag-link\">#hashtag2</a>"},{"description":"Autolink hashtag preceded by a period","text":"text.#hashtag","expected":"text.<a href=\"#flowser/all/hashtag\" title=\"#hashtag\" class=\"app-tag-link\">#hashtag</a>"},{"description":"DO NOT Autolink hashtag preceded by &","text":"&#nbsp;","expected":"&#nbsp;"},{"description":"Autolink hashtag followed by ! (! not included)","text":"text #hashtag!","expected":"text <a href=\"#flowser/all/hashtag\" title=\"#hashtag\" class=\"app-tag-link\">#hashtag</a>!"},{"description":"Autolink hashtag followed by Japanese","text":"text #hashtagの","expected":"text <a href=\"#flowser/all/hashtagの\" title=\"#hashtagの\" class=\"app-tag-link\">#hashtagの</a>"},{"description":"Autolink hashtag preceded by full-width space (U+3000)","text":"text #hashtag","expected":"text <a href=\"#flowser/all/hashtag\" title=\"#hashtag\" class=\"app-tag-link\">#hashtag</a>"},{"description":"Autolink hashtag followed by full-width space (U+3000)","text":"#hashtag text","expected":"<a href=\"#flowser/all/hashtag\" title=\"#hashtag\" class=\"app-tag-link\">#hashtag</a> text"},{"description":"Autolink hashtag with full-width hash (U+FF03)","text":"#hashtag","expected":"<a href=\"#flowser/all/hashtag\" title=\"#hashtag\" class=\"app-tag-link\">#hashtag</a>"},{"description":"Autolink hashtag with accented character at the start","text":"#éhashtag","expected":"<a href=\"#flowser/all/éhashtag\" title=\"#éhashtag\" class=\"app-tag-link\">#éhashtag</a>"},{"description":"Autolink hashtag with accented character at the end","text":"#hashtagé","expected":"<a href=\"#flowser/all/hashtagé\" title=\"#hashtagé\" class=\"app-tag-link\">#hashtagé</a>"},{"description":"Autolink hashtag with accented character in the middle","text":"#hashétag","expected":"<a href=\"#flowser/all/hashétag\" title=\"#hashétag\" class=\"app-tag-link\">#hashétag</a>"},{"description":"Autolink hashtags in Korean","text":"What is #트위터 anyway?","expected":"What is <a href=\"#flowser/all/트위터\" title=\"#트위터\" class=\"app-tag-link\">#트위터</a> anyway?"},{"description":"Autolink hashtags in Russian","text":"What is #ашок anyway?","expected":"What is <a href=\"#flowser/all/ашок\" title=\"#ашок\" class=\"app-tag-link\">#ашок</a> anyway?"},{"description":"Autolink a katakana hashtag preceded by a space and followed by a space","text":"カタカナ #カタカナ カタカナ","expected":"カタカナ <a href=\"#flowser/all/カタカナ\" title=\"#カタカナ\" class=\"app-tag-link\">#カタカナ</a> カタカナ"},{"description":"Autolink a katakana hashtag preceded by a space and followed by a bracket","text":"カタカナ #カタカナ」カタカナ","expected":"カタカナ <a href=\"#flowser/all/カタカナ\" title=\"#カタカナ\" class=\"app-tag-link\">#カタカナ</a>」カタカナ"},{"description":"Autolink a katakana hashtag preceded by a space and followed by a edge","text":"カタカナ #カタカナ","expected":"カタカナ <a href=\"#flowser/all/カタカナ\" title=\"#カタカナ\" class=\"app-tag-link\">#カタカナ</a>"},{"description":"Autolink a katakana hashtag preceded by a bracket and followed by a space","text":"カタカナ「#カタカナ カタカナ","expected":"カタカナ「<a href=\"#flowser/all/カタカナ\" title=\"#カタカナ\" class=\"app-tag-link\">#カタカナ</a> カタカナ"},{"description":"Autolink a katakana hashtag preceded by a bracket and followed by a bracket","text":"カタカナ「#カタカナ」カタカナ","expected":"カタカナ「<a href=\"#flowser/all/カタカナ\" title=\"#カタカナ\" class=\"app-tag-link\">#カタカナ</a>」カタカナ"},{"description":"Autolink a katakana hashtag preceded by a bracket and followed by a edge","text":"カタカナ「#カタカナ","expected":"カタカナ「<a href=\"#flowser/all/カタカナ\" title=\"#カタカナ\" class=\"app-tag-link\">#カタカナ</a>"},{"description":"Autolink a katakana hashtag preceded by a edge and followed by a space","text":"#カタカナ カタカナ","expected":"<a href=\"#flowser/all/カタカナ\" title=\"#カタカナ\" class=\"app-tag-link\">#カタカナ</a> カタカナ"},{"description":"Autolink a katakana hashtag preceded by a edge and followed by a bracket","text":"#カタカナ」カタカナ","expected":"<a href=\"#flowser/all/カタカナ\" title=\"#カタカナ\" class=\"app-tag-link\">#カタカナ</a>」カタカナ"},{"description":"Autolink a katakana hashtag preceded by a edge and followed by a edge","text":"#カタカナ","expected":"<a href=\"#flowser/all/カタカナ\" title=\"#カタカナ\" class=\"app-tag-link\">#カタカナ</a>"},{"description":"Autolink a katakana hashtag with a voiced sounds mark followed by a space","text":"#ハッシュタグ テスト","expected":"<a href=\"#flowser/all/ハッシュタグ\" title=\"#ハッシュタグ\" class=\"app-tag-link\">#ハッシュタグ</a> テスト"},{"description":"Autolink a katakana hashtag with a voiced sounds mark followed by numbers","text":"#ハッシュタグ123","expected":"<a href=\"#flowser/all/ハッシュタグ123\" title=\"#ハッシュタグ123\" class=\"app-tag-link\">#ハッシュタグ123</a>"},{"description":"Autolink a katakana hashtag with another voiced sounds mark","text":"#パピプペポ","expected":"<a href=\"#flowser/all/パピプペポ\" title=\"#パピプペポ\" class=\"app-tag-link\">#パピプペポ</a>"},{"description":"Autolink a kanji hashtag preceded by a space and followed by a space","text":"漢字 #漢字 漢字","expected":"漢字 <a href=\"#flowser/all/漢字\" title=\"#漢字\" class=\"app-tag-link\">#漢字</a> 漢字"},{"description":"Autolink a kanji hashtag preceded by a space and followed by a bracket","text":"漢字 #漢字」漢字","expected":"漢字 <a href=\"#flowser/all/漢字\" title=\"#漢字\" class=\"app-tag-link\">#漢字</a>」漢字"},{"description":"Autolink a kanji hashtag preceded by a space and followed by a edge","text":"漢字 #漢字","expected":"漢字 <a href=\"#flowser/all/漢字\" title=\"#漢字\" class=\"app-tag-link\">#漢字</a>"},{"description":"Autolink a kanji hashtag preceded by a bracket and followed by a space","text":"漢字「#漢字 漢字","expected":"漢字「<a href=\"#flowser/all/漢字\" title=\"#漢字\" class=\"app-tag-link\">#漢字</a> 漢字"},{"description":"Autolink a kanji hashtag preceded by a bracket and followed by a bracket","text":"漢字「#漢字」漢字","expected":"漢字「<a href=\"#flowser/all/漢字\" title=\"#漢字\" class=\"app-tag-link\">#漢字</a>」漢字"},{"description":"Autolink a kanji hashtag preceded by a bracket and followed by a edge","text":"漢字「#漢字","expected":"漢字「<a href=\"#flowser/all/漢字\" title=\"#漢字\" class=\"app-tag-link\">#漢字</a>"},{"description":"Autolink a kanji hashtag preceded by a edge and followed by a space","text":"#漢字 漢字","expected":"<a href=\"#flowser/all/漢字\" title=\"#漢字\" class=\"app-tag-link\">#漢字</a> 漢字"},{"description":"Autolink a kanji hashtag preceded by a edge and followed by a bracket","text":"#漢字」漢字","expected":"<a href=\"#flowser/all/漢字\" title=\"#漢字\" class=\"app-tag-link\">#漢字</a>」漢字"},{"description":"Autolink a kanji hashtag preceded by a edge and followed by a edge","text":"#漢字","expected":"<a href=\"#flowser/all/漢字\" title=\"#漢字\" class=\"app-tag-link\">#漢字</a>"},{"description":"Autolink a kanji hashtag preceded by an ideographic comma, followed by an ideographic period","text":"これは、#大丈夫。","expected":"これは、<a href=\"#flowser/all/大丈夫\" title=\"#大丈夫\" class=\"app-tag-link\">#大丈夫</a>。"},{"description":"Autolink a hiragana hashtag preceded by a space and followed by a space","text":"ひらがな #ひらがな ひらがな","expected":"ひらがな <a href=\"#flowser/all/ひらがな\" title=\"#ひらがな\" class=\"app-tag-link\">#ひらがな</a> ひらがな"},{"description":"Autolink a hiragana hashtag preceded by a space and followed by a bracket","text":"ひらがな #ひらがな」ひらがな","expected":"ひらがな <a href=\"#flowser/all/ひらがな\" title=\"#ひらがな\" class=\"app-tag-link\">#ひらがな</a>」ひらがな"},{"description":"Autolink a hiragana hashtag preceded by a space and followed by a edge","text":"ひらがな #ひらがな","expected":"ひらがな <a href=\"#flowser/all/ひらがな\" title=\"#ひらがな\" class=\"app-tag-link\">#ひらがな</a>"},{"description":"Autolink a hiragana hashtag preceded by a bracket and followed by a space","text":"ひらがな「#ひらがな ひらがな","expected":"ひらがな「<a href=\"#flowser/all/ひらがな\" title=\"#ひらがな\" class=\"app-tag-link\">#ひらがな</a> ひらがな"},{"description":"Autolink a hiragana hashtag preceded by a bracket and followed by a bracket","text":"ひらがな「#ひらがな」ひらがな","expected":"ひらがな「<a href=\"#flowser/all/ひらがな\" title=\"#ひらがな\" class=\"app-tag-link\">#ひらがな</a>」ひらがな"},{"description":"Autolink a hiragana hashtag preceded by a bracket and followed by a edge","text":"ひらがな「#ひらがな","expected":"ひらがな「<a href=\"#flowser/all/ひらがな\" title=\"#ひらがな\" class=\"app-tag-link\">#ひらがな</a>"},{"description":"Autolink a hiragana hashtag preceded by a edge and followed by a space","text":"#ひらがな ひらがな","expected":"<a href=\"#flowser/all/ひらがな\" title=\"#ひらがな\" class=\"app-tag-link\">#ひらがな</a> ひらがな"},{"description":"Autolink a hiragana hashtag preceded by a edge and followed by a bracket","text":"#ひらがな」ひらがな","expected":"<a href=\"#flowser/all/ひらがな\" title=\"#ひらがな\" class=\"app-tag-link\">#ひらがな</a>」ひらがな"},{"description":"Autolink a hiragana hashtag preceded by a edge and followed by a edge","text":"#ひらがな","expected":"<a href=\"#flowser/all/ひらがな\" title=\"#ひらがな\" class=\"app-tag-link\">#ひらがな</a>"},{"description":"Autolink a Kanji/Katakana mix hashtag","text":"日本語ハッシュタグ #日本語ハッシュタグ","expected":"日本語ハッシュタグ <a href=\"#flowser/all/日本語ハッシュタグ\" title=\"#日本語ハッシュタグ\" class=\"app-tag-link\">#日本語ハッシュタグ</a>"},{"description":"DO NOT autolink a hashtag without a preceding space","text":"日本語ハッシュタグ#日本語ハッシュタグ","expected":"日本語ハッシュタグ#日本語ハッシュタグ"},{"description":"DO NOT include a punctuation in a hashtag","text":"#日本語ハッシュタグ。","expected":"<a href=\"#flowser/all/日本語ハッシュタグ\" title=\"#日本語ハッシュタグ\" class=\"app-tag-link\">#日本語ハッシュタグ</a>。"},{"description":"Autolink a hashtag after a punctuation","text":"日本語ハッシュタグ。#日本語ハッシュタグ","expected":"日本語ハッシュタグ。<a href=\"#flowser/all/日本語ハッシュタグ\" title=\"#日本語ハッシュタグ\" class=\"app-tag-link\">#日本語ハッシュタグ</a>"},{"description":"Autolink a hashtag with chouon","text":"長音ハッシュタグ。#サッカー","expected":"長音ハッシュタグ。<a href=\"#flowser/all/サッカー\" title=\"#サッカー\" class=\"app-tag-link\">#サッカー</a>"},{"description":"Autolink a hashtag with half-width chouon","text":"長音ハッシュタグ。#サッカー","expected":"長音ハッシュタグ。<a href=\"#flowser/all/サッカー\" title=\"#サッカー\" class=\"app-tag-link\">#サッカー</a>"},{"description":"Autolink a hashtag with half-width # after full-width !","text":"できましたよー!#日本語ハッシュタグ。","expected":"できましたよー!<a href=\"#flowser/all/日本語ハッシュタグ\" title=\"#日本語ハッシュタグ\" class=\"app-tag-link\">#日本語ハッシュタグ</a>。"},{"description":"Autolink a hashtag with full-width # after full-width !","text":"できましたよー!#日本語ハッシュタグ。","expected":"できましたよー!<a href=\"#flowser/all/日本語ハッシュタグ\" title=\"#日本語ハッシュタグ\" class=\"app-tag-link\">#日本語ハッシュタグ</a>。"},{"description":"Autolink a hashtag containing ideographic iteration mark","text":"#云々","expected":"<a href=\"#flowser/all/云々\" title=\"#云々\" class=\"app-tag-link\">#云々</a>"},{"description":"Autolink multiple hashtags in multiple languages","text":"Hashtags in #中文, #日本語, #한국말, and #русский! Try it out!","expected":"Hashtags in <a href=\"#flowser/all/中文\" title=\"#中文\" class=\"app-tag-link\">#中文</a>, <a href=\"#flowser/all/日本語\" title=\"#日本語\" class=\"app-tag-link\">#日本語</a>, <a href=\"#flowser/all/한국말\" title=\"#한국말\" class=\"app-tag-link\">#한국말</a>, and <a href=\"#flowser/all/русский\" title=\"#русский\" class=\"app-tag-link\">#русский</a>! Try it out!"},{"description":"Autolink should allow for ş (U+015F) in a hashtag","text":"Here’s a test tweet for you: #Ateş #qrşt #ştu #ş","expected":"Here’s a test tweet for you: <a href=\"#flowser/all/Ateş\" title=\"#Ateş\" class=\"app-tag-link\">#Ateş</a> <a href=\"#flowser/all/qrşt\" title=\"#qrşt\" class=\"app-tag-link\">#qrşt</a> <a href=\"#flowser/all/ştu\" title=\"#ştu\" class=\"app-tag-link\">#ştu</a> <a href=\"#flowser/all/ş\" title=\"#ş\" class=\"app-tag-link\">#ş</a>"}],"urls":[{"description":"Autolink URL with pipe character","text":"text http://example.com/pipe|character?yes|pipe|character","expected":"text <a href=\"http://example.com/pipe|character?yes|pipe|character\">http://example.com/pipe|character?yes|pipe|character</a>"},{"description":"Autolink trailing url","text":"text http://example.com","expected":"text <a href=\"http://example.com\">http://example.com</a>"},{"description":"Autolink url in mid-text","text":"text http://example.com more text","expected":"text <a href=\"http://example.com\">http://example.com</a> more text"},{"description":"Autolink url in Japanese text","text":"いまなにしてるhttp://example.comいまなにしてる","expected":"いまなにしてる<a href=\"http://example.com\">http://example.com</a>いまなにしてる"},{"description":"Autolink url surrounded by parentheses does not capture them","text":"text (http://example.com)","expected":"text (<a href=\"http://example.com\">http://example.com</a>)"},{"description":"Autolink url with path surrounded by parentheses does not capture them","text":"text (http://example.com/test)","expected":"text (<a href=\"http://example.com/test\">http://example.com/test</a>)"},{"description":"Autolink url with embedded parentheses","text":"text http://msdn.com/S(deadbeef)/page.htm","expected":"text <a href=\"http://msdn.com/S(deadbeef)/page.htm\">http://msdn.com/S(deadbeef)/page.htm</a>"},{"description":"Extract valid URL: http://msdn.microsoft.com/ja-jp/library/system.net.httpwebrequest(v=VS.100).aspx","text":"text http://msdn.microsoft.com/ja-jp/library/system.net.httpwebrequest(v=VS.100).aspx","expected":"text <a href=\"http://msdn.microsoft.com/ja-jp/library/system.net.httpwebrequest(v=VS.100).aspx\">http://msdn.microsoft.com/ja-jp/library/system.net.httpwebrequest(v=VS.100).aspx</a>"},{"description":"Autolink url with balanced parens hiding XSS","text":"text http://foo.com/(\"onclick=\"alert(1)\")","expected":"text <a href=\"http://foo.com/\">http://foo.com/</a>(\"onclick=\"alert(1)\")"},{"description":"Autolink url should NOT capture unbalanced parens","text":"Parenthetically bad http://example.com/i_has_a_) thing","expected":"Parenthetically bad <a href=\"http://example.com/i_has_a_\">http://example.com/i_has_a_</a>) thing"},{"description":"Autolink url containing unicode characters","text":"I enjoy Macintosh Brand computers: http://✪df.ws/ejp","expected":"I enjoy Macintosh Brand computers: <a href=\"http://✪df.ws/ejp\">http://✪df.ws/ejp</a>"},{"description":"Autolink url with .co. under TLD","text":"test http://www.example.co.jp","expected":"test <a href=\"http://www.example.co.jp\">http://www.example.co.jp</a>"},{"description":"DO NOT Autolink url containing ! character in the domain","text":"badly formatted http://foo!bar.com","expected":"badly formatted http://foo!bar.com"},{"description":"DO NOT Autolink url containing _ character in the domain","text":"badly formatted http://foo_bar.com","expected":"badly formatted http://foo_bar.com"},{"description":"Autolink url preceded by :","text":"text:http://example.com","expected":"text:<a href=\"http://example.com\">http://example.com</a>"},{"description":"Autolink url followed by ? (without it)","text":"text http://example.com?","expected":"text <a href=\"http://example.com\">http://example.com</a>?"},{"description":"Autolink url followed by ! (without it)","text":"text http://example.com!","expected":"text <a href=\"http://example.com\">http://example.com</a>!"},{"description":"Autolink url followed by , (without it)","text":"text http://example.com,","expected":"text <a href=\"http://example.com\">http://example.com</a>,"},{"description":"Autolink url with path followed by a comma (wihout the comma)","text":"In http://example.com/test, Douglas explains 42.","expected":"In <a href=\"http://example.com/test\">http://example.com/test</a>, Douglas explains 42."},{"description":"Autolink url followed by . (without it)","text":"text http://example.com.","expected":"text <a href=\"http://example.com\">http://example.com</a>."},{"description":"Autolink url followed by : (without it)","text":"text http://example.com:","expected":"text <a href=\"http://example.com\">http://example.com</a>:"},{"description":"Autolink url followed by ; (without it)","text":"text http://example.com;","expected":"text <a href=\"http://example.com\">http://example.com</a>;"},{"description":"Autolink url followed by ] (without it)","text":"text http://example.com]","expected":"text <a href=\"http://example.com\">http://example.com</a>]"},{"description":"Autolink url followed by ) (without it)","text":"text http://example.com)","expected":"text <a href=\"http://example.com\">http://example.com</a>)"},{"description":"Autolink url followed by } (without it)","text":"text http://example.com}","expected":"text <a href=\"http://example.com\">http://example.com</a>}"},{"description":"Autolink url followed by = (without it)","text":"text http://example.com=","expected":"text <a href=\"http://example.com\">http://example.com</a>="},{"description":"Autolink url followed by ' (without it)","text":"text http://example.com'","expected":"text <a href=\"http://example.com\">http://example.com</a>'"},{"description":"DO NOT Autolink url preceded by /","text":"text /http://example.com","expected":"text /http://example.com"},{"description":"DO NOT Autolink url preceded by !","text":"text !http://example.com","expected":"text !http://example.com"},{"description":"DO NOT Autolink url preceded by =","text":"text =http://example.com","expected":"text =http://example.com"},{"description":"DO NOT Autolink url preceded by @","text":"@http://example.com","expected":"@http://example.com"},{"description":"DO NOT Autolink domain in email address","text":"foo@bar.com","expected":"foo@bar.com"},{"description":"Autolink url embedded in link tag","text":"<link rel='true'>http://example.com</link>","expected":"<link rel='true'><a href=\"http://example.com\">http://example.com</a></link>"},{"description":"Autolink multiple urls","text":"http://example.com https://sslexample.com http://sub.example.com","expected":"<a href=\"http://example.com\">http://example.com</a> <a href=\"https://sslexample.com\">https://sslexample.com</a> <a href=\"http://sub.example.com\">http://sub.example.com</a>"},{"description":"Autolink url with long TLD","text":"http://example.mobi/path","expected":"<a href=\"http://example.mobi/path\">http://example.mobi/path</a>"},{"description":"Autolink url containing ending with #value (not as url + hashtag)","text":"http://foo.com/?#foo","expected":"<a href=\"http://foo.com/?#foo\">http://foo.com/?#foo</a>"},{"description":"DO NOT Autolink url without protocol (with www)","text":"www.example.biz","expected":"www.example.biz"},{"description":"DO NOT Autolink url without protocol (with WWW)","text":"WWW.EXAMPLE.BIZ","expected":"WWW.EXAMPLE.BIZ"},{"description":"DO NOT Autolink URL without protocol and without www (ending in .com)","text":"foo.com","expected":"foo.com"},{"description":"DO NOT Autolink URL without protocol and without www (ending in .org)","text":"foo.org","expected":"foo.org"},{"description":"DO NOT Autolink URL without protocol and without www (ending in .net)","text":"foo.net","expected":"foo.net"},{"description":"DO NOT Autolink URL without protocol and without www (ending in .gov)","text":"foo.gov","expected":"foo.gov"},{"description":"DO NOT Autolink URL without protocol and without www (ending in .edu)","text":"foo.edu","expected":"foo.edu"},{"description":"Autolink URL without protocol and without www not ending in /.(edu|com|gov|org|net)/","text":"foo.it twitter.co.jp foo.commerce foo.nettastic foo.us foo.co.uk","expected":"foo.it twitter.co.jp foo.commerce foo.nettastic foo.us foo.co.uk"},{"description":"Multiple URLs with different protocols but not without a protocol","text":"http://foo.com AND https://bar.com AND www.foobar.com","expected":"<a href=\"http://foo.com\">http://foo.com</a> AND <a href=\"https://bar.com\">https://bar.com</a> AND www.foobar.com"},{"description":"Autolink raw domain followed by domain only links the first","text":"See http://example.com example.com","expected":"See <a href=\"http://example.com\">http://example.com</a> example.com"},{"description":"Autolink url that includes @-sign and numeric dir under it","text":"http://www.flickr.com/photos/29674651@N00/4382024406","expected":"<a href=\"http://www.flickr.com/photos/29674651@N00/4382024406\">http://www.flickr.com/photos/29674651@N00/4382024406</a>"},{"description":"Autolink url that includes @-sign and non-numeric dir under it","text":"http://www.flickr.com/photos/29674651@N00/foobar","expected":"<a href=\"http://www.flickr.com/photos/29674651@N00/foobar\">http://www.flickr.com/photos/29674651@N00/foobar</a>"},{"description":"Autolink URL with only a domain followed by a period doesn't swallow the period.","text":"I think it's proper to end sentences with a period http://tell.me.com. Even when they contain a URL.","expected":"I think it's proper to end sentences with a period <a href=\"http://tell.me.com\">http://tell.me.com</a>. Even when they contain a URL."},{"description":"Autolink URL with a path followed by a period doesn't swallow the period.","text":"I think it's proper to end sentences with a period http://tell.me/why. Even when they contain a URL.","expected":"I think it's proper to end sentences with a period <a href=\"http://tell.me/why\">http://tell.me/why</a>. Even when they contain a URL."},{"description":"Autolink URL with a query followed by a period doesn't swallow the period.","text":"I think it's proper to end sentences with a period http://tell.me/why?=because.i.want.it. Even when they contain a URL.","expected":"I think it's proper to end sentences with a period <a href=\"http://tell.me/why?=because.i.want.it\">http://tell.me/why?=because.i.want.it</a>. Even when they contain a URL."},{"description":"Autolink URL with a hyphen in the domain name","text":"Czech out sweet deals at http://mrs.domain-dash.biz ok?","expected":"Czech out sweet deals at <a href=\"http://mrs.domain-dash.biz\">http://mrs.domain-dash.biz</a> ok?"},{"description":"Autolink an IDN (punycode) domain and TLD","text":"See also: http://xn--80abe5aohbnkjb.xn--p1ai/","expected":"See also: <a href=\"http://xn--80abe5aohbnkjb.xn--p1ai/\">http://xn--80abe5aohbnkjb.xn--p1ai/</a>"},{"description":"Autolink URL should NOT autolink www...foo","text":"Is www...foo a valid URL?","expected":"Is www...foo a valid URL?"},{"description":"Autolink URL should NOT autolink www.-foo.com","text":"Is www.-foo.com a valid URL?","expected":"Is www.-foo.com a valid URL?"},{"description":"Autolink URL should NOT autolink a domain with a valid dash but no protocol","text":"Is www.foo-bar.com a valid URL?","expected":"Is www.foo-bar.com a valid URL?"},{"description":"Autolink URL should autolink a domain with a valid dash and a protocol","text":"Is http://www.foo-bar.com a valid URL?","expected":"Is <a href=\"http://www.foo-bar.com\">http://www.foo-bar.com</a> a valid URL?"},{"description":"Autolink URL should link search urls (with &lang=, not ⟨)","text":"Check out http://search.twitter.com/#!/search?q=avro&lang=en","expected":"Check out <a href=\"http://search.twitter.com/#!/search?q=avro&lang=en\">http://search.twitter.com/#!/search?q=avro&lang=en</a>"},{"description":"Autolink URL should link urls with very long paths","text":"Check out http://example.com/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","expected":"Check out <a href=\"http://example.com/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\">http://example.com/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</a>"},{"description":"Autolink URL should HTML escape the URL","text":"example: https://twitter.com/otm_m@\"onmousedown=\"alert('foo')\" style=background-color:yellow;color:yellow;\"/","expected":"example: <a href=\"https://twitter.com/otm_m\">https://twitter.com/otm_m</a>@\"onmousedown=\"alert('foo')\" style=background-color:yellow;color:yellow;\"/"},{"description":"Autolink URL should autolink a URL with a - or + at the end of the path","text":"Go to http://example.com/a+ or http://example.com/a-","expected":"Go to <a href=\"http://example.com/a+\">http://example.com/a+</a> or <a href=\"http://example.com/a-\">http://example.com/a-</a>"},{"description":"Autolink URL should autolink a URL with a - or + at the end of the path and query parameters","text":"Go to http://example.com/a+?this=that or http://example.com/a-?this=that","expected":"Go to <a href=\"http://example.com/a+?this=that\">http://example.com/a+?this=that</a> or <a href=\"http://example.com/a-?this=that\">http://example.com/a-?this=that</a>"},{"description":"Autolink URL should autolink URLs with longer paths ending in -","text":"Go to http://example.com/view/slug-url-?foo=bar","expected":"Go to <a href=\"http://example.com/view/slug-url-?foo=bar\">http://example.com/view/slug-url-?foo=bar</a>"},{"description":"Autolink URL should NOT link URLs with domains beginning in a space","text":"@user Try http:// example.com/path","expected":"@user Try http:// example.com/path"},{"description":"Autolink URL should NOT link URLs with domains beginning in a non-breaking space (U+00A0)","text":"@user Try http:// example.com/path","expected":"@user Try http:// example.com/path"},{"description":"Autolink URL should link paths containing accented characters","text":"See: http://example.com/café","expected":"See: <a href=\"http://example.com/café\">http://example.com/café</a>"},{"description":"Autolink URL should not link URL without protocol","text":"See: www.twitter.com or twitter.com/twitter","expected":"See: www.twitter.com or twitter.com/twitter"},{"description":"Autolink t.co URL followed by punctuation","text":"See: http://t.co/abcde's page","expected":"See: <a href=\"http://t.co/abcde\">http://t.co/abcde</a>'s page"},{"description":"DO NOT autolink URL if preceded by $","text":"$https://twitter.com $twitter.com $http://t.co/abcde $t.co/abcde $t.co $TVI.CA $RBS.CA","expected":"$https://twitter.com $twitter.com $http://t.co/abcde $t.co/abcde $t.co $TVI.CA $RBS.CA"}],"all":[{"description":"Autolink all does not break on URL with @","text":"http://www.flickr.com/photos/29674651@N00/4382024406 if you know what's good for you.","expected":"<a href=\"http://www.flickr.com/photos/29674651@N00/4382024406\">http://www.flickr.com/photos/29674651@N00/4382024406</a> if you know what's good for you."},{"description":"Autolink all does not allow & without ?","text":"Check out: http://example.com/test&@chasesechrist","expected":"Check out: <a href=\"http://example.com/test\">http://example.com/test</a>&@chasesechrist"},{"description":"Correctly handles URL follower directly by @user","text":"See: http://example.com/@user","expected":"See: <a href=\"http://example.com/\">http://example.com/</a><a title=\"Search @user\" class=\"app-tag-link\" href=\"#flowser/all/@user\">@user</a>"},{"description":"Correctly handles URL with an @user followed by trailing /","text":"See: http://example.com/@user/","expected":"See: <a href=\"http://example.com/@user/\">http://example.com/@user/</a>"},{"description":"Does not allow an XSS after an @","text":"See: http://x.xx.com/@\"style=\"color:pink\"onmouseover=alert(1)//","expected":"See: <a href=\"http://x.xx.com/\">http://x.xx.com/</a>@\"style=\"color:pink\"onmouseover=alert(1)//"},{"description":"DO NOT autolink URLs if preceded by # or @","text":"#https://twitter.com @https://twitter.com","expected":"#https://twitter.com @https://twitter.com"}]};cases.extract = {"mentions":[{"description":"Extract mention at the begining of a tweet","text":"@username reply","expected":["@username"]},{"description":"Extract mention at the end of a tweet","text":"mention @username","expected":["@username"]},{"description":"Extract mention in the middle of a tweet","text":"mention @username in the middle","expected":["@username"]},{"description":"Extract mention of username with underscore","text":"mention @user_name","expected":["@user_name"]},{"description":"Extract mention of username with a dash","text":"mention @user-name","expected":["@user-name"]},{"description":"Extract mention of all numeric username","text":"mention @12345","expected":["@12345"]},{"description":"Extract mention or multiple usernames","text":"mention @username1 @username2","expected":["@username1","@username2"]},{"description":"Extract username followed by accented latin characters","text":"@aliceìnheiro something something","expected":["@aliceìnheiro"]},{"description":"DO NOT extract 'http' in '@http://' as username","text":"@http://twitter.com","expected":[]},{"description":"Extract mentions before newline","text":"@username\n@mention","expected":["@username","@mention"]}],"mentions_with_predefined_usertags":[{"description":"Include only predefined users","text":"@username @foo","expected":["@username"]}],"mentions_with_indices":[{"description":"Extract a mention at the start","text":"@username yo!","expected":[{"tag":"@username","indices":[0,9]}]},{"description":"Extract a mention that has the same thing mentioned at the start","text":"username @username","expected":[{"tag":"@username","indices":[9,18]}]}],"mentions_with_indices_with_predefined_usertags":[{"description":"Include only predefined users","text":"@username @foobar yo!","expected":[{"tag":"@username","indices":[0,9]}]}],"urls":[{"description":"Extract a lone URL","text":"http://example.com","expected":["http://example.com"]},{"description":"Extract valid URL: http://google.com","text":"text http://google.com","expected":["http://google.com"]},{"description":"Extract valid URL: http://foobar.com/#","text":"text http://foobar.com/#","expected":["http://foobar.com/#"]},{"description":"Extract valid URL: http://google.com/#foo","text":"text http://google.com/#foo","expected":["http://google.com/#foo"]},{"description":"Extract valid URL: http://google.com/#search?q=iphone%20-filter%3Alinks","text":"text http://google.com/#search?q=iphone%20-filter%3Alinks","expected":["http://google.com/#search?q=iphone%20-filter%3Alinks"]},{"description":"Extract valid URL: http://twitter.com/#search?q=iphone%20-filter%3Alinks","text":"text http://twitter.com/#search?q=iphone%20-filter%3Alinks","expected":["http://twitter.com/#search?q=iphone%20-filter%3Alinks"]},{"description":"Extract valid URL: http://somedomain.com/index.php?path=/abc/def/","text":"text http://somedomain.com/index.php?path=/abc/def/","expected":["http://somedomain.com/index.php?path=/abc/def/"]},{"description":"Extract valid URL: http://www.boingboing.net/2007/02/14/katamari_damacy_phon.html","text":"text http://www.boingboing.net/2007/02/14/katamari_damacy_phon.html","expected":["http://www.boingboing.net/2007/02/14/katamari_damacy_phon.html"]},{"description":"Extract valid URL: http://somehost.com:3000","text":"text http://somehost.com:3000","expected":["http://somehost.com:3000"]},{"description":"Extract valid URL: http://xo.com/~matthew+%ff-x","text":"text http://xo.com/~matthew+%ff-x","expected":["http://xo.com/~matthew+%ff-x"]},{"description":"Extract valid URL: http://xo.com/~matthew+%ff-,.;x","text":"text http://xo.com/~matthew+%ff-,.;x","expected":["http://xo.com/~matthew+%ff-,.;x"]},{"description":"Extract valid URL: http://xo.com/,.;x","text":"text http://xo.com/,.;x","expected":["http://xo.com/,.;x"]},{"description":"Extract valid URL: http://en.wikipedia.org/wiki/Primer_(film)","text":"text http://en.wikipedia.org/wiki/Primer_(film)","expected":["http://en.wikipedia.org/wiki/Primer_(film)"]},{"description":"Extract valid URL: http://www.ams.org/bookstore-getitem/item=mbk-59","text":"text http://www.ams.org/bookstore-getitem/item=mbk-59","expected":["http://www.ams.org/bookstore-getitem/item=mbk-59"]},{"description":"Extract valid URL: http://✪df.ws/ejp","text":"text http://✪df.ws/ejp","expected":["http://✪df.ws/ejp"]},{"description":"Extract valid URL: http://chilp.it/?77e8fd","text":"text http://chilp.it/?77e8fd","expected":["http://chilp.it/?77e8fd"]},{"description":"Extract valid URL: http://x.com/oneletterdomain","text":"text http://x.com/oneletterdomain","expected":["http://x.com/oneletterdomain"]},{"description":"Extract valid URL: http://msdn.microsoft.com/ja-jp/library/system.net.httpwebrequest(v=VS.100).aspx","text":"text http://msdn.microsoft.com/ja-jp/library/system.net.httpwebrequest(v=VS.100).aspx","expected":["http://msdn.microsoft.com/ja-jp/library/system.net.httpwebrequest(v=VS.100).aspx"]},{"description":"DO NOT extract invalid URL: http://domain-begin_dash_2314352345_dfasd.foo-cow_4352.com","text":"text http://domain-dash_2314352345_dfasd.foo-cow_4352.com","expected":[]},{"description":"DO NOT extract invalid URL: http://-begin_dash_2314352345_dfasd.foo-cow_4352.com","text":"text http://-dash_2314352345_dfasd.foo-cow_4352.com","expected":[]},{"description":"DO NOT extract invalid URL: http://no-tld","text":"text http://no-tld","expected":[]},{"description":"DO NOT extract invalid URL: http://tld-too-short.x","text":"text http://tld-too-short.x","expected":[]},{"description":"Extract a very long hyphenated sub-domain URL (single letter hyphens)","text":"text http://word-and-a-number-8-ftw.domain.com/","expected":["http://word-and-a-number-8-ftw.domain.com/"]},{"description":"Extract a hyphenated TLD (usually a typo)","text":"text http://domain.com-that-you-should-have-put-a-space-after","expected":["http://domain.com"]},{"description":"Extract URL ending with # value","text":"text http://foo.com?#foo text","expected":["http://foo.com?#foo"]},{"description":"Extract URLs without protocol on (com|org|edu|gov|net) domains","text":"foo.com foo.net foo.org foo.edu foo.gov","expected":["foo.com","foo.net","foo.org","foo.edu","foo.gov"]},{"description":"Extract URLs without protocol not on (com|org|edu|gov|net) domains","text":"foo.bar foo.co.jp www.foo.bar www.foo.co.uk wwwww.foo foo.comm foo.somecom foo.govedu foo.jp","expected":["foo.co.jp","www.foo.co.uk"]},{"description":"Extract URLs without protocol on ccTLD with slash","text":"t.co/abcde bit.ly/abcde","expected":["t.co/abcde","bit.ly/abcde"]},{"description":"Extract URLs with protocol on ccTLD domains","text":"http://foo.jp http://fooooo.jp","expected":["http://foo.jp","http://fooooo.jp"]},{"description":"Extract URLs with a - or + at the end of the path","text":"Go to http://example.com/a+ or http://example.com/a-","expected":["http://example.com/a+","http://example.com/a-"]},{"description":"Extract URLs with longer paths ending in -","text":"Go to http://example.com/view/slug-url-?foo=bar","expected":["http://example.com/view/slug-url-?foo=bar"]},{"description":"Extract URLs beginning with a space","text":"@user Try http:// example.com/path","expected":["example.com/path"]},{"description":"Extract long URL without protocol surrounded by CJK characters","text":"これは日本語です。example.com/path/index.html中国語example.com/path한국","expected":["example.com/path/index.html","example.com/path"]},{"description":"Extract short URL without protocol surrounded by CJK characters","text":"twitter.comこれは日本語です。example.com中国語t.co/abcde한국twitter.com example2.comテストtwitter.com/abcde","expected":["twitter.com","example.com","t.co/abcde","twitter.com","example2.com","twitter.com/abcde"]},{"description":"Extract URLs with and without protocol surrounded by CJK characters","text":"http://twitter.com/これは日本語です。example.com中国語http://t.co/abcde한국twitter.comテストexample2.comテストhttp://twitter.com/abcde","expected":["http://twitter.com/","example.com","http://t.co/abcde","twitter.com","example2.com","http://twitter.com/abcde"]},{"description":"DO NOT extract short URLs without protocol on ccTLD domains without path","text":"twitter.jp日本語t.co中国語foo.jp t.co foo.jp","expected":[]},{"description":"Extract URLs beginning with a non-breaking space (U+00A0)","text":"@user Try http:// example.com/path","expected":["example.com/path"]},{"description":"Extract URLs with underscores and dashes in the subdomain","text":"test http://sub_domain-dash.twitter.com","expected":["http://sub_domain-dash.twitter.com"]},{"description":"Extract URL with minimum number of valid characters","text":"test http://a.b.cd","expected":["http://a.b.cd"]},{"description":"Extract URLs containing underscores and dashes","text":"test http://a_b.c-d.com","expected":["http://a_b.c-d.com"]},{"description":"Extract URLs containing dashes in the subdomain","text":"test http://a-b.c.com","expected":["http://a-b.c.com"]},{"description":"Extract URLs with dashes in the domain name","text":"test http://twitter-dash.com","expected":["http://twitter-dash.com"]},{"description":"Extract URLs with lots of symbols then a period","text":"http://www.bestbuy.com/site/Currie+Technologies+-+Ezip+400+Scooter/9885188.p?id=1218189013070&skuId=9885188","expected":["http://www.bestbuy.com/site/Currie+Technologies+-+Ezip+400+Scooter/9885188.p?id=1218189013070&skuId=9885188"]},{"description":"DO NOT extract URLs containing leading dashes in the subdomain","text":"test http://-leadingdash.twitter.com","expected":[]},{"description":"DO NOT extract URLs containing trailing dashes in the subdomain","text":"test http://trailingdash-.twitter.com","expected":[]},{"description":"DO NOT extract URLs containing leading underscores in the subdomain","text":"test http://_leadingunderscore.twitter.com","expected":[]},{"description":"DO NOT extract URLs containing trailing underscores in the subdomain","text":"test http://trailingunderscore_.twitter.com","expected":[]},{"description":"DO NOT extract URLs containing leading dashes in the domain name","text":"test http://-twitter.com","expected":[]},{"description":"DO NOT extract URLs containing trailing dashes in the domain name","text":"test http://twitter-.com","expected":[]},{"description":"DO NOT extract URLs containing underscores in the domain name","text":"test http://twitter_underscore.com","expected":[]},{"description":"DO NOT extract URLs containing underscores in the tld","text":"test http://twitter.c_o_m","expected":[]},{"description":"Extract valid URL http://www.foo.com/foo/path-with-period./","text":"test http://www.foo.com/foo/path-with-period./","expected":["http://www.foo.com/foo/path-with-period./"]},{"description":"Extract valid URL http://www.foo.org.za/foo/bar/688.1","text":"test http://www.foo.org.za/foo/bar/688.1","expected":["http://www.foo.org.za/foo/bar/688.1"]},{"description":"Extract valid URL http://www.foo.com/bar-path/some.stm?param1=foo;param2=P1|0||P2|0","text":"test http://www.foo.com/bar-path/some.stm?param1=foo;param2=P1|0||P2|0","expected":["http://www.foo.com/bar-path/some.stm?param1=foo;param2=P1|0||P2|0"]},{"description":"Extract valid URL http://foo.com/bar/123/foo_&_bar/","text":"test http://foo.com/bar/123/foo_&_bar/","expected":["http://foo.com/bar/123/foo_&_bar/"]},{"description":"Extract valid URL http://www.cp.sc.edu/events/65","text":"test http://www.cp.sc.edu/events/65 test","expected":["http://www.cp.sc.edu/events/65"]},{"description":"Extract valid URL http://www.andersondaradio.no.comunidades.net/","text":"http://www.andersondaradio.no.comunidades.net/ test test","expected":["http://www.andersondaradio.no.comunidades.net/"]},{"description":"Extract valid URL ELPAÍS.com","text":"test ELPAÍS.com","expected":["ELPAÍS.com"]},{"description":"DO NOT include period at the end of URL","text":"test http://twitter.com/.","expected":["http://twitter.com/"]},{"description":"Extract a URL with '?' in fragment","text":"http://tn.com.ar/show/00056158/la-estrella-del-certamen-el-turno-de-pamela-anderson?fb_xd_fragment#?=&cb=fe17523f223b7&relation=parent.parent&transport=fragment&type=resize&height=20&ackdata","expected":["http://tn.com.ar/show/00056158/la-estrella-del-certamen-el-turno-de-pamela-anderson?fb_xd_fragment#?=&cb=fe17523f223b7&relation=parent.parent&transport=fragment&type=resize&height=20&ackdata"]},{"description":"Extract a URL with '?' in fragment in a text","text":"text http://tn.com.ar/show/00056158/la-estrella-del-certamen-el-turno-de-pamela-anderson?fb_xd_fragment#?=&cb=fe17523f223b7&relation=parent.parent&transport=fragment&type=resize&height=20&ackdata text","expected":["http://tn.com.ar/show/00056158/la-estrella-del-certamen-el-turno-de-pamela-anderson?fb_xd_fragment#?=&cb=fe17523f223b7&relation=parent.parent&transport=fragment&type=resize&height=20&ackdata"]},{"description":"Extract a URL with a ton of trailing periods","text":"Test a ton of periods http://example.com/path..........................................","expected":["http://example.com/path"]},{"description":"Extract a URL with a ton of trailing commas","text":"Test a ton of periods http://example.com/,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,","expected":["http://example.com/"]},{"description":"Extract a URL with a ton of trailing '!'","text":"Test a ton of periods http://example.com/path/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!","expected":["http://example.com/path/"]},{"description":"DO NOT extract URLs in hashtag or @mention","text":"#test.com @test.com #http://test.com @http://test.com #t.co/abcde @t.co/abcde","expected":[]},{"description":"Extract a t.co URL with a trailing apostrophe","text":"I really like http://t.co/pbY2NfTZ's website","expected":["http://t.co/pbY2NfTZ"]},{"description":"Extract a t.co URL with a trailing hyphen","text":"Check this site out http://t.co/FNkPfmii- it's great","expected":["http://t.co/FNkPfmii"]},{"description":"Extract a t.co URL with a trailing colon","text":"According to http://t.co/ulYGBYSo: the internet is cool","expected":["http://t.co/ulYGBYSo"]},{"description":"Extract URL before newline","text":"http://twitter.com\nhttp://example.com\nhttp://example.com/path\nexample.com/path\nt.co\nt.co/abcde","expected":["http://twitter.com","http://example.com","http://example.com/path","example.com/path","t.co/abcde"]},{"description":"DO NOT extract URL if preceded by $","text":"$http://twitter.com $twitter.com $http://t.co/abcde $t.co/abcde $t.co $TVI.CA $RBS.CA","expected":[]}],"urls_with_indices":[{"description":"Extract a URL","text":"text http://google.com","expected":[{"url":"http://google.com","indices":[5,22]}]},{"description":"Extract a URL from a Japanese tweet","text":"皆さん見てください! http://google.com","expected":[{"url":"http://google.com","indices":[11,28]}]},{"description":"Extract URLs without protocol on ccTLD with slash","text":"t.co/abcde bit.ly/abcde","expected":[{"url":"t.co/abcde","indices":[0,10]},{"url":"bit.ly/abcde","indices":[11,23]}]},{"description":"Extract URLs without protocol surrounded by CJK characters","text":"twitter.comこれは日本語です。example.com中国語t.co/abcde한국twitter.com example2.comテストtwitter.com/abcde","expected":[{"url":"twitter.com","indices":[0,11]},{"url":"example.com","indices":[20,31]},{"url":"t.co/abcde","indices":[34,44]},{"url":"twitter.com","indices":[46,57]},{"url":"example2.com","indices":[58,70]},{"url":"twitter.com/abcde","indices":[73,90]}]},{"description":"Extract URLs with and without protocol surrounded by CJK characters","text":"http://twitter.com/これは日本語です。example.com中国語http://t.co/abcde한국twitter.comテストexample2.comテストhttp://twitter.com/abcde","expected":[{"url":"http://twitter.com/","indices":[0,19]},{"url":"example.com","indices":[28,39]},{"url":"http://t.co/abcde","indices":[42,59]},{"url":"twitter.com","indices":[61,72]},{"url":"example2.com","indices":[75,87]},{"url":"http://twitter.com/abcde","indices":[90,114]}]},{"description":"Extract t.co URLs skipping trailing characters and adjusting indices correctly","text":"http://t.co/pbY2NfTZ's http://t.co/2vYHpAc5; http://t.co/ulYGBYSo: http://t.co/8MkmHU0k+c http://t.co/TKLp64dY.x http://t.co/8t7G3ddS#a http://t.co/FNkPfmii-","expected":[{"url":"http://t.co/pbY2NfTZ","indices":[0,20]},{"url":"http://t.co/2vYHpAc5","indices":[23,43]},{"url":"http://t.co/ulYGBYSo","indices":[45,65]},{"url":"http://t.co/8MkmHU0k","indices":[67,87]},{"url":"http://t.co/TKLp64dY","indices":[90,110]},{"url":"http://t.co/8t7G3ddS","indices":[113,133]},{"url":"http://t.co/FNkPfmii","indices":[136,156]}]},{"description":"Extract correct indices for duplicate instances of the same URL","text":"http://t.co http://t.co","expected":[{"url":"http://t.co","indices":[0,11]},{"url":"http://t.co","indices":[12,23]}]}],"hashtags":[{"description":"Extract an all-alpha hashtag","text":"a #hashtag here","expected":["hashtag"]},{"description":"Extract a letter-then-number hashtag","text":"this is #hashtag1","expected":["hashtag1"]},{"description":"Extract a number-then-letter hashtag","text":"#1hashtag is this","expected":["1hashtag"]},{"description":"Extract an all-numeric hashtag","text":"On the #16 bus","expected":["16"]},{"description":"Extract a single numeric hashtag","text":"#0","expected":["0"]},{"description":"Extract hashtag containing a dash","text":"hello #foo-bar","expected":["foo-bar"]},{"description":"Extract hashtag after bracket","text":"(#hashtag1 )#hashtag2 [#hashtag3 ]#hashtag4 ’#hashtag5’#hashtag6","expected":["hashtag1","hashtag2","hashtag3","hashtag4","hashtag5","hashtag6"]},{"description":"Extract a hashtag containing ñ","text":"I'll write more tests #mañana","expected":["mañana"]},{"description":"Extract a hashtag containing é","text":"Working remotely #café","expected":["café"]},{"description":"Extract a hashtag containing ü","text":"Getting my Oktoberfest on #münchen","expected":["münchen"]},{"description":"DO NOT Extract a hashtag containing Japanese","text":"this is not valid: # 会議中 ハッシュ","expected":[]},{"description":"Extract a hashtag in Korean","text":"What is #트위터 anyway?","expected":["트위터"]},{"description":"Extract a half-width Hangul hashtag","text":"Just random half-width Hangul #ᆪᆭᄚ","expected":["ᆪᆭᄚ"]},{"description":"Extract a hashtag in Russian","text":"What is #ашок anyway?","expected":["ашок"]},{"description":"Extract a starting katakana hashtag","text":"#カタカナ is a hashtag","expected":["カタカナ"]},{"description":"Extract a starting hiragana hashtag","text":"#ひらがな FTW!","expected":["ひらがな"]},{"description":"Extract a starting kanji hashtag","text":"#漢字 is the future","expected":["漢字"]},{"description":"Extract a trailing katakana hashtag","text":"Hashtag #カタカナ","expected":["カタカナ"]},{"description":"Extract a trailing hiragana hashtag","text":"Japanese hashtags #ひらがな","expected":["ひらがな"]},{"description":"Extract a trailing kanji hashtag","text":"Study time #漢字","expected":["漢字"]},{"description":"Extract a central katakana hashtag","text":"See my #カタカナ hashtag?","expected":["カタカナ"]},{"description":"Extract a central hiragana hashtag","text":"Study #ひらがな for fun and profit","expected":["ひらがな"]},{"description":"Extract a central kanji hashtag","text":"Some say #漢字 is the past. what do they know?","expected":["漢字"]},{"description":"Extract a Kanji/Katakana mixed hashtag","text":"日本語ハッシュタグテスト #日本語ハッシュタグ","expected":["日本語ハッシュタグ"]},{"description":"Extract a hashtag after a punctuation","text":"日本語ハッシュテスト。#日本語ハッシュタグ","expected":["日本語ハッシュタグ"]},{"description":"DO NOT include a punctuation in a hashtag","text":"#日本語ハッシュタグ。","expected":["日本語ハッシュタグ"]},{"description":"Extract a full-width Alnum hashtag","text":"全角英数字ハッシュタグ #hashtag123","expected":["hashtag123"]},{"description":"DO NOT extract a hashtag without a preceding space","text":"日本語ハッシュタグ#日本語ハッシュタグ","expected":[]},{"description":"Hashtag with chouon","text":"長音ハッシュタグ。#サッカー","expected":["サッカー"]},{"description":"Hashtag with half-width chouon","text":"長音ハッシュタグ。#サッカー","expected":["サッカー"]},{"description":"Hashtag with half-widh voiced sounds marks","text":"#ハッシュタグ #パピプペポ","expected":["ハッシュタグ","パピプペポ"]},{"description":"Hashtag with half-width # after full-width !","text":"できましたよー!#日本語ハッシュタグ。","expected":["日本語ハッシュタグ"]},{"description":"Hashtag with full-width # after full-width !","text":"できましたよー!#日本語ハッシュタグ。","expected":["日本語ハッシュタグ"]},{"description":"Hashtag with ideographic iteration mark","text":"#云々 #学問のすゝめ #いすゞ #各〻","expected":["云々","学問のすゝめ","いすゞ","各〻"]},{"description":"Hashtags with ş (U+015F)","text":"Here’s a test tweet for you: #Ateş #qrşt #ştu #ş","expected":["Ateş","qrşt","ştu","ş"]},{"description":"Hashtag before punctuations","text":"#hashtag: #hashtag; #hashtag, #hashtag. #hashtag! #hashtag?","expected":["hashtag","hashtag","hashtag","hashtag","hashtag","hashtag"]},{"description":"Hashtag after punctuations","text":":#hashtag ;#hashtag ,#hashtag .#hashtag !#hashtag ?#hashtag","expected":["hashtag","hashtag","hashtag","hashtag","hashtag","hashtag"]},{"description":"Hashtag before newline","text":"#hashtag\ntest\n#hashtag2\ntest\n#hashtag3\n","expected":["hashtag","hashtag2","hashtag3"]},{"description":"DO NOT extract hashtag when # is followed by URL","text":"#http://twitter.com #https://twitter.com","expected":[]}],"hashtags_with_indices":[{"description":"Extract a hastag at the start","text":"#hashtag here","expected":[{"tag":"hashtag","indices":[0,8]}]},{"description":"Extract a hastag at the end","text":"test a #hashtag","expected":[{"tag":"hashtag","indices":[7,15]}]},{"description":"Extract a hastag in the middle","text":"test a #hashtag in a string","expected":[{"tag":"hashtag","indices":[7,15]}]},{"description":"Extract a hastag with a dash","text":"test a #hash-tag in a string","expected":[{"tag":"hash-tag","indices":[7,16]}]},{"description":"Extract only a valid hashtag","text":"#123 a #hashtag in a string","expected":[{"tag":"123","indices":[0,4]},{"tag":"hashtag","indices":[7,15]}]},{"description":"Extract a hashtag in a string of multi-byte characters","text":"会議中 #hashtag 会議中","expected":[{"tag":"hashtag","indices":[4,12]}]},{"description":"Extract multiple valid hashtags","text":"One #two three #four","expected":[{"tag":"two","indices":[4,8]},{"tag":"four","indices":[15,20]}]},{"description":"Extract a non-latin hashtag","text":"Hashtags in #русский!","expected":[{"tag":"русский","indices":[12,20]}]},{"description":"Extract multiple non-latin hashtags","text":"Hashtags in #中文, #日本語, #한국말, and #русский! Try it out!","expected":[{"tag":"中文","indices":[12,15]},{"tag":"日本語","indices":[17,21]},{"tag":"한국말","indices":[23,27]},{"tag":"русский","indices":[33,41]}]}]};cases.validate = {"urls":[{"description":"Valid url: protocol + domain","text":"http://example.com","expected":true},{"description":"Valid url: ssl + domain + path + query","text":"https://example.com/path/to/resource?search=foo&lang=en","expected":true},{"description":"Valid url: protocol + domain + path + fragment","text":"http://twitter.com/#!/twitter","expected":true},{"description":"Valid url: cased protocol and domain","text":"HTTPS://www.ExaMPLE.COM/index.html","expected":true},{"description":"Valid url: port and userinfo","text":"http://user:PASSW0RD@example.com:8080/login.php","expected":true},{"description":"Valid url: matrix path parameters","text":"http://sports.yahoo.com/nfl/news;_ylt=Aom0;ylu=XyZ?slug=ap-superbowlnotebook","expected":true},{"description":"Valid url: ipv4","text":"http://192.168.0.1/index.html?src=asdf","expected":true},{"description":"Valid url: ipv6","text":"http://[3ffe:1900:4545:3:200:f8ff:fe21:67cf]:80/index.html","expected":true},{"description":"Valid url: underscore in subdomain","text":"http://test_underscore.twitter.com","expected":true},{"description":"Valid url: sub delims and question marks","text":"http://example.com?foo=$bar.;baz?BAZ&c=d-#top/?stories+","expected":true},{"description":"Valid unicode url: unicode domain","text":"http://☃.net/","expected":true},{"description":"Invalid url: invalid scheme","text":"ftp://www.example.com/","expected":false},{"description":"Invalid url: invalid userinfo characters","text":"https://user:pass[word]@www.example.com/","expected":false},{"description":"Invalid url: underscore in domain","text":"http://domain-dash_2314352345_dfasd.foo-cow_4352.com","expected":false},{"description":"Invalid url: domain beginning dash","text":"http://www.-domain4352.com/","expected":false},{"description":"Invalid url: domain trailing dash","text":"http://www.domain4352-.com/","expected":false},{"description":"Invalid url: unicode domain trailing dash","text":"http://☃-.net/","expected":false},{"description":"Invalid url: improperly encoded unicode domain","text":"http://%e2%98%83.net/","expected":false},{"description":"Invalid url: invalid IP","text":"http://256.1.2.3/","expected":false},{"description":"Invalid url: invalid char in path","text":"http://en.wikipedia.org/wiki/\"#Punctuation","expected":false},{"description":"Invalid url: trailing space","text":"http://example.com/#anchor ","expected":false}],"urls_without_protocol":[{"description":"Valid url without protocol: domain + gTLD","text":"example.com","expected":true},{"description":"Valid url without protocol: subdomain + domain + gTLD","text":"www.example.com","expected":true},{"description":"Valid url without protocol: domain + ccTLD","text":"t.co","expected":true},{"description":"Valid url without protocol: subdomain + domain + ccTLD","text":"foo.co.jp","expected":true},{"description":"Valid url without protocol: domain + path + query","text":"example.com/path/to/resource?search=foo&lang=en","expected":true}]};cases.get_tags = {"get_tags_from_message":[{"description":"Transform tag from @User to :user:id","text":"Hello @foo","expected":[":user:2",":unread:2"]},{"description":"Handle nicks with dash","text":"Hello @foo-bar","expected":[":user:3",":unread:3"]},{"description":"Don't get usertags from disabled users","text":"Hello @disabled-user","expected":[]},{"description":"Don't care about case","text":"Hello @FOO-BAR","expected":[":user:3",":unread:3"]},{"description":"Get tags from multiple users","text":"Hello @foo-bar, and hello @foo","expected":[":user:2",":unread:2",":user:3",":unread:3"]},{"description":"Get unread tags for all non-disabled users from @everyone","text":"Hello @everyone","expected":[":user:everyone",":unread:2",":unread:3"]},{"description":"Get metatag from @everyone","text":"Hello @everyone","expected":[":user:everyone",":unread:2",":unread:3"]},{"description":"Get metatag from @all","text":"Hello @all","expected":[":user:everyone",":unread:2",":unread:3"]},{"description":"Get metatag from @everybody","text":"Hello @everybody","expected":[":user:everyone",":unread:2",":unread:3"]},{"description":"Get metatag from @anyone","text":"Hello @anyone","expected":[":user:everyone",":unread:2",":unread:3"]},{"description":"Get metatag from @anybody","text":"Hello @anybody","expected":[":user:everyone",":unread:2",":unread:3"]},{"description":"Get :url: metatag when message includes an url","text":"Hello http://www.example.com","expected":[":url"]},{"description":"Get the :highlight:id metatag if username is mentioned","text":"hello Foo","expected":[":highlight:2",":unread:2"]},{"description":"Get the :highlight:id metatag if UPPERCASE username is mentioned","text":"hello FOO","expected":[":highlight:2",":unread:2"]},{"description":"Should not get the :highlight:id metatag for disabled users","text":"hello Disabled-User","expected":[]}],"get_tags_from_message_without_extra_parameters":[{"description":"Don't include user-specific metatags","text":"Hello @everyone","expected":[":user:everyone"]}],"get_tags_from_message_without_supplied_me":[{"description":"Get unread tags for each user","text":"Hello @everyone","expected":[":user:everyone",":unread:1",":unread:2",":unread:3"]}]};if (typeof module != 'undefined' && module.exports){module.exports = cases;}