// Tests for HTML spec. #![cfg(feature = "html")] use pulldown_cmark::{html, BrokenLink, Options, Parser}; #[test] fn html_test_1() { let original = r##"Little header "##; let expected = r##"

Little header

"##; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } #[test] fn html_test_2() { let original = r##"Little header "##; let expected = r##"

Little header

"##; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } #[test] fn html_test_3() { let original = r##"Little header

Useless

?>"##; let expected = r##"

Little header

Useless

?>"##; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } #[test] fn html_test_4() { let original = r##"Little header "##; let expected = r##"

Little header

"##; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } #[test] fn html_test_5() { let original = r##"Little header

Useless

]]>"##; let expected = r##"

Little header

Useless

]]>"##; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } #[test] fn html_test_6() { let original = r##"Little header "##; let expected = r##"

Little header

"##; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } #[test] fn html_test_7() { let original = r##"Little header ----------- "##; let expected = r##"

Little header

"##; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } #[test] fn html_test_8() { let original = "A | B\n---|---\nfoo | bar"; let expected = r##"
AB
foobar
"##; let mut s = String::new(); let mut opts = Options::empty(); opts.insert(Options::ENABLE_TABLES); html::push_html(&mut s, Parser::new_ext(original, opts)); assert_eq!(expected, s); } #[test] fn html_test_9() { let original = "---"; let expected = "
\n"; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } #[test] fn html_test_10() { let original = "* * *"; let expected = "
\n"; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } #[test] fn html_test_11() { let original = "hi ~~no~~"; let expected = "

hi ~~no~~

\n"; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } #[test] fn html_test_broken_callback() { let original = r##"[foo], [bar], [baz], [baz]: https://example.org "##; let expected = r##"

foo, [bar], baz,

"##; use pulldown_cmark::{html, Options, Parser}; let mut s = String::new(); let mut callback = |broken_link: BrokenLink| { if &*broken_link.reference == "foo" || &*broken_link.reference == "baz" { Some(("https://replaced.example.org".into(), "some title".into())) } else { None } }; let p = Parser::new_with_broken_link_callback(original, Options::empty(), Some(&mut callback)); html::push_html(&mut s, p); assert_eq!(expected, s); } #[test] fn newline_in_code() { let originals = ["`\n `x", "` \n`x"]; let expected = "

x

\n"; for original in originals { let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } } #[test] fn newline_start_end_of_code() { let original = "`\nx\n`x"; let expected = "

xx

\n"; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } // https://github.com/raphlinus/pulldown-cmark/issues/715 #[test] fn trim_space_and_tab_at_end_of_paragraph() { let original = "one\ntwo \t"; let expected = "

one\ntwo

\n"; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } #[test] fn newline_within_code() { let originals = ["`\nx \ny\n`x", "`x \ny`x", "`x\n y`x"]; let expected = "

x yx

\n"; for original in originals { let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } } #[test] fn trim_space_tab_nl_at_end_of_paragraph() { let original = "one\ntwo \t\n"; let expected = "

one\ntwo

\n"; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } #[test] fn trim_space_nl_at_end_of_paragraph() { let original = "one\ntwo \n"; let expected = "

one\ntwo

\n"; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } #[test] fn trim_space_before_soft_break() { let original = "one \ntwo"; let expected = "

one\ntwo

\n"; let mut s = String::new(); html::push_html(&mut s, Parser::new(original)); assert_eq!(expected, s); } // Can't easily use regression.txt due to newline normalization. #[test] fn issue_819() { let original = [ "# \\", "# \\\n", "# \\\n\n", "# \\\r\n", "# \\\r\n\r\n", "# \\\n\r\n", "# \\\r\n\n", ]; let expected = "

\\

"; for orig in original { let mut s = String::new(); html::push_html(&mut s, Parser::new(orig)); // Trailing newline doesn't matter. Just the actual HTML. assert_eq!(expected, s.trim_end_matches('\n')); } for orig in original { let mut s = String::new(); let mut opts = Options::empty(); opts.insert(Options::ENABLE_HEADING_ATTRIBUTES); html::push_html(&mut s, Parser::new_ext(orig, opts)); // Trailing newline doesn't matter. Just the actual HTML. assert_eq!(expected, s.trim_end_matches('\n')); } }