diff options
author | Titus Wormer <tituswormer@gmail.com> | 2022-06-13 18:42:36 +0200 |
---|---|---|
committer | Titus Wormer <tituswormer@gmail.com> | 2022-06-13 18:42:36 +0200 |
commit | ef644f4def7d5cad3fb5307ec5e00fc7b0b025ff (patch) | |
tree | 1d284b657d2cade8e3d4e60db09750c768bbc76f /tests/html_text.rs | |
parent | 06b4ff3531874c95ec07b8440de526795408ef86 (diff) | |
download | markdown-rs-ef644f4def7d5cad3fb5307ec5e00fc7b0b025ff.tar.gz markdown-rs-ef644f4def7d5cad3fb5307ec5e00fc7b0b025ff.tar.bz2 markdown-rs-ef644f4def7d5cad3fb5307ec5e00fc7b0b025ff.zip |
Add basic html (text)
* Add all states for html (text)
* Fix to link paragraph tokens together
* Add note about uncovered bug where linking paragraph tokens together
doesn’t work 😅
Diffstat (limited to 'tests/html_text.rs')
-rw-r--r-- | tests/html_text.rs | 434 |
1 files changed, 434 insertions, 0 deletions
diff --git a/tests/html_text.rs b/tests/html_text.rs new file mode 100644 index 0000000..6ec387b --- /dev/null +++ b/tests/html_text.rs @@ -0,0 +1,434 @@ +extern crate micromark; +use micromark::{micromark, micromark_with_options, CompileOptions}; + +const DANGER: &CompileOptions = &CompileOptions { + allow_dangerous_html: true, + allow_dangerous_protocol: false, +}; + +#[test] +fn html_text() { + assert_eq!( + micromark("a <b> c"), + "<p>a <b> c</p>", + "should encode dangerous html by default" + ); + + assert_eq!( + micromark_with_options("<a><bab><c2c>", DANGER), + "<p><a><bab><c2c></p>", + "should support opening tags" + ); + + assert_eq!( + micromark_with_options("<a/><b2/>", DANGER), + "<p><a/><b2/></p>", + "should support self-closing tags" + ); + + // To do: line endings. + // assert_eq!( + // micromark_with_options("<a /><b2\ndata=\"foo\" >", DANGER), + // "<p><a /><b2\ndata=\"foo\" ></p>", + // "should support whitespace in tags" + // ); + + // To do: line endings. + // assert_eq!( + // micromark_with_options( + // "<a foo=\"bar\" bam = \"baz <em>\"</em>\"\n_boolean zoop:33=zoop:33 />", + // DANGER + // ), + // "<p><a foo=\"bar\" bam = \"baz <em>\"</em>\"\n_boolean zoop:33=zoop:33 /></p>", + // "should support attributes on tags" + // ); + + assert_eq!( + micromark_with_options("Foo <responsive-image src=\"foo.jpg\" />", DANGER), + "<p>Foo <responsive-image src=\"foo.jpg\" /></p>", + "should support non-html tags" + ); + + assert_eq!( + micromark_with_options("<33> <__>", DANGER), + "<p><33> <__></p>", + "should not support nonconforming tag names" + ); + + assert_eq!( + micromark_with_options("<a h*#ref=\"hi\">", DANGER), + "<p><a h*#ref="hi"></p>", + "should not support nonconforming attribute names" + ); + + assert_eq!( + micromark_with_options("<a href=\"hi'> <a href=hi'>", DANGER), + "<p><a href="hi'> <a href=hi'></p>", + "should not support nonconforming attribute values" + ); + + // To do: line endings. + // assert_eq!( + // micromark_with_options("< a><\nfoo><bar/ >\n<foo bar=baz\nbim!bop />", DANGER), + // "<p>< a><\nfoo><bar/ >\n<foo bar=baz\nbim!bop /></p>", + // "should not support nonconforming whitespace" + // ); + + assert_eq!( + micromark_with_options("<a href='bar'title=title>", DANGER), + "<p><a href='bar'title=title></p>", + "should not support missing whitespace" + ); + + assert_eq!( + micromark_with_options("</a></foo >", DANGER), + "<p></a></foo ></p>", + "should support closing tags" + ); + + assert_eq!( + micromark_with_options("</a href=\"foo\">", DANGER), + "<p></a href="foo"></p>", + "should not support closing tags w/ attributes" + ); + + // To do: line endings. + // assert_eq!( + // micromark_with_options("foo <!-- this is a\ncomment - with hyphen -->", DANGER), + // "<p>foo <!-- this is a\ncomment - with hyphen --></p>", + // "should support comments" + // ); + + assert_eq!( + micromark_with_options("foo <!-- not a comment -- two hyphens -->", DANGER), + "<p>foo <!-- not a comment -- two hyphens --></p>", + "should not support comments w/ two dashes inside" + ); + + assert_eq!( + micromark_with_options("foo <!--> foo -->", DANGER), + "<p>foo <!--> foo --></p>", + "should not support nonconforming comments (1)" + ); + + assert_eq!( + micromark_with_options("foo <!-- foo--->", DANGER), + "<p>foo <!-- foo---></p>", + "should not support nonconforming comments (2)" + ); + + assert_eq!( + micromark_with_options("foo <?php echo $a; ?>", DANGER), + "<p>foo <?php echo $a; ?></p>", + "should support instructions" + ); + + assert_eq!( + micromark_with_options("foo <!ELEMENT br EMPTY>", DANGER), + "<p>foo <!ELEMENT br EMPTY></p>", + "should support declarations" + ); + + assert_eq!( + micromark_with_options("foo <![CDATA[>&<]]>", DANGER), + "<p>foo <![CDATA[>&<]]></p>", + "should support cdata" + ); + + assert_eq!( + micromark_with_options("foo <a href=\"ö\">", DANGER), + "<p>foo <a href=\"ö\"></p>", + "should support (ignore) character references" + ); + + assert_eq!( + micromark_with_options("foo <a href=\"\\*\">", DANGER), + "<p>foo <a href=\"\\*\"></p>", + "should not support character escapes (1)" + ); + + assert_eq!( + micromark_with_options("<a href=\"\\\"\">", DANGER), + "<p><a href="""></p>", + "should not support character escapes (2)" + ); + + // Extra: + assert_eq!( + micromark_with_options("foo <!1>", DANGER), + "<p>foo <!1></p>", + "should not support non-comment, non-cdata, and non-named declaration" + ); + + assert_eq!( + micromark_with_options("foo <!-not enough!-->", DANGER), + "<p>foo <!-not enough!--></p>", + "should not support comments w/ not enough dashes" + ); + + assert_eq!( + micromark_with_options("foo <!---ok-->", DANGER), + "<p>foo <!---ok--></p>", + "should support comments that start w/ a dash, if it’s not followed by a greater than" + ); + + assert_eq!( + micromark_with_options("foo <!--->", DANGER), + "<p>foo <!---></p>", + "should not support comments that start w/ `->`" + ); + + assert_eq!( + micromark_with_options("foo <!-- -> -->", DANGER), + "<p>foo <!-- -> --></p>", + "should support `->` in a comment" + ); + + assert_eq!( + micromark_with_options("foo <!--", DANGER), + "<p>foo <!--</p>", + "should not support eof in a comment (1)" + ); + + assert_eq!( + micromark_with_options("foo <!--a", DANGER), + "<p>foo <!--a</p>", + "should not support eof in a comment (2)" + ); + + assert_eq!( + micromark_with_options("foo <!--a-", DANGER), + "<p>foo <!--a-</p>", + "should not support eof in a comment (3)" + ); + + assert_eq!( + micromark_with_options("foo <!--a--", DANGER), + "<p>foo <!--a--</p>", + "should not support eof in a comment (4)" + ); + + // Note: cmjs parses this differently. + // See: <https://github.com/commonmark/commonmark.js/issues/193> + assert_eq!( + micromark_with_options("foo <![cdata[]]>", DANGER), + "<p>foo <![cdata[]]></p>", + "should not support lowercase “cdata”" + ); + + assert_eq!( + micromark_with_options("foo <![CDATA", DANGER), + "<p>foo <![CDATA</p>", + "should not support eof in a CDATA (1)" + ); + + assert_eq!( + micromark_with_options("foo <![CDATA[", DANGER), + "<p>foo <![CDATA[</p>", + "should not support eof in a CDATA (2)" + ); + + assert_eq!( + micromark_with_options("foo <![CDATA[]", DANGER), + "<p>foo <![CDATA[]</p>", + "should not support eof in a CDATA (3)" + ); + + assert_eq!( + micromark_with_options("foo <![CDATA[]]", DANGER), + "<p>foo <![CDATA[]]</p>", + "should not support eof in a CDATA (4)" + ); + + assert_eq!( + micromark_with_options("foo <![CDATA[asd", DANGER), + "<p>foo <![CDATA[asd</p>", + "should not support eof in a CDATA (5)" + ); + + assert_eq!( + micromark_with_options("foo <![CDATA[]]]]>", DANGER), + "<p>foo <![CDATA[]]]]></p>", + "should support end-like constructs in CDATA" + ); + + assert_eq!( + micromark_with_options("foo <!doctype", DANGER), + "<p>foo <!doctype</p>", + "should not support eof in declarations" + ); + + assert_eq!( + micromark_with_options("foo <?php", DANGER), + "<p>foo <?php</p>", + "should not support eof in instructions (1)" + ); + + assert_eq!( + micromark_with_options("foo <?php?", DANGER), + "<p>foo <?php?</p>", + "should not support eof in instructions (2)" + ); + + assert_eq!( + micromark_with_options("foo <???>", DANGER), + "<p>foo <???></p>", + "should support question marks in instructions" + ); + + assert_eq!( + micromark_with_options("foo </3>", DANGER), + "<p>foo </3></p>", + "should not support closing tags that don’t start w/ alphas" + ); + + assert_eq!( + micromark_with_options("foo </a->", DANGER), + "<p>foo </a-></p>", + "should support dashes in closing tags" + ); + + assert_eq!( + micromark_with_options("foo </a >", DANGER), + "<p>foo </a ></p>", + "should support whitespace after closing tag names" + ); + + assert_eq!( + micromark_with_options("foo </a!>", DANGER), + "<p>foo </a!></p>", + "should not support other characters after closing tag names" + ); + + assert_eq!( + micromark_with_options("foo <a->", DANGER), + "<p>foo <a-></p>", + "should support dashes in opening tags" + ); + + assert_eq!( + micromark_with_options("foo <a >", DANGER), + "<p>foo <a ></p>", + "should support whitespace after opening tag names" + ); + + assert_eq!( + micromark_with_options("foo <a!>", DANGER), + "<p>foo <a!></p>", + "should not support other characters after opening tag names" + ); + + assert_eq!( + micromark_with_options("foo <a !>", DANGER), + "<p>foo <a !></p>", + "should not support other characters in opening tags (1)" + ); + + assert_eq!( + micromark_with_options("foo <a b!>", DANGER), + "<p>foo <a b!></p>", + "should not support other characters in opening tags (2)" + ); + + assert_eq!( + micromark_with_options("foo <a b/>", DANGER), + "<p>foo <a b/></p>", + "should support a self-closing slash after an attribute name" + ); + + assert_eq!( + micromark_with_options("foo <a b>", DANGER), + "<p>foo <a b></p>", + "should support a greater than after an attribute name" + ); + + assert_eq!( + micromark_with_options("foo <a b=<>", DANGER), + "<p>foo <a b=<></p>", + "should not support less than to start an unquoted attribute value" + ); + + assert_eq!( + micromark_with_options("foo <a b=>>", DANGER), + "<p>foo <a b=>></p>", + "should not support greater than to start an unquoted attribute value" + ); + + assert_eq!( + micromark_with_options("foo <a b==>", DANGER), + "<p>foo <a b==></p>", + "should not support equals to to start an unquoted attribute value" + ); + + assert_eq!( + micromark_with_options("foo <a b=`>", DANGER), + "<p>foo <a b=`></p>", + "should not support grave accent to start an unquoted attribute value" + ); + + assert_eq!( + micromark_with_options("foo <a b=\"asd", DANGER), + "<p>foo <a b="asd</p>", + "should not support eof in double quoted attribute value" + ); + + assert_eq!( + micromark_with_options("foo <a b='asd", DANGER), + "<p>foo <a b='asd</p>", + "should not support eof in single quoted attribute value" + ); + + assert_eq!( + micromark_with_options("foo <a b=asd", DANGER), + "<p>foo <a b=asd</p>", + "should not support eof in unquoted attribute value" + ); + + // To do: line endings. + // assert_eq!( + // micromark_with_options("foo <a b=\nasd>", DANGER), + // "<p>foo <a b=\nasd></p>", + // "should support an eol before an attribute value" + // ); + + assert_eq!( +micromark_with_options("<x> a", DANGER), +"<p><x> a</p>", +"should support starting a line w/ a tag if followed by anything other than an eol (after optional space/tabs)" +); + + assert_eq!( + micromark_with_options("<span foo=", DANGER), + "<p><span foo=</p>", + "should support an EOF before an attribute value" + ); + + // To do: line endings. + // assert_eq!( + // micromark_with_options("a <!b\nc>", DANGER), + // "<p>a <!b\nc></p>", + // "should support an EOL in a declaration" + // ); + // To do: line endings. + // assert_eq!( + // micromark_with_options("a <![CDATA[\n]]>", DANGER), + // "<p>a <![CDATA[\n]]></p>", + // "should support an EOL in cdata" + // ); + + // To do: line endings. + // // Note: cmjs parses this differently. + // // See: <https://github.com/commonmark/commonmark.js/issues/196> + // assert_eq!( + // micromark_with_options("a <?\n?>", DANGER), + // "<p>a <?\n?></p>", + // "should support an EOL in an instruction" + // ); + + // // To do: extensions. + // // assert_eq!( + // // micromark_with_options("a <x>", {extensions: [{disable: {null: ["htmlText"]}}]}), + // // "<p>a <x></p>", + // // "should support turning off html (text)" + // // ); +} |