extern crate micromark;
use micromark::{micromark, micromark_with_options, CompileOptions};
const DANGER: &CompileOptions = &CompileOptions {
allow_dangerous_html: true,
allow_dangerous_protocol: true,
};
#[test]
fn character_reference() {
assert_eq!(
micromark(
" & © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸"
),
"<p> & © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸</p>",
"should support named character references"
);
assert_eq!(
micromark("# Ӓ Ϡ �"),
"<p># Ӓ Ϡ �</p>",
"should support decimal character references"
);
assert_eq!(
micromark("" ആ ಫ"),
"<p>" ആ ಫ</p>",
"should support hexadecimal character references"
);
assert_eq!(
micromark(
"  &x; &#; &#x;\n�\n&#abcdef0;\n&ThisIsNotDefined; &hi?;"
),
"<p>&nbsp &x; &#; &#x;\n&#987654321;\n&#abcdef0;\n&ThisIsNotDefined; &hi?;</p>",
"should not support other things that look like character references"
);
assert_eq!(
micromark("©"),
"<p>&copy</p>",
"should not support character references w/o semicolon"
);
assert_eq!(
micromark("&MadeUpEntity;"),
"<p>&MadeUpEntity;</p>",
"should not support unknown named character references"
);
assert_eq!(
micromark_with_options("<a href=\"öö.html\">", DANGER),
"<a href=\"öö.html\">",
"should not care about character references in html"
);
// To do: link (resource).
// assert_eq!(
// micromark("[foo](/föö \"föö\")"),
// "<p><a href=\"/f%C3%B6%C3%B6\" title=\"föö\">foo</a></p>",
// "should support character references in resource URLs and titles"
// );
// To do: definition.
// assert_eq!(
// micromark("[foo]: /föö \"föö\"\n\n[foo]"),
// "<p><a href=\"/f%C3%B6%C3%B6\" title=\"föö\">foo</a></p>",
// "should support character references in definition URLs and titles"
// );
assert_eq!(
micromark("``` föö\nfoo\n```"),
"<pre><code class=\"language-föö\">foo\n</code></pre>",
"should support character references in code language"
);
assert_eq!(
micromark("`föö`"),
"<p><code>f&ouml;&ouml;</code></p>",
"should not support character references in text code"
);
assert_eq!(
micromark(" föfö"),
"<pre><code>f&ouml;f&ouml;\n</code></pre>",
"should not support character references in indented code"
);
// To do: attention.
// assert_eq!(
// micromark("*foo*\n*foo*"),
// "<p>*foo*\n<em>foo</em></p>",
// "should not support character references as construct markers (1)"
// );
// To do: list.
// assert_eq!(
// micromark("* foo\n\n* foo"),
// "<p>* foo</p>\n<ul>\n<li>foo</li>\n</ul>",
// "should not support character references as construct markers (2)"
// );
// To do: link.
// assert_eq!(
// micromark("[a](url "tit")"),
// "<p>[a](url "tit")</p>",
// "should not support character references as construct markers (3)"
// );
assert_eq!(
micromark("foo bar"),
"<p>foo\n\nbar</p>",
"should not support character references as whitespace (1)"
);
assert_eq!(
micromark("	foo"),
"<p>\tfoo</p>",
"should not support character references as whitespace (2)"
);
// Extra:
assert_eq!(
micromark("∳"),
"<p>∳</p>",
"should support the longest possible named character reference"
);
assert_eq!(
micromark("�"),
"<p>�</p>",
"should “support” a longest possible hexadecimal character reference"
);
assert_eq!(
micromark("�"),
"<p>�</p>",
"should “support” a longest possible decimal character reference"
);
assert_eq!(
micromark("&CounterClockwiseContourIntegrali;"),
"<p>&CounterClockwiseContourIntegrali;</p>",
"should not support the longest possible named character reference"
);
assert_eq!(
micromark("�"),
"<p>&#xff99999;</p>",
"should not support a longest possible hexadecimal character reference"
);
assert_eq!(
micromark("�"),
"<p>&#99999999;</p>",
"should not support a longest possible decimal character reference"
);
assert_eq!(
micromark("&-;"),
"<p>&-;</p>",
"should not support the other characters after `&`"
);
assert_eq!(
micromark("&#-;"),
"<p>&#-;</p>",
"should not support the other characters after `#`"
);
assert_eq!(
micromark("&#x-;"),
"<p>&#x-;</p>",
"should not support the other characters after `#x`"
);
assert_eq!(
micromark("<-;"),
"<p>&lt-;</p>",
"should not support the other characters inside a name"
);
assert_eq!(
micromark("	-;"),
"<p>&#9-;</p>",
"should not support the other characters inside a demical"
);
assert_eq!(
micromark("	-;"),
"<p>&#x9-;</p>",
"should not support the other characters inside a hexademical"
);
// To do: extensions.
// assert_eq!(
// micromark("&", {
// extensions: [{disable: {null: ["characterReferences"]}}]
// }),
// "<p>&</p>",
// "should support turning off character references"
// );
}