diff options
author | Titus Wormer <tituswormer@gmail.com> | 2022-08-18 18:33:10 +0200 |
---|---|---|
committer | Titus Wormer <tituswormer@gmail.com> | 2022-08-18 18:33:17 +0200 |
commit | 25e267afbc0789ea36508d45c3ea3545b84223bb (patch) | |
tree | 8dee2a78ad1df29e9df7cf151091a5d265fd7ecb /tests | |
parent | 1dbf02d8c1955316c6cc43a427f506b91c87ef3a (diff) | |
download | markdown-rs-25e267afbc0789ea36508d45c3ea3545b84223bb.tar.gz markdown-rs-25e267afbc0789ea36508d45c3ea3545b84223bb.tar.bz2 markdown-rs-25e267afbc0789ea36508d45c3ea3545b84223bb.zip |
Add support for GFM autolink literals
Diffstat (limited to 'tests')
-rw-r--r-- | tests/gfm_autolink_literal.rs | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/tests/gfm_autolink_literal.rs b/tests/gfm_autolink_literal.rs new file mode 100644 index 0000000..9551751 --- /dev/null +++ b/tests/gfm_autolink_literal.rs @@ -0,0 +1,256 @@ +extern crate micromark; +use micromark::{micromark, micromark_with_options, Constructs, Options}; +use pretty_assertions::assert_eq; + +#[test] +fn gfm_autolink_literal() { + let gfm = Options { + constructs: Constructs::gfm(), + ..Options::default() + }; + + assert_eq!( + micromark("https://example.com"), + "<p>https://example.com</p>", + "should ignore protocol urls by default" + ); + assert_eq!( + micromark("www.example.com"), + "<p>www.example.com</p>", + "should ignore www urls by default" + ); + assert_eq!( + micromark("user@example.com"), + "<p>user@example.com</p>", + "should ignore email urls by default" + ); + + assert_eq!( + micromark_with_options("https://example.com", &gfm), + "<p><a href=\"https://example.com\">https://example.com</a></p>", + "should support protocol urls if enabled" + ); + assert_eq!( + micromark_with_options("www.example.com", &gfm), + "<p><a href=\"http://www.example.com\">www.example.com</a></p>", + "should support www urls if enabled" + ); + assert_eq!( + micromark_with_options("user@example.com", &gfm), + "<p><a href=\"mailto:user@example.com\">user@example.com</a></p>", + "should support email urls if enabled" + ); + + assert_eq!( + micromark_with_options("user@example.com", &gfm), + "<p><a href=\"mailto:user@example.com\">user@example.com</a></p>", + "should support a closing paren at TLD (email)" + ); + + assert_eq!( + micromark_with_options("www.a.)", &gfm), + "<p><a href=\"http://www.a\">www.a</a>.)</p>", + "should support a closing paren at TLD (www)" + ); + + assert_eq!( + micromark_with_options("www.a b", &gfm), + "<p><a href=\"http://www.a\">www.a</a> b</p>", + "should support no TLD" + ); + + assert_eq!( + micromark_with_options("www.a/b c", &gfm), + "<p><a href=\"http://www.a/b\">www.a/b</a> c</p>", + "should support a path instead of TLD" + ); + + assert_eq!( + micromark_with_options("www.�a", &gfm), + "<p><a href=\"http://www.%EF%BF%BDa\">www.�a</a></p>", + "should support a replacement character in a domain" + ); + + assert_eq!( + micromark_with_options("http://點看.com", &gfm), + "<p><a href=\"http://%E9%BB%9E%E7%9C%8B.com\">http://點看.com</a></p>", + "should support non-ascii characters in a domain (http)" + ); + + assert_eq!( + micromark_with_options("www.點看.com", &gfm), + "<p><a href=\"http://www.%E9%BB%9E%E7%9C%8B.com\">www.點看.com</a></p>", + "should support non-ascii characters in a domain (www)" + ); + + assert_eq!( + micromark_with_options("點看@example.com", &gfm), + "<p>點看@example.com</p>", + "should *not* support non-ascii characters in atext (email)" + ); + + assert_eq!( + micromark_with_options("example@點看.com", &gfm), + "<p>example@點看.com</p>", + "should *not* support non-ascii characters in a domain (email)" + ); + + assert_eq!( + micromark_with_options("www.a.com/點看", &gfm), + "<p><a href=\"http://www.a.com/%E9%BB%9E%E7%9C%8B\">www.a.com/點看</a></p>", + "should support non-ascii characters in a path" + ); + + assert_eq!( + micromark_with_options("www.-a.b", &gfm), + "<p><a href=\"http://www.-a.b\">www.-a.b</a></p>", + "should support a dash to start a domain" + ); + + assert_eq!( + micromark_with_options("www.$", &gfm), + "<p><a href=\"http://www.$\">www.$</a></p>", + "should support a dollar as a domain name" + ); + + assert_eq!( + micromark_with_options("www.a..b.c", &gfm), + "<p><a href=\"http://www.a..b.c\">www.a..b.c</a></p>", + "should support adjacent dots in a domain name" + ); + + assert_eq!( + micromark_with_options("www.a&a;", &gfm), + "<p><a href=\"http://www.a\">www.a</a>&a;</p>", + "should support named character references in domains" + ); + + assert_eq!( + micromark_with_options("https://a.bc/d/e/).", &gfm), + "<p><a href=\"https://a.bc/d/e/\">https://a.bc/d/e/</a>).</p>", + "should support a closing paren and period after a path" + ); + + assert_eq!( + micromark_with_options("https://a.bc/d/e/.)", &gfm), + "<p><a href=\"https://a.bc/d/e/\">https://a.bc/d/e/</a>.)</p>", + "should support a period and closing paren after a path" + ); + + assert_eq!( + micromark_with_options("https://a.bc).", &gfm), + "<p><a href=\"https://a.bc\">https://a.bc</a>).</p>", + "should support a closing paren and period after a domain" + ); + + assert_eq!( + micromark_with_options("https://a.bc.)", &gfm), + "<p><a href=\"https://a.bc\">https://a.bc</a>.)</p>", + "should support a period and closing paren after a domain" + ); + + assert_eq!( + micromark_with_options("https://a.bc).d", &gfm), + "<p><a href=\"https://a.bc).d\">https://a.bc).d</a></p>", + "should support a closing paren and period in a path" + ); + + assert_eq!( + micromark_with_options("https://a.bc.)d", &gfm), + "<p><a href=\"https://a.bc.)d\">https://a.bc.)d</a></p>", + "should support a period and closing paren in a path" + ); + + assert_eq!( + micromark_with_options("https://a.bc/))d", &gfm), + "<p><a href=\"https://a.bc/))d\">https://a.bc/))d</a></p>", + "should support two closing parens in a path" + ); + + assert_eq!( + micromark_with_options("ftp://a/b/c.txt", &gfm), + "<p>ftp://a/b/c.txt</p>", + "should not support ftp links" + ); + + // Note: GH comments/issues/PRs do not link this, but Gists/readmes do. + // Fixing it would mean defiating from `cmark-gfm`: + // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L156>. + // assert_eq!( + // micromark_with_options(",www.example.com", &gfm), + // "<p>,<a href=\"http://www.example.com\">www.example.com</a></p>", + // "should support www links after Unicode punctuation", + // ); + + assert_eq!( + micromark_with_options(",https://example.com", &gfm), + "<p>,<a href=\"https://example.com\">https://example.com</a></p>", + "should support http links after Unicode punctuation" + ); + + assert_eq!( + micromark_with_options(",example@example.com", &gfm), + "<p>,<a href=\"mailto:example@example.com\">example@example.com</a></p>", + "should support email links after Unicode punctuation" + ); + + assert_eq!( + micromark_with_options( + "http://user:password@host:port/path?key=value#fragment", + &gfm + ), + "<p>http://user:password@host:port/path?key=value#fragment</p>", + "should not link character reference for `:`" + ); + + assert_eq!( + micromark_with_options("http://example.com/ab<cd", &gfm), + "<p><a href=\"http://example.com/ab\">http://example.com/ab</a><cd</p>", + "should stop domains/paths at `<`" + ); + + assert_eq!( + micromark_with_options( + r###" +[ www.example.com + +[ https://example.com + +[ contact@example.com + +[ www.example.com ] + +[ https://example.com ] + +[ contact@example.com ] + +[ www.example.com ](#) + +[ https://example.com ](#) + +[ contact@example.com ](#) + +![ www.example.com ](#) + +![ https://example.com ](#) + +![ contact@example.com ](#) +"###, + &gfm + ), + r###"<p>[ <a href="http://www.example.com">www.example.com</a></p> +<p>[ <a href="https://example.com">https://example.com</a></p> +<p>[ <a href="mailto:contact@example.com">contact@example.com</a></p> +<p>[ <a href="http://www.example.com">www.example.com</a> ]</p> +<p>[ <a href="https://example.com">https://example.com</a> ]</p> +<p>[ <a href="mailto:contact@example.com">contact@example.com</a> ]</p> +<p><a href="#"> www.example.com </a></p> +<p><a href="#"> https://example.com </a></p> +<p><a href="#"> contact@example.com </a></p> +<p><img src="#" alt=" www.example.com " /></p> +<p><img src="#" alt=" https://example.com " /></p> +<p><img src="#" alt=" contact@example.com " /></p> +"###, + "should interplay with brackets, links, and images" + ); +} |