aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Titus Wormer <tituswormer@gmail.com>2022-09-07 15:53:06 +0200
committerLibravatar Titus Wormer <tituswormer@gmail.com>2022-09-07 15:53:06 +0200
commit1d92666865b35341e076efbefddf6e73b5e1542e (patch)
tree11c05985ec7679f73473e7ea2c769465698e2f08
parente6018e52ee6ad9a8f8a0672b75bf515faf74af1f (diff)
downloadmarkdown-rs-1d92666865b35341e076efbefddf6e73b5e1542e.tar.gz
markdown-rs-1d92666865b35341e076efbefddf6e73b5e1542e.tar.bz2
markdown-rs-1d92666865b35341e076efbefddf6e73b5e1542e.zip
Add support for recoverable syntax errors
-rw-r--r--build.rs6
-rw-r--r--src/compiler.rs2
-rw-r--r--src/construct/document.rs21
-rw-r--r--src/construct/mdx_jsx_text.rs88
-rw-r--r--src/lib.rs103
-rw-r--r--src/parser.rs8
-rw-r--r--src/state.rs25
-rw-r--r--src/subtokenize.rs8
-rw-r--r--src/tokenizer.rs17
-rw-r--r--tests/attention.rs14
-rw-r--r--tests/autolink.rs45
-rw-r--r--tests/block_quote.rs6
-rw-r--r--tests/character_escape.rs14
-rw-r--r--tests/character_reference.rs14
-rw-r--r--tests/code_fenced.rs6
-rw-r--r--tests/code_indented.rs22
-rw-r--r--tests/code_text.rs8
-rw-r--r--tests/commonmark.rs1308
-rw-r--r--tests/definition.rs13
-rw-r--r--tests/frontmatter.rs20
-rw-r--r--tests/gfm_autolink_literal.rs122
-rw-r--r--tests/gfm_footnote.rs103
-rw-r--r--tests/gfm_strikethrough.rs30
-rw-r--r--tests/gfm_table.rs126
-rw-r--r--tests/gfm_tagfilter.rs12
-rw-r--r--tests/gfm_task_list_item.rs14
-rw-r--r--tests/hard_break_escape.rs6
-rw-r--r--tests/hard_break_trailing.rs6
-rw-r--r--tests/heading_atx.rs6
-rw-r--r--tests/heading_setext.rs6
-rw-r--r--tests/html_flow.rs328
-rw-r--r--tests/html_text.rs138
-rw-r--r--tests/image.rs8
-rw-r--r--tests/link_reference.rs10
-rw-r--r--tests/link_resource.rs20
-rw-r--r--tests/list.rs33
-rw-r--r--tests/math_flow.rs80
-rw-r--r--tests/math_text.rs54
-rw-r--r--tests/misc_bom.rs4
-rw-r--r--tests/misc_dangerous_html.rs6
-rw-r--r--tests/misc_dangerous_protocol.rs12
-rw-r--r--tests/misc_default_line_ending.rs8
-rw-r--r--tests/misc_line_ending.rs22
-rw-r--r--tests/misc_soft_break.rs4
-rw-r--r--tests/misc_tabs.rs14
-rw-r--r--tests/misc_url.rs4
-rw-r--r--tests/misc_zero.rs4
-rw-r--r--tests/text.rs4
-rw-r--r--tests/thematic_break.rs6
49 files changed, 1550 insertions, 1388 deletions
diff --git a/build.rs b/build.rs
index b485bb5..e32493c 100644
--- a/build.rs
+++ b/build.rs
@@ -53,7 +53,7 @@ async fn commonmark() {
format!("{}\n", parts[1])
};
- let test = format!(" assert_eq!(\n micromark_with_options(\n r###\"{}\"###,\n &danger\n ),\n r###\"{}\"###,\n r###\"{} ({})\"###\n);", input, output, section, number);
+ let test = format!(" assert_eq!(\n micromark_with_options(\n r###\"{}\"###,\n &danger\n )?,\n r###\"{}\"###,\n r###\"{} ({})\"###\n);", input, output, section, number);
cases.push(test);
@@ -73,7 +73,7 @@ use pretty_assertions::assert_eq;
#[rustfmt::skip]
#[test]
-fn commonmark() {{
+fn commonmark() -> Result<(), String> {{
let danger = Options {{
allow_dangerous_html: true,
allow_dangerous_protocol: true,
@@ -81,6 +81,8 @@ fn commonmark() {{
}};
{}
+
+ Ok(())
}}
",
cases.join("\n\n")
diff --git a/src/compiler.rs b/src/compiler.rs
index b271768..4f0f958 100644
--- a/src/compiler.rs
+++ b/src/compiler.rs
@@ -333,7 +333,7 @@ pub fn compile(events: &[Event], bytes: &[u8], options: &Options) -> String {
generate_footnote_section(&mut context);
}
- assert_eq!(context.buffers.len(), 1, "expected 1 final buffer");
+ debug_assert_eq!(context.buffers.len(), 1, "expected 1 final buffer");
context
.buffers
.get(0)
diff --git a/src/construct/document.rs b/src/construct/document.rs
index e31e58d..57c5f3a 100644
--- a/src/construct/document.rs
+++ b/src/construct/document.rs
@@ -14,7 +14,7 @@ use crate::state::{Name as StateName, State};
use crate::subtokenize::divide_events;
use crate::tokenizer::{Container, ContainerState, Tokenizer};
use crate::util::skip;
-use alloc::{boxed::Box, vec::Vec};
+use alloc::{boxed::Box, string::String, vec::Vec};
/// Phases where we can exit containers.
#[derive(Debug, PartialEq)]
@@ -266,7 +266,9 @@ pub fn container_new_after(tokenizer: &mut Tokenizer) -> State {
if tokenizer.tokenize_state.document_continued
!= tokenizer.tokenize_state.document_container_stack.len()
{
- exit_containers(tokenizer, &Phase::Prefix);
+ if let Err(message) = exit_containers(tokenizer, &Phase::Prefix) {
+ return State::Error(message);
+ }
}
// We are “piercing” into the flow with a new container.
@@ -361,6 +363,7 @@ pub fn flow_end(tokenizer: &mut Tokenizer) -> State {
let state = tokenizer
.tokenize_state
.document_child_state
+ .take()
.unwrap_or(State::Next(StateName::FlowStart));
tokenizer.tokenize_state.document_exits.push(None);
@@ -439,13 +442,17 @@ pub fn flow_end(tokenizer: &mut Tokenizer) -> State {
if tokenizer.tokenize_state.document_continued
!= tokenizer.tokenize_state.document_container_stack.len()
{
- exit_containers(tokenizer, &Phase::After);
+ if let Err(message) = exit_containers(tokenizer, &Phase::After) {
+ return State::Error(message);
+ }
}
match tokenizer.current {
None => {
tokenizer.tokenize_state.document_continued = 0;
- exit_containers(tokenizer, &Phase::Eof);
+ if let Err(message) = exit_containers(tokenizer, &Phase::Eof) {
+ return State::Error(message);
+ }
resolve(tokenizer);
State::Ok
}
@@ -461,7 +468,7 @@ pub fn flow_end(tokenizer: &mut Tokenizer) -> State {
}
/// Close containers (and flow if needed).
-fn exit_containers(tokenizer: &mut Tokenizer, phase: &Phase) {
+fn exit_containers(tokenizer: &mut Tokenizer, phase: &Phase) -> Result<(), String> {
let mut stack_close = tokenizer
.tokenize_state
.document_container_stack
@@ -477,7 +484,7 @@ fn exit_containers(tokenizer: &mut Tokenizer, phase: &Phase) {
.take()
.unwrap_or(State::Next(StateName::FlowStart));
- child.flush(state, false);
+ child.flush(state, false)?;
}
if !stack_close.is_empty() {
@@ -524,6 +531,8 @@ fn exit_containers(tokenizer: &mut Tokenizer, phase: &Phase) {
}
child.interrupt = false;
+
+ Ok(())
}
// Inject everything together.
diff --git a/src/construct/mdx_jsx_text.rs b/src/construct/mdx_jsx_text.rs
index deeb3e9..4c71fec 100644
--- a/src/construct/mdx_jsx_text.rs
+++ b/src/construct/mdx_jsx_text.rs
@@ -76,10 +76,10 @@ pub fn name_before(tokenizer: &mut Tokenizer) -> State {
// Fragment opening tag.
Some(b'>') => State::Retry(StateName::MdxJsxTextTagEnd),
_ => {
- // To do: unicode.
- let char_opt = char_after_index(tokenizer.parse_state.bytes, tokenizer.point.index);
-
- if id_start(char_opt) {
+ if id_start(char_after_index(
+ tokenizer.parse_state.bytes,
+ tokenizer.point.index,
+ )) {
tokenizer.enter(Name::MdxJsxTextTagName);
tokenizer.enter(Name::MdxJsxTextTagNamePrimary);
tokenizer.consume();
@@ -111,34 +111,32 @@ pub fn name_before(tokenizer: &mut Tokenizer) -> State {
/// ^
/// ```
pub fn closing_tag_name_before(tokenizer: &mut Tokenizer) -> State {
- match tokenizer.current {
- // Fragment closing tag.
- Some(b'>') => State::Retry(StateName::MdxJsxTextTagEnd),
- // Start of a closing tag name.
- _ => {
- // To do: unicode.
- let char_opt = char_after_index(tokenizer.parse_state.bytes, tokenizer.point.index);
-
- if id_start(char_opt) {
- tokenizer.enter(Name::MdxJsxTextTagName);
- tokenizer.enter(Name::MdxJsxTextTagNamePrimary);
- tokenizer.consume();
- State::Next(StateName::MdxJsxTextPrimaryName)
- } else {
- crash(
- tokenizer,
- "before name",
- &format!(
- "a character that can start a name, such as a letter, `$`, or `_`{}",
- if tokenizer.current == Some(b'*' | b'/') {
- " (note: JS comments in JSX tags are not supported in MDX)"
- } else {
- ""
- }
- ),
- )
- }
- }
+ // Fragment closing tag.
+ if let Some(b'>') = tokenizer.current {
+ State::Retry(StateName::MdxJsxTextTagEnd)
+ }
+ // Start of a closing tag name.
+ else if id_start(char_after_index(
+ tokenizer.parse_state.bytes,
+ tokenizer.point.index,
+ )) {
+ tokenizer.enter(Name::MdxJsxTextTagName);
+ tokenizer.enter(Name::MdxJsxTextTagNamePrimary);
+ tokenizer.consume();
+ State::Next(StateName::MdxJsxTextPrimaryName)
+ } else {
+ crash(
+ tokenizer,
+ "before name",
+ &format!(
+ "a character that can start a name, such as a letter, `$`, or `_`{}",
+ if tokenizer.current == Some(b'*' | b'/') {
+ " (note: JS comments in JSX tags are not supported in MDX)"
+ } else {
+ ""
+ }
+ ),
+ )
}
}
@@ -162,7 +160,6 @@ pub fn primary_name(tokenizer: &mut Tokenizer) -> State {
}
// Continuation of name: remain.
// Allow continuation bytes.
- // To do: unicode.
else if matches!(tokenizer.current, Some(0x80..=0xBF))
|| id_cont(char_after_index(
tokenizer.parse_state.bytes,
@@ -284,7 +281,7 @@ pub fn member_name(tokenizer: &mut Tokenizer) -> State {
State::Retry(StateName::MdxJsxTextEsWhitespaceStart)
}
// Continuation of name: remain.
- // To do: unicode.
+ // Allow continuation bytes.
else if matches!(tokenizer.current, Some(0x80..=0xBF))
|| id_cont(char_after_index(
tokenizer.parse_state.bytes,
@@ -398,7 +395,7 @@ pub fn local_name(tokenizer: &mut Tokenizer) -> State {
State::Retry(StateName::MdxJsxTextEsWhitespaceStart)
}
// Continuation of name: remain.
- // To do: unicode.
+ // Allow continuation bytes.
else if matches!(tokenizer.current, Some(0x80..=0xBF))
|| id_cont(char_after_index(
tokenizer.parse_state.bytes,
@@ -516,8 +513,8 @@ pub fn attribute_primary_name(tokenizer: &mut Tokenizer) -> State {
);
State::Retry(StateName::MdxJsxTextEsWhitespaceStart)
}
- // Continuation of the attribute name: remain.
- // To do: unicode.
+ // Continuation of name: remain.
+ // Allow continuation bytes.
else if matches!(tokenizer.current, Some(0x80..=0xBF))
|| id_cont(char_after_index(
tokenizer.parse_state.bytes,
@@ -525,7 +522,7 @@ pub fn attribute_primary_name(tokenizer: &mut Tokenizer) -> State {
))
{
tokenizer.consume();
- State::Next(StateName::MdxJsxTextLocalName)
+ State::Next(StateName::MdxJsxTextAttributePrimaryName)
} else {
crash(
tokenizer,
@@ -643,8 +640,8 @@ pub fn attribute_local_name(tokenizer: &mut Tokenizer) -> State {
);
State::Retry(StateName::MdxJsxTextEsWhitespaceStart)
}
- // Continuation of local name: remain.
- // To do: unicode.
+ // Continuation of name: remain.
+ // Allow continuation bytes.
else if matches!(tokenizer.current, Some(0x80..=0xBF))
|| id_cont(char_after_index(
tokenizer.parse_state.bytes,
@@ -906,7 +903,6 @@ pub fn es_whitespace_inside(tokenizer: &mut Tokenizer) -> State {
}
}
-// To do: unicode.
fn id_start(code: Option<char>) -> bool {
if let Some(char) = code {
UnicodeID::is_id_start(char) || matches!(char, '$' | '_')
@@ -915,7 +911,6 @@ fn id_start(code: Option<char>) -> bool {
}
}
-// To do: unicode.
fn id_cont(code: Option<char>) -> bool {
if let Some(char) = code {
UnicodeID::is_id_continue(char) || matches!(char, '-' | '\u{200c}' | '\u{200d}')
@@ -924,25 +919,24 @@ fn id_cont(code: Option<char>) -> bool {
}
}
-fn crash(tokenizer: &Tokenizer, at: &str, expect: &str) -> ! {
+fn crash(tokenizer: &Tokenizer, at: &str, expect: &str) -> State {
// To do: externalize this, and the print mechanism in the tokenizer,
// to one proper formatter.
- // To do: figure out how Rust does errors?
let actual = match tokenizer.current {
None => "end of file".to_string(),
Some(byte) => format_byte(byte),
};
- unreachable!(
+ State::Error(format!(
"{}:{}: Unexpected {} {}, expected {}",
tokenizer.point.line, tokenizer.point.column, actual, at, expect
- )
+ ))
}
fn format_byte(byte: u8) -> String {
match byte {
b'`' => "`` ` ``".to_string(),
b' '..=b'~' => format!("`{}`", str::from_utf8(&[byte]).unwrap()),
- _ => format!("U+{:>04X}", byte),
+ _ => format!("character U+{:>04X}", byte),
}
}
diff --git a/src/lib.rs b/src/lib.rs
index 7fd705b..e0b6da2 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -406,6 +406,7 @@ pub struct Options {
///
/// ```
/// use micromark::{micromark, micromark_with_options, Options};
+ /// # fn main() -> Result<(), String> {
///
/// // micromark is safe by default:
/// assert_eq!(
@@ -421,9 +422,11 @@ pub struct Options {
/// allow_dangerous_html: true,
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p>Hi, <i>venus</i>!</p>"
/// );
+ /// # Ok(())
+ /// # }
/// ```
pub allow_dangerous_html: bool,
@@ -435,6 +438,7 @@ pub struct Options {
///
/// ```
/// use micromark::{micromark, micromark_with_options, Options};
+ /// # fn main() -> Result<(), String> {
///
/// // micromark is safe by default:
/// assert_eq!(
@@ -450,9 +454,11 @@ pub struct Options {
/// allow_dangerous_protocol: true,
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p><a href=\"javascript:alert(1)\">javascript:alert(1)</a></p>"
/// );
+ /// # Ok(())
+ /// # }
/// ```
pub allow_dangerous_protocol: bool,
@@ -463,6 +469,7 @@ pub struct Options {
///
/// ```
/// use micromark::{micromark, micromark_with_options, Options, Constructs};
+ /// # fn main() -> Result<(), String> {
///
/// // micromark follows CommonMark by default:
/// assert_eq!(
@@ -481,9 +488,11 @@ pub struct Options {
/// },
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p>indented code?</p>"
/// );
+ /// # Ok(())
+ /// # }
/// ```
pub constructs: Constructs,
@@ -503,6 +512,7 @@ pub struct Options {
///
/// ```
/// use micromark::{micromark, micromark_with_options, Options, LineEnding};
+ /// # fn main() -> Result<(), String> {
///
/// // micromark uses `\n` by default:
/// assert_eq!(
@@ -518,9 +528,11 @@ pub struct Options {
/// default_line_ending: LineEnding::CarriageReturnLineFeed,
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<blockquote>\r\n<p>a</p>\r\n</blockquote>"
/// );
+ /// # Ok(())
+ /// # }
/// ```
pub default_line_ending: LineEnding,
@@ -534,6 +546,7 @@ pub struct Options {
///
/// ```
/// use micromark::{micromark, micromark_with_options, Options, Constructs};
+ /// # fn main() -> Result<(), String> {
///
/// // `"Footnotes"` is used by default:
/// assert_eq!(
@@ -543,7 +556,7 @@ pub struct Options {
/// constructs: Constructs::gfm(),
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p><sup><a href=\"#user-content-fn-a\" id=\"user-content-fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>\n<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>\n<ol>\n<li id=\"user-content-fn-a\">\n<p>b <a href=\"#user-content-fnref-a\" data-footnote-backref=\"\" class=\"data-footnote-backref\" aria-label=\"Back to content\">↩</a></p>\n</li>\n</ol>\n</section>\n"
/// );
///
@@ -556,9 +569,11 @@ pub struct Options {
/// gfm_footnote_label: Some("Notes de bas de page".to_string()),
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p><sup><a href=\"#user-content-fn-a\" id=\"user-content-fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>\n<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Notes de bas de page</h2>\n<ol>\n<li id=\"user-content-fn-a\">\n<p>b <a href=\"#user-content-fnref-a\" data-footnote-backref=\"\" class=\"data-footnote-backref\" aria-label=\"Back to content\">↩</a></p>\n</li>\n</ol>\n</section>\n"
/// );
+ /// # Ok(())
+ /// # }
/// ```
pub gfm_footnote_label: Option<String>,
@@ -570,6 +585,7 @@ pub struct Options {
///
/// ```
/// use micromark::{micromark, micromark_with_options, Options, Constructs};
+ /// # fn main() -> Result<(), String> {
///
/// // `"h2"` is used by default:
/// assert_eq!(
@@ -579,7 +595,7 @@ pub struct Options {
/// constructs: Constructs::gfm(),
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p><sup><a href=\"#user-content-fn-a\" id=\"user-content-fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>\n<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>\n<ol>\n<li id=\"user-content-fn-a\">\n<p>b <a href=\"#user-content-fnref-a\" data-footnote-backref=\"\" class=\"data-footnote-backref\" aria-label=\"Back to content\">↩</a></p>\n</li>\n</ol>\n</section>\n"
/// );
///
@@ -592,9 +608,11 @@ pub struct Options {
/// gfm_footnote_label_tag_name: Some("h1".to_string()),
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p><sup><a href=\"#user-content-fn-a\" id=\"user-content-fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>\n<section data-footnotes=\"\" class=\"footnotes\"><h1 id=\"footnote-label\" class=\"sr-only\">Footnotes</h1>\n<ol>\n<li id=\"user-content-fn-a\">\n<p>b <a href=\"#user-content-fnref-a\" data-footnote-backref=\"\" class=\"data-footnote-backref\" aria-label=\"Back to content\">↩</a></p>\n</li>\n</ol>\n</section>\n"
/// );
+ /// # Ok(())
+ /// # }
/// ```
pub gfm_footnote_label_tag_name: Option<String>,
@@ -612,6 +630,7 @@ pub struct Options {
///
/// ```
/// use micromark::{micromark, micromark_with_options, Options, Constructs};
+ /// # fn main() -> Result<(), String> {
///
/// // `"class=\"sr-only\""` is used by default:
/// assert_eq!(
@@ -621,7 +640,7 @@ pub struct Options {
/// constructs: Constructs::gfm(),
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p><sup><a href=\"#user-content-fn-a\" id=\"user-content-fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>\n<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>\n<ol>\n<li id=\"user-content-fn-a\">\n<p>b <a href=\"#user-content-fnref-a\" data-footnote-backref=\"\" class=\"data-footnote-backref\" aria-label=\"Back to content\">↩</a></p>\n</li>\n</ol>\n</section>\n"
/// );
///
@@ -634,9 +653,11 @@ pub struct Options {
/// gfm_footnote_label_attributes: Some("class=\"footnote-heading\"".to_string()),
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p><sup><a href=\"#user-content-fn-a\" id=\"user-content-fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>\n<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"footnote-heading\">Footnotes</h2>\n<ol>\n<li id=\"user-content-fn-a\">\n<p>b <a href=\"#user-content-fnref-a\" data-footnote-backref=\"\" class=\"data-footnote-backref\" aria-label=\"Back to content\">↩</a></p>\n</li>\n</ol>\n</section>\n"
/// );
+ /// # Ok(())
+ /// # }
/// ```
pub gfm_footnote_label_attributes: Option<String>,
@@ -649,6 +670,7 @@ pub struct Options {
///
/// ```
/// use micromark::{micromark, micromark_with_options, Options, Constructs};
+ /// # fn main() -> Result<(), String> {
///
/// // `"Back to content"` is used by default:
/// assert_eq!(
@@ -658,7 +680,7 @@ pub struct Options {
/// constructs: Constructs::gfm(),
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p><sup><a href=\"#user-content-fn-a\" id=\"user-content-fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>\n<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>\n<ol>\n<li id=\"user-content-fn-a\">\n<p>b <a href=\"#user-content-fnref-a\" data-footnote-backref=\"\" class=\"data-footnote-backref\" aria-label=\"Back to content\">↩</a></p>\n</li>\n</ol>\n</section>\n"
/// );
///
@@ -671,9 +693,11 @@ pub struct Options {
/// gfm_footnote_back_label: Some("Arrière".to_string()),
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p><sup><a href=\"#user-content-fn-a\" id=\"user-content-fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>\n<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>\n<ol>\n<li id=\"user-content-fn-a\">\n<p>b <a href=\"#user-content-fnref-a\" data-footnote-backref=\"\" class=\"data-footnote-backref\" aria-label=\"Arrière\">↩</a></p>\n</li>\n</ol>\n</section>\n"
/// );
+ /// # Ok(())
+ /// # }
/// ```
pub gfm_footnote_back_label: Option<String>,
@@ -696,6 +720,7 @@ pub struct Options {
///
/// ```
/// use micromark::{micromark, micromark_with_options, Options, Constructs};
+ /// # fn main() -> Result<(), String> {
///
/// // `"user-content-"` is used by default:
/// assert_eq!(
@@ -705,7 +730,7 @@ pub struct Options {
/// constructs: Constructs::gfm(),
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p><sup><a href=\"#user-content-fn-a\" id=\"user-content-fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>\n<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>\n<ol>\n<li id=\"user-content-fn-a\">\n<p>b <a href=\"#user-content-fnref-a\" data-footnote-backref=\"\" class=\"data-footnote-backref\" aria-label=\"Back to content\">↩</a></p>\n</li>\n</ol>\n</section>\n"
/// );
///
@@ -718,9 +743,11 @@ pub struct Options {
/// gfm_footnote_clobber_prefix: Some("".to_string()),
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p><sup><a href=\"#fn-a\" id=\"fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>\n<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>\n<ol>\n<li id=\"fn-a\">\n<p>b <a href=\"#fnref-a\" data-footnote-backref=\"\" class=\"data-footnote-backref\" aria-label=\"Back to content\">↩</a></p>\n</li>\n</ol>\n</section>\n"
/// );
+ /// # Ok(())
+ /// # }
/// ```
pub gfm_footnote_clobber_prefix: Option<String>,
@@ -733,6 +760,7 @@ pub struct Options {
///
/// ```
/// use micromark::{micromark, micromark_with_options, Options, Constructs};
+ /// # fn main() -> Result<(), String> {
///
/// // micromark supports single tildes by default:
/// assert_eq!(
@@ -742,7 +770,7 @@ pub struct Options {
/// constructs: Constructs::gfm(),
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p><del>a</del></p>"
/// );
///
@@ -755,9 +783,11 @@ pub struct Options {
/// gfm_strikethrough_single_tilde: false,
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p>~a~</p>"
/// );
+ /// # Ok(())
+ /// # }
/// ```
pub gfm_strikethrough_single_tilde: bool,
@@ -772,6 +802,7 @@ pub struct Options {
///
/// ```
/// use micromark::{micromark_with_options, Options, Constructs};
+ /// # fn main() -> Result<(), String> {
///
/// // With `allow_dangerous_html`, micromark passes HTML through untouched:
/// assert_eq!(
@@ -782,7 +813,7 @@ pub struct Options {
/// constructs: Constructs::gfm(),
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<iframe>"
/// );
///
@@ -796,9 +827,11 @@ pub struct Options {
/// gfm_tagfilter: true,
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "&lt;iframe>"
/// );
+ /// # Ok(())
+ /// # }
/// ```
///
/// ## References
@@ -817,6 +850,7 @@ pub struct Options {
///
/// ```
/// use micromark::{micromark, micromark_with_options, Options, Constructs};
+ /// # fn main() -> Result<(), String> {
///
/// // micromark supports single dollars by default:
/// assert_eq!(
@@ -829,7 +863,7 @@ pub struct Options {
/// },
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p><code class=\"language-math math-inline\">a</code></p>"
/// );
///
@@ -845,9 +879,11 @@ pub struct Options {
/// math_text_single_dollar: false,
/// ..Options::default()
/// }
- /// ),
+ /// )?,
/// "<p>$a$</p>"
/// );
+ /// # Ok(())
+ /// # }
/// ```
pub math_text_single_dollar: bool,
}
@@ -879,32 +915,41 @@ impl Default for Options {
/// ```
/// use micromark::micromark;
///
-/// let result = micromark("# Hello, world!");
-///
-/// assert_eq!(result, "<h1>Hello, world!</h1>");
+/// assert_eq!(micromark("# Hello, world!"), "<h1>Hello, world!</h1>");
/// ```
#[must_use]
+#[allow(clippy::missing_panics_doc)]
pub fn micromark(value: &str) -> String {
- micromark_with_options(value, &Options::default())
+ micromark_with_options(value, &Options::default()).unwrap()
}
/// Turn markdown into HTML, with configuration.
///
+/// ## Errors
+///
+/// `micromark_with_options` never errors with normal markdown because markdown
+/// does not have syntax errors, so feel free to `unwrap()`.
+/// However, MDX does have syntax errors.
+/// When MDX is turned on, there are several errors that can occur with how
+/// JSX, expressions, or ESM are written.
+///
/// ## Examples
///
/// ```
/// use micromark::{micromark_with_options, Options};
+/// # fn main() -> Result<(), String> {
///
/// let result = micromark_with_options("<div>\n\n# Hello, world!\n\n</div>", &Options {
/// allow_dangerous_html: true,
/// allow_dangerous_protocol: true,
/// ..Options::default()
-/// });
+/// })?;
///
/// assert_eq!(result, "<div>\n<h1>Hello, world!</h1>\n</div>");
+/// # Ok(())
+/// # }
/// ```
-#[must_use]
-pub fn micromark_with_options(value: &str, options: &Options) -> String {
- let (events, bytes) = parse(value, options);
- compile(&events, bytes, options)
+pub fn micromark_with_options(value: &str, options: &Options) -> Result<String, String> {
+ let (events, bytes) = parse(value, options)?;
+ Ok(compile(&events, bytes, options))
}
diff --git a/src/parser.rs b/src/parser.rs
index 62b3e03..3a7713a 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -26,7 +26,7 @@ pub struct ParseState<'a> {
/// Turn a string of markdown into events.
///
/// Passes the bytes back so the compiler can access the source.
-pub fn parse<'a>(value: &'a str, options: &'a Options) -> (Vec<Event>, &'a [u8]) {
+pub fn parse<'a>(value: &'a str, options: &'a Options) -> Result<(Vec<Event>, &'a [u8]), String> {
let mut parse_state = ParseState {
options,
bytes: value.as_bytes(),
@@ -49,7 +49,7 @@ pub fn parse<'a>(value: &'a str, options: &'a Options) -> (Vec<Event>, &'a [u8])
(parse_state.bytes.len(), 0),
State::Next(StateName::DocumentStart),
);
- tokenizer.flush(state, true);
+ tokenizer.flush(state, true)?;
let mut events = tokenizer.events;
@@ -58,7 +58,7 @@ pub fn parse<'a>(value: &'a str, options: &'a Options) -> (Vec<Event>, &'a [u8])
parse_state.gfm_footnote_definitions = footnote;
parse_state.definitions = normal;
- while !subtokenize(&mut events, &parse_state) {}
+ while !(subtokenize(&mut events, &parse_state)?) {}
- (events, parse_state.bytes)
+ Ok((events, parse_state.bytes))
}
diff --git a/src/state.rs b/src/state.rs
index 3294a2f..e8bd17a 100644
--- a/src/state.rs
+++ b/src/state.rs
@@ -2,10 +2,15 @@
use crate::construct;
use crate::tokenizer::Tokenizer;
+use alloc::string::{String, ToString};
/// Result of a state.
-#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+#[derive(Clone, Debug, Eq, PartialEq)]
pub enum State {
+ /// Syntax error.
+ ///
+ /// Only used by MDX.
+ Error(String),
/// Move to [`Name`][] next.
Next(Name),
/// Retry in [`Name`][].
@@ -16,6 +21,24 @@ pub enum State {
Nok,
}
+impl State {
+ /// Turn a final state into a result.
+ ///
+ /// This doesn’t work on future states ([`State::Next`], [`State::Retry`]),
+ /// or on an attempt ([`State::Nok`]).
+ ///
+ /// But it turns the final result into an error if crashed.
+ pub fn to_result(&self) -> Result<(), String> {
+ match self {
+ State::Nok | State::Next(_) | State::Retry(_) => {
+ unreachable!("cannot turn intermediate state into result")
+ }
+ State::Ok => Ok(()),
+ State::Error(x) => Err(x.to_string()),
+ }
+ }
+}
+
/// Names of states to move to.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[allow(clippy::enum_variant_names)]
diff --git a/src/subtokenize.rs b/src/subtokenize.rs
index 7fcc481..12f91cf 100644
--- a/src/subtokenize.rs
+++ b/src/subtokenize.rs
@@ -22,7 +22,7 @@ use crate::parser::ParseState;
use crate::state::{Name as StateName, State};
use crate::tokenizer::Tokenizer;
use crate::util::{edit_map::EditMap, skip};
-use alloc::{vec, vec::Vec};
+use alloc::{string::String, vec, vec::Vec};
/// Link two [`Event`][]s.
///
@@ -69,7 +69,7 @@ pub fn link_to(events: &mut [Event], previous: usize, next: usize) {
/// Parse linked events.
///
/// Supposed to be called repeatedly, returns `true` when done.
-pub fn subtokenize(events: &mut Vec<Event>, parse_state: &ParseState) -> bool {
+pub fn subtokenize(events: &mut Vec<Event>, parse_state: &ParseState) -> Result<bool, String> {
let mut map = EditMap::new();
let mut done = true;
let mut index = 0;
@@ -143,7 +143,7 @@ pub fn subtokenize(events: &mut Vec<Event>, parse_state: &ParseState) -> bool {
link_index = link_curr.next;
}
- tokenizer.flush(state, true);
+ tokenizer.flush(state, true)?;
divide_events(&mut map, events, index, &mut tokenizer.events);
@@ -156,7 +156,7 @@ pub fn subtokenize(events: &mut Vec<Event>, parse_state: &ParseState) -> bool {
map.consume(events);
- done
+ Ok(done)
}
/// Divide `child_events` over links in `events`, the first of which is at
diff --git a/src/tokenizer.rs b/src/tokenizer.rs
index 8843e47..7dbd158 100644
--- a/src/tokenizer.rs
+++ b/src/tokenizer.rs
@@ -616,11 +616,12 @@ impl<'a> Tokenizer<'a> {
}
/// Flush.
- pub fn flush(&mut self, state: State, resolve: bool) {
+ pub fn flush(&mut self, state: State, resolve: bool) -> Result<(), String> {
let to = (self.point.index, self.point.vs);
- push_impl(self, to, to, state, true);
+ let state = push_impl(self, to, to, state, true);
+ let result = state.to_result();
- if resolve {
+ if resolve && result.is_ok() {
let resolvers = self.resolvers.split_off(0);
let mut index = 0;
while index < resolvers.len() {
@@ -630,6 +631,8 @@ impl<'a> Tokenizer<'a> {
self.map.consume(&mut self.events);
}
+
+ result
}
}
@@ -678,6 +681,7 @@ fn push_impl(
loop {
match state {
+ State::Error(_) => break,
State::Ok | State::Nok => {
if let Some(attempt) = tokenizer.attempts.pop() {
if attempt.kind == AttemptKind::Check || state == State::Nok {
@@ -743,9 +747,12 @@ fn push_impl(
tokenizer.consumed = true;
if flush {
- debug_assert!(matches!(state, State::Ok), "must be ok");
+ debug_assert!(matches!(state, State::Ok | State::Error(_)), "must be ok");
} else {
- debug_assert!(matches!(state, State::Next(_)), "must have a next state");
+ debug_assert!(
+ matches!(state, State::Next(_) | State::Error(_)),
+ "must have a next state"
+ );
}
state
diff --git a/tests/attention.rs b/tests/attention.rs
index c7d7454..93c3a50 100644
--- a/tests/attention.rs
+++ b/tests/attention.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn attention() {
+fn attention() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
allow_dangerous_protocol: true,
@@ -765,25 +765,25 @@ fn attention() {
);
assert_eq!(
- micromark_with_options("*<img src=\"foo\" title=\"*\"/>", &danger),
+ micromark_with_options("*<img src=\"foo\" title=\"*\"/>", &danger)?,
"<p>*<img src=\"foo\" title=\"*\"/></p>",
"should not end inside HTML"
);
assert_eq!(
- micromark_with_options("*<img src=\"foo\" title=\"*\"/>", &danger),
+ micromark_with_options("*<img src=\"foo\" title=\"*\"/>", &danger)?,
"<p>*<img src=\"foo\" title=\"*\"/></p>",
"should not end emphasis inside HTML"
);
assert_eq!(
- micromark_with_options("**<a href=\"**\">", &danger),
+ micromark_with_options("**<a href=\"**\">", &danger)?,
"<p>**<a href=\"**\"></p>",
"should not end strong inside HTML (1)"
);
assert_eq!(
- micromark_with_options("__<a href=\"__\">", &danger),
+ micromark_with_options("__<a href=\"__\">", &danger)?,
"<p>__<a href=\"__\"></p>",
"should not end strong inside HTML (2)"
);
@@ -822,8 +822,10 @@ fn attention() {
},
..Options::default()
}
- ),
+ )?,
"<p>*a*</p>",
"should support turning off attention"
);
+
+ Ok(())
}
diff --git a/tests/autolink.rs b/tests/autolink.rs
index b851583..4cf357a 100644
--- a/tests/autolink.rs
+++ b/tests/autolink.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn autolink() {
+fn autolink() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
allow_dangerous_protocol: true,
@@ -41,7 +41,7 @@ fn autolink() {
);
assert_eq!(
- micromark_with_options("<a+b+c:d>", &danger),
+ micromark_with_options("<a+b+c:d>", &danger)?,
"<p><a href=\"a+b+c:d\">a+b+c:d</a></p>",
"should support protocol autolinks w/ incorrect URIs (1, danger)"
);
@@ -53,7 +53,7 @@ fn autolink() {
);
assert_eq!(
- micromark_with_options("<made-up-scheme://foo,bar>", &danger),
+ micromark_with_options("<made-up-scheme://foo,bar>", &danger)?,
"<p><a href=\"made-up-scheme://foo,bar\">made-up-scheme://foo,bar</a></p>",
"should support protocol autolinks w/ incorrect URIs (2, danger)"
);
@@ -65,7 +65,7 @@ fn autolink() {
);
assert_eq!(
- micromark_with_options("<localhost:5001/foo>", &danger),
+ micromark_with_options("<localhost:5001/foo>", &danger)?,
"<p><a href=\"localhost:5001/foo\">localhost:5001/foo</a></p>",
"should support protocol autolinks w/ incorrect URIs (4)"
);
@@ -182,12 +182,11 @@ fn autolink() {
);
assert_eq!(
- micromark(
- "<asd@012345678901234567890123456789012345678901234567890123456789012>"
- ),
- "<p><a href=\"mailto:asd@012345678901234567890123456789012345678901234567890123456789012\">asd@012345678901234567890123456789012345678901234567890123456789012</a></p>",
- "should support 63 character in email autolinks domains"
- );
+ micromark(
+ "<asd@012345678901234567890123456789012345678901234567890123456789012>"),
+ "<p><a href=\"mailto:asd@012345678901234567890123456789012345678901234567890123456789012\">asd@012345678901234567890123456789012345678901234567890123456789012</a></p>",
+ "should support 63 character in email autolinks domains"
+ );
assert_eq!(
micromark("<asd@0123456789012345678901234567890123456789012345678901234567890123>"),
@@ -196,12 +195,11 @@ fn autolink() {
);
assert_eq!(
- micromark(
- "<asd@012345678901234567890123456789012345678901234567890123456789012.a>"
- ),
- "<p><a href=\"mailto:asd@012345678901234567890123456789012345678901234567890123456789012.a\">asd@012345678901234567890123456789012345678901234567890123456789012.a</a></p>",
- "should support a TLD after a 63 character domain in email autolinks"
- );
+ micromark(
+ "<asd@012345678901234567890123456789012345678901234567890123456789012.a>"),
+ "<p><a href=\"mailto:asd@012345678901234567890123456789012345678901234567890123456789012.a\">asd@012345678901234567890123456789012345678901234567890123456789012.a</a></p>",
+ "should support a TLD after a 63 character domain in email autolinks"
+ );
assert_eq!(
micromark("<asd@0123456789012345678901234567890123456789012345678901234567890123.a>"),
@@ -210,12 +208,11 @@ fn autolink() {
);
assert_eq!(
- micromark(
- "<asd@a.012345678901234567890123456789012345678901234567890123456789012>"
- ),
- "<p><a href=\"mailto:asd@a.012345678901234567890123456789012345678901234567890123456789012\">asd@a.012345678901234567890123456789012345678901234567890123456789012</a></p>",
- "should support a 63 character TLD in email autolinks"
- );
+ micromark(
+ "<asd@a.012345678901234567890123456789012345678901234567890123456789012>"),
+ "<p><a href=\"mailto:asd@a.012345678901234567890123456789012345678901234567890123456789012\">asd@a.012345678901234567890123456789012345678901234567890123456789012</a></p>",
+ "should support a 63 character TLD in email autolinks"
+ );
assert_eq!(
micromark("<asd@a.0123456789012345678901234567890123456789012345678901234567890123>"),
@@ -257,8 +254,10 @@ fn autolink() {
},
..Options::default()
}
- ),
+ )?,
"<p>&lt;a@b.co&gt;</p>",
"should support turning off autolinks"
);
+
+ Ok(())
}
diff --git a/tests/block_quote.rs b/tests/block_quote.rs
index be9da40..6947ef3 100644
--- a/tests/block_quote.rs
+++ b/tests/block_quote.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn block_quote() {
+fn block_quote() -> Result<(), String> {
assert_eq!(
micromark("> # a\n> b\n> c"),
"<blockquote>\n<h1>a</h1>\n<p>b\nc</p>\n</blockquote>",
@@ -206,8 +206,10 @@ fn block_quote() {
},
..Options::default()
}
- ),
+ )?,
"<p>&gt; # a\n&gt; b\n&gt; c</p>",
"should support turning off block quotes"
);
+
+ Ok(())
}
diff --git a/tests/character_escape.rs b/tests/character_escape.rs
index 2ecaa5f..e76e3e9 100644
--- a/tests/character_escape.rs
+++ b/tests/character_escape.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn character_escape() {
+fn character_escape() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
allow_dangerous_protocol: true,
@@ -12,8 +12,7 @@ fn character_escape() {
assert_eq!(
micromark(
- "\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\-\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\\\\\]\\^\\_\\`\\{\\|\\}\\~"
- ),
+ "\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\-\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\\\\\]\\^\\_\\`\\{\\|\\}\\~"),
"<p>!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\\]^_`{|}~</p>",
"should support escaped ascii punctuation"
);
@@ -26,8 +25,7 @@ fn character_escape() {
assert_eq!(
micromark(
- "\\*not emphasized*\n\\<br/> not a tag\n\\[not a link](/foo)\n\\`not code`\n1\\. not a list\n\\* not a list\n\\# not a heading\n\\[foo]: /url \"not a reference\"\n\\&ouml; not a character entity"
- ),
+ "\\*not emphasized*\n\\<br/> not a tag\n\\[not a link](/foo)\n\\`not code`\n1\\. not a list\n\\* not a list\n\\# not a heading\n\\[foo]: /url \"not a reference\"\n\\&ouml; not a character entity"),
"<p>*not emphasized*\n&lt;br/&gt; not a tag\n[not a link](/foo)\n`not code`\n1. not a list\n* not a list\n# not a heading\n[foo]: /url &quot;not a reference&quot;\n&amp;ouml; not a character entity</p>",
"should escape other constructs"
);
@@ -57,7 +55,7 @@ fn character_escape() {
);
assert_eq!(
- micromark_with_options("<a href=\"/bar\\/)\">", &danger),
+ micromark_with_options("<a href=\"/bar\\/)\">", &danger)?,
"<a href=\"/bar\\/)\">",
"should not escape in flow html"
);
@@ -90,8 +88,10 @@ fn character_escape() {
},
..Options::default()
}
- ),
+ )?,
"<p>\\&gt; a</p>",
"should support turning off character escapes"
);
+
+ Ok(())
}
diff --git a/tests/character_reference.rs b/tests/character_reference.rs
index c388514..a08c3f9 100644
--- a/tests/character_reference.rs
+++ b/tests/character_reference.rs
@@ -3,11 +3,10 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn character_reference() {
+fn character_reference() -> Result<(), String> {
assert_eq!(
micromark(
- "&nbsp; &amp; &copy; &AElig; &Dcaron;\n&frac34; &HilbertSpace; &DifferentialD;\n&ClockwiseContourIntegral; &ngE;"
- ),
+ "&nbsp; &amp; &copy; &AElig; &Dcaron;\n&frac34; &HilbertSpace; &DifferentialD;\n&ClockwiseContourIntegral; &ngE;"),
"<p>\u{a0} &amp; © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸</p>",
"should support named character references"
);
@@ -26,8 +25,7 @@ fn character_reference() {
assert_eq!(
micromark(
- "&nbsp &x; &#; &#x;\n&#987654321;\n&#abcdef0;\n&ThisIsNotDefined; &hi?;"
- ),
+ "&nbsp &x; &#; &#x;\n&#987654321;\n&#abcdef0;\n&ThisIsNotDefined; &hi?;"),
"<p>&amp;nbsp &amp;x; &amp;#; &amp;#x;\n&amp;#987654321;\n&amp;#abcdef0;\n&amp;ThisIsNotDefined; &amp;hi?;</p>",
"should not support other things that look like character references"
);
@@ -51,7 +49,7 @@ fn character_reference() {
allow_dangerous_html: true,
..Options::default()
}
- ),
+ )?,
"<a href=\"&ouml;&ouml;.html\">",
"should not care about character references in html"
);
@@ -199,8 +197,10 @@ fn character_reference() {
},
..Options::default()
}
- ),
+ )?,
"<p>&amp;amp;</p>",
"should support turning off character references"
);
+
+ Ok(())
}
diff --git a/tests/code_fenced.rs b/tests/code_fenced.rs
index fd35eb8..850bd1b 100644
--- a/tests/code_fenced.rs
+++ b/tests/code_fenced.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn code_fenced() {
+fn code_fenced() -> Result<(), String> {
assert_eq!(
micromark("```\n<\n >\n```"),
"<pre><code>&lt;\n &gt;\n</code></pre>",
@@ -267,8 +267,10 @@ fn code_fenced() {
},
..Options::default()
}
- ),
+ )?,
"<p>```</p>",
"should support turning off code (fenced)"
);
+
+ Ok(())
}
diff --git a/tests/code_indented.rs b/tests/code_indented.rs
index cd27953..29d8909 100644
--- a/tests/code_indented.rs
+++ b/tests/code_indented.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn code_indented() {
+fn code_indented() -> Result<(), String> {
assert_eq!(
micromark(" a simple\n indented code block"),
"<pre><code>a simple\n indented code block\n</code></pre>",
@@ -127,37 +127,37 @@ fn code_indented() {
};
assert_eq!(
- micromark_with_options(" a", &off),
+ micromark_with_options(" a", &off)?,
"<p>a</p>",
"should support turning off code (indented, 1)"
);
assert_eq!(
- micromark_with_options("> a\n b", &off),
+ micromark_with_options("> a\n b", &off)?,
"<blockquote>\n<p>a\nb</p>\n</blockquote>",
"should support turning off code (indented, 2)"
);
assert_eq!(
- micromark_with_options("- a\n b", &off),
+ micromark_with_options("- a\n b", &off)?,
"<ul>\n<li>a\nb</li>\n</ul>",
"should support turning off code (indented, 3)"
);
assert_eq!(
- micromark_with_options("- a\n - b", &off),
+ micromark_with_options("- a\n - b", &off)?,
"<ul>\n<li>a\n<ul>\n<li>b</li>\n</ul>\n</li>\n</ul>",
"should support turning off code (indented, 4)"
);
assert_eq!(
- micromark_with_options("- a\n - b", &off),
+ micromark_with_options("- a\n - b", &off)?,
"<ul>\n<li>a\n<ul>\n<li>b</li>\n</ul>\n</li>\n</ul>",
"should support turning off code (indented, 5)"
);
assert_eq!(
- micromark_with_options("```\na\n ```", &off),
+ micromark_with_options("```\na\n ```", &off)?,
"<pre><code>a\n</code></pre>",
"should support turning off code (indented, 6)"
);
@@ -169,20 +169,22 @@ fn code_indented() {
allow_dangerous_html: true,
..off.clone()
}
- ),
+ )?,
"<p>a <?\n?></p>",
"should support turning off code (indented, 7)"
);
assert_eq!(
- micromark_with_options("- Foo\n---", &off),
+ micromark_with_options("- Foo\n---", &off)?,
"<ul>\n<li>Foo</li>\n</ul>\n<hr />",
"should support turning off code (indented, 8)"
);
assert_eq!(
- micromark_with_options("- Foo\n ---", &off),
+ micromark_with_options("- Foo\n ---", &off)?,
"<ul>\n<li>\n<h2>Foo</h2>\n</li>\n</ul>",
"should support turning off code (indented, 9)"
);
+
+ Ok(())
}
diff --git a/tests/code_text.rs b/tests/code_text.rs
index 5199e7e..a0ed13e 100644
--- a/tests/code_text.rs
+++ b/tests/code_text.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn code_text() {
+fn code_text() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
allow_dangerous_protocol: true,
@@ -107,7 +107,7 @@ fn code_text() {
);
assert_eq!(
- micromark_with_options("<a href=\"`\">`", &danger),
+ micromark_with_options("<a href=\"`\">`", &danger)?,
"<p><a href=\"`\">`</p>",
"should have same precedence as HTML (2)"
);
@@ -165,8 +165,10 @@ fn code_text() {
},
..Options::default()
}
- ),
+ )?,
"<p>`a`</p>",
"should support turning off code (text)"
);
+
+ Ok(())
}
diff --git a/tests/commonmark.rs b/tests/commonmark.rs
index 889bbf3..b5bb40e 100644
--- a/tests/commonmark.rs
+++ b/tests/commonmark.rs
@@ -9,7 +9,7 @@ use pretty_assertions::assert_eq;
#[rustfmt::skip]
#[test]
-fn commonmark() {
+fn commonmark() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
allow_dangerous_protocol: true,
@@ -21,7 +21,7 @@ fn commonmark() {
r###" foo baz bim
"###,
&danger
- ),
+ )?,
r###"<pre><code>foo baz bim
</code></pre>
"###,
@@ -33,7 +33,7 @@ fn commonmark() {
r###" foo baz bim
"###,
&danger
- ),
+ )?,
r###"<pre><code>foo baz bim
</code></pre>
"###,
@@ -46,7 +46,7 @@ fn commonmark() {
ὐ a
"###,
&danger
- ),
+ )?,
r###"<pre><code>a a
ὐ a
</code></pre>
@@ -61,7 +61,7 @@ fn commonmark() {
bar
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>foo</p>
@@ -79,7 +79,7 @@ fn commonmark() {
bar
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>foo</p>
@@ -96,7 +96,7 @@ fn commonmark() {
r###"> foo
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<pre><code> foo
</code></pre>
@@ -110,7 +110,7 @@ fn commonmark() {
r###"- foo
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<pre><code> foo
@@ -127,7 +127,7 @@ fn commonmark() {
bar
"###,
&danger
- ),
+ )?,
r###"<pre><code>foo
bar
</code></pre>
@@ -142,7 +142,7 @@ bar
- baz
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>foo
<ul>
@@ -163,7 +163,7 @@ bar
r###"# Foo
"###,
&danger
- ),
+ )?,
r###"<h1>Foo</h1>
"###,
r###"Tabs (10)"###
@@ -174,7 +174,7 @@ bar
r###"* * *
"###,
&danger
- ),
+ )?,
r###"<hr />
"###,
r###"Tabs (11)"###
@@ -185,7 +185,7 @@ bar
r###"\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~
"###,
&danger
- ),
+ )?,
r###"<p>!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^_`{|}~</p>
"###,
r###"Backslash escapes (12)"###
@@ -196,7 +196,7 @@ bar
r###"\ \A\a\ \3\φ\«
"###,
&danger
- ),
+ )?,
r###"<p>\ \A\a\ \3\φ\«</p>
"###,
r###"Backslash escapes (13)"###
@@ -215,7 +215,7 @@ bar
\&ouml; not a character entity
"###,
&danger
- ),
+ )?,
r###"<p>*not emphasized*
&lt;br/&gt; not a tag
[not a link](/foo)
@@ -234,7 +234,7 @@ bar
r###"\\*emphasis*
"###,
&danger
- ),
+ )?,
r###"<p>\<em>emphasis</em></p>
"###,
r###"Backslash escapes (15)"###
@@ -246,7 +246,7 @@ bar
bar
"###,
&danger
- ),
+ )?,
r###"<p>foo<br />
bar</p>
"###,
@@ -258,7 +258,7 @@ bar</p>
r###"`` \[\` ``
"###,
&danger
- ),
+ )?,
r###"<p><code>\[\`</code></p>
"###,
r###"Backslash escapes (17)"###
@@ -269,7 +269,7 @@ bar</p>
r###" \[\]
"###,
&danger
- ),
+ )?,
r###"<pre><code>\[\]
</code></pre>
"###,
@@ -283,7 +283,7 @@ bar</p>
~~~
"###,
&danger
- ),
+ )?,
r###"<pre><code>\[\]
</code></pre>
"###,
@@ -295,7 +295,7 @@ bar</p>
r###"<http://example.com?find=\*>
"###,
&danger
- ),
+ )?,
r###"<p><a href="http://example.com?find=%5C*">http://example.com?find=\*</a></p>
"###,
r###"Backslash escapes (20)"###
@@ -306,7 +306,7 @@ bar</p>
r###"<a href="/bar\/)">
"###,
&danger
- ),
+ )?,
r###"<a href="/bar\/)">
"###,
r###"Backslash escapes (21)"###
@@ -317,7 +317,7 @@ bar</p>
r###"[foo](/bar\* "ti\*tle")
"###,
&danger
- ),
+ )?,
r###"<p><a href="/bar*" title="ti*tle">foo</a></p>
"###,
r###"Backslash escapes (22)"###
@@ -330,7 +330,7 @@ bar</p>
[foo]: /bar\* "ti\*tle"
"###,
&danger
- ),
+ )?,
r###"<p><a href="/bar*" title="ti*tle">foo</a></p>
"###,
r###"Backslash escapes (23)"###
@@ -343,7 +343,7 @@ foo
```
"###,
&danger
- ),
+ )?,
r###"<pre><code class="language-foo+bar">foo
</code></pre>
"###,
@@ -357,7 +357,7 @@ foo
&ClockwiseContourIntegral; &ngE;
"###,
&danger
- ),
+ )?,
r###"<p>  &amp; © Æ Ď
¾ ℋ ⅆ
∲ ≧̸</p>
@@ -370,7 +370,7 @@ foo
r###"&#35; &#1234; &#992; &#0;
"###,
&danger
- ),
+ )?,
r###"<p># Ӓ Ϡ �</p>
"###,
r###"Entity and numeric character references (26)"###
@@ -381,7 +381,7 @@ foo
r###"&#X22; &#XD06; &#xcab;
"###,
&danger
- ),
+ )?,
r###"<p>&quot; ആ ಫ</p>
"###,
r###"Entity and numeric character references (27)"###
@@ -395,7 +395,7 @@ foo
&ThisIsNotDefined; &hi?;
"###,
&danger
- ),
+ )?,
r###"<p>&amp;nbsp &amp;x; &amp;#; &amp;#x;
&amp;#87654321;
&amp;#abcdef0;
@@ -409,7 +409,7 @@ foo
r###"&copy
"###,
&danger
- ),
+ )?,
r###"<p>&amp;copy</p>
"###,
r###"Entity and numeric character references (29)"###
@@ -420,7 +420,7 @@ foo
r###"&MadeUpEntity;
"###,
&danger
- ),
+ )?,
r###"<p>&amp;MadeUpEntity;</p>
"###,
r###"Entity and numeric character references (30)"###
@@ -431,7 +431,7 @@ foo
r###"<a href="&ouml;&ouml;.html">
"###,
&danger
- ),
+ )?,
r###"<a href="&ouml;&ouml;.html">
"###,
r###"Entity and numeric character references (31)"###
@@ -442,7 +442,7 @@ foo
r###"[foo](/f&ouml;&ouml; "f&ouml;&ouml;")
"###,
&danger
- ),
+ )?,
r###"<p><a href="/f%C3%B6%C3%B6" title="föö">foo</a></p>
"###,
r###"Entity and numeric character references (32)"###
@@ -455,7 +455,7 @@ foo
[foo]: /f&ouml;&ouml; "f&ouml;&ouml;"
"###,
&danger
- ),
+ )?,
r###"<p><a href="/f%C3%B6%C3%B6" title="föö">foo</a></p>
"###,
r###"Entity and numeric character references (33)"###
@@ -468,7 +468,7 @@ foo
```
"###,
&danger
- ),
+ )?,
r###"<pre><code class="language-föö">foo
</code></pre>
"###,
@@ -480,7 +480,7 @@ foo
r###"`f&ouml;&ouml;`
"###,
&danger
- ),
+ )?,
r###"<p><code>f&amp;ouml;&amp;ouml;</code></p>
"###,
r###"Entity and numeric character references (35)"###
@@ -491,7 +491,7 @@ foo
r###" f&ouml;f&ouml;
"###,
&danger
- ),
+ )?,
r###"<pre><code>f&amp;ouml;f&amp;ouml;
</code></pre>
"###,
@@ -504,7 +504,7 @@ foo
*foo*
"###,
&danger
- ),
+ )?,
r###"<p>*foo*
<em>foo</em></p>
"###,
@@ -518,7 +518,7 @@ foo
* foo
"###,
&danger
- ),
+ )?,
r###"<p>* foo</p>
<ul>
<li>foo</li>
@@ -532,7 +532,7 @@ foo
r###"foo&#10;&#10;bar
"###,
&danger
- ),
+ )?,
r###"<p>foo
bar</p>
@@ -545,7 +545,7 @@ bar</p>
r###"&#9;foo
"###,
&danger
- ),
+ )?,
r###"<p> foo</p>
"###,
r###"Entity and numeric character references (40)"###
@@ -556,7 +556,7 @@ bar</p>
r###"[a](url &quot;tit&quot;)
"###,
&danger
- ),
+ )?,
r###"<p>[a](url &quot;tit&quot;)</p>
"###,
r###"Entity and numeric character references (41)"###
@@ -568,7 +568,7 @@ bar</p>
- two`
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>`one</li>
<li>two`</li>
@@ -584,7 +584,7 @@ bar</p>
___
"###,
&danger
- ),
+ )?,
r###"<hr />
<hr />
<hr />
@@ -597,7 +597,7 @@ ___
r###"+++
"###,
&danger
- ),
+ )?,
r###"<p>+++</p>
"###,
r###"Thematic breaks (44)"###
@@ -608,7 +608,7 @@ ___
r###"===
"###,
&danger
- ),
+ )?,
r###"<p>===</p>
"###,
r###"Thematic breaks (45)"###
@@ -621,7 +621,7 @@ ___
__
"###,
&danger
- ),
+ )?,
r###"<p>--
**
__</p>
@@ -636,7 +636,7 @@ __</p>
***
"###,
&danger
- ),
+ )?,
r###"<hr />
<hr />
<hr />
@@ -649,7 +649,7 @@ __</p>
r###" ***
"###,
&danger
- ),
+ )?,
r###"<pre><code>***
</code></pre>
"###,
@@ -662,7 +662,7 @@ __</p>
***
"###,
&danger
- ),
+ )?,
r###"<p>Foo
***</p>
"###,
@@ -674,7 +674,7 @@ __</p>
r###"_____________________________________
"###,
&danger
- ),
+ )?,
r###"<hr />
"###,
r###"Thematic breaks (50)"###
@@ -685,7 +685,7 @@ __</p>
r###" - - -
"###,
&danger
- ),
+ )?,
r###"<hr />
"###,
r###"Thematic breaks (51)"###
@@ -696,7 +696,7 @@ __</p>
r###" ** * ** * ** * **
"###,
&danger
- ),
+ )?,
r###"<hr />
"###,
r###"Thematic breaks (52)"###
@@ -707,7 +707,7 @@ __</p>
r###"- - - -
"###,
&danger
- ),
+ )?,
r###"<hr />
"###,
r###"Thematic breaks (53)"###
@@ -718,7 +718,7 @@ __</p>
r###"- - - -
"###,
&danger
- ),
+ )?,
r###"<hr />
"###,
r###"Thematic breaks (54)"###
@@ -733,7 +733,7 @@ a------
---a---
"###,
&danger
- ),
+ )?,
r###"<p>_ _ _ _ a</p>
<p>a------</p>
<p>---a---</p>
@@ -746,7 +746,7 @@ a------
r###" *-*
"###,
&danger
- ),
+ )?,
r###"<p><em>-</em></p>
"###,
r###"Thematic breaks (56)"###
@@ -759,7 +759,7 @@ a------
- bar
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>foo</li>
</ul>
@@ -778,7 +778,7 @@ a------
bar
"###,
&danger
- ),
+ )?,
r###"<p>Foo</p>
<hr />
<p>bar</p>
@@ -793,7 +793,7 @@ bar
bar
"###,
&danger
- ),
+ )?,
r###"<h2>Foo</h2>
<p>bar</p>
"###,
@@ -807,7 +807,7 @@ bar
* Bar
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>Foo</li>
</ul>
@@ -825,7 +825,7 @@ bar
- * * *
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>Foo</li>
<li>
@@ -846,7 +846,7 @@ bar
###### foo
"###,
&danger
- ),
+ )?,
r###"<h1>foo</h1>
<h2>foo</h2>
<h3>foo</h3>
@@ -862,7 +862,7 @@ bar
r###"####### foo
"###,
&danger
- ),
+ )?,
r###"<p>####### foo</p>
"###,
r###"ATX headings (63)"###
@@ -875,7 +875,7 @@ bar
#hashtag
"###,
&danger
- ),
+ )?,
r###"<p>#5 bolt</p>
<p>#hashtag</p>
"###,
@@ -887,7 +887,7 @@ bar
r###"\## foo
"###,
&danger
- ),
+ )?,
r###"<p>## foo</p>
"###,
r###"ATX headings (65)"###
@@ -898,7 +898,7 @@ bar
r###"# foo *bar* \*baz\*
"###,
&danger
- ),
+ )?,
r###"<h1>foo <em>bar</em> *baz*</h1>
"###,
r###"ATX headings (66)"###
@@ -909,7 +909,7 @@ bar
r###"# foo
"###,
&danger
- ),
+ )?,
r###"<h1>foo</h1>
"###,
r###"ATX headings (67)"###
@@ -922,7 +922,7 @@ bar
# foo
"###,
&danger
- ),
+ )?,
r###"<h3>foo</h3>
<h2>foo</h2>
<h1>foo</h1>
@@ -935,7 +935,7 @@ bar
r###" # foo
"###,
&danger
- ),
+ )?,
r###"<pre><code># foo
</code></pre>
"###,
@@ -948,7 +948,7 @@ bar
# bar
"###,
&danger
- ),
+ )?,
r###"<p>foo
# bar</p>
"###,
@@ -961,7 +961,7 @@ bar
### bar ###
"###,
&danger
- ),
+ )?,
r###"<h2>foo</h2>
<h3>bar</h3>
"###,
@@ -974,7 +974,7 @@ bar
##### foo ##
"###,
&danger
- ),
+ )?,
r###"<h1>foo</h1>
<h5>foo</h5>
"###,
@@ -986,7 +986,7 @@ bar
r###"### foo ###
"###,
&danger
- ),
+ )?,
r###"<h3>foo</h3>
"###,
r###"ATX headings (73)"###
@@ -997,7 +997,7 @@ bar
r###"### foo ### b
"###,
&danger
- ),
+ )?,
r###"<h3>foo ### b</h3>
"###,
r###"ATX headings (74)"###
@@ -1008,7 +1008,7 @@ bar
r###"# foo#
"###,
&danger
- ),
+ )?,
r###"<h1>foo#</h1>
"###,
r###"ATX headings (75)"###
@@ -1021,7 +1021,7 @@ bar
# foo \#
"###,
&danger
- ),
+ )?,
r###"<h3>foo ###</h3>
<h2>foo ###</h2>
<h1>foo #</h1>
@@ -1036,7 +1036,7 @@ bar
****
"###,
&danger
- ),
+ )?,
r###"<hr />
<h2>foo</h2>
<hr />
@@ -1051,7 +1051,7 @@ bar
Bar foo
"###,
&danger
- ),
+ )?,
r###"<p>Foo bar</p>
<h1>baz</h1>
<p>Bar foo</p>
@@ -1066,7 +1066,7 @@ Bar foo
### ###
"###,
&danger
- ),
+ )?,
r###"<h2></h2>
<h1></h1>
<h3></h3>
@@ -1083,7 +1083,7 @@ Foo *bar*
---------
"###,
&danger
- ),
+ )?,
r###"<h1>Foo <em>bar</em></h1>
<h2>Foo <em>bar</em></h2>
"###,
@@ -1097,7 +1097,7 @@ baz*
====
"###,
&danger
- ),
+ )?,
r###"<h1>Foo <em>bar
baz</em></h1>
"###,
@@ -1111,7 +1111,7 @@ baz*
====
"###,
&danger
- ),
+ )?,
r###"<h1>Foo <em>bar
baz</em></h1>
"###,
@@ -1127,7 +1127,7 @@ Foo
=
"###,
&danger
- ),
+ )?,
r###"<h2>Foo</h2>
<h1>Foo</h1>
"###,
@@ -1146,7 +1146,7 @@ Foo
===
"###,
&danger
- ),
+ )?,
r###"<h2>Foo</h2>
<h2>Foo</h2>
<h1>Foo</h1>
@@ -1163,7 +1163,7 @@ Foo
---
"###,
&danger
- ),
+ )?,
r###"<pre><code>Foo
---
@@ -1180,7 +1180,7 @@ Foo
----
"###,
&danger
- ),
+ )?,
r###"<h2>Foo</h2>
"###,
r###"Setext headings (86)"###
@@ -1192,7 +1192,7 @@ Foo
---
"###,
&danger
- ),
+ )?,
r###"<p>Foo
---</p>
"###,
@@ -1208,7 +1208,7 @@ Foo
--- -
"###,
&danger
- ),
+ )?,
r###"<p>Foo
= =</p>
<p>Foo</p>
@@ -1223,7 +1223,7 @@ Foo
-----
"###,
&danger
- ),
+ )?,
r###"<h2>Foo</h2>
"###,
r###"Setext headings (89)"###
@@ -1235,7 +1235,7 @@ Foo
----
"###,
&danger
- ),
+ )?,
r###"<h2>Foo\</h2>
"###,
r###"Setext headings (90)"###
@@ -1252,7 +1252,7 @@ Foo
of dashes"/>
"###,
&danger
- ),
+ )?,
r###"<h2>`Foo</h2>
<p>`</p>
<h2>&lt;a title=&quot;a lot</h2>
@@ -1267,7 +1267,7 @@ of dashes"/>
---
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>Foo</p>
</blockquote>
@@ -1283,7 +1283,7 @@ bar
===
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>foo
bar
@@ -1299,7 +1299,7 @@ bar
---
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>Foo</li>
</ul>
@@ -1315,7 +1315,7 @@ Bar
---
"###,
&danger
- ),
+ )?,
r###"<h2>Foo
Bar</h2>
"###,
@@ -1332,7 +1332,7 @@ Bar
Baz
"###,
&danger
- ),
+ )?,
r###"<hr />
<h2>Foo</h2>
<h2>Bar</h2>
@@ -1347,7 +1347,7 @@ Baz
====
"###,
&danger
- ),
+ )?,
r###"<p>====</p>
"###,
r###"Setext headings (97)"###
@@ -1359,7 +1359,7 @@ Baz
---
"###,
&danger
- ),
+ )?,
r###"<hr />
<hr />
"###,
@@ -1372,7 +1372,7 @@ Baz
-----
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>foo</li>
</ul>
@@ -1387,7 +1387,7 @@ Baz
---
"###,
&danger
- ),
+ )?,
r###"<pre><code>foo
</code></pre>
<hr />
@@ -1401,7 +1401,7 @@ Baz
-----
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>foo</p>
</blockquote>
@@ -1416,7 +1416,7 @@ Baz
------
"###,
&danger
- ),
+ )?,
r###"<h2>&gt; foo</h2>
"###,
r###"Setext headings (102)"###
@@ -1431,7 +1431,7 @@ bar
baz
"###,
&danger
- ),
+ )?,
r###"<p>Foo</p>
<h2>bar</h2>
<p>baz</p>
@@ -1449,7 +1449,7 @@ bar
baz
"###,
&danger
- ),
+ )?,
r###"<p>Foo
bar</p>
<hr />
@@ -1466,7 +1466,7 @@ bar
baz
"###,
&danger
- ),
+ )?,
r###"<p>Foo
bar</p>
<hr />
@@ -1483,7 +1483,7 @@ bar
baz
"###,
&danger
- ),
+ )?,
r###"<p>Foo
bar
---
@@ -1498,7 +1498,7 @@ baz</p>
indented code block
"###,
&danger
- ),
+ )?,
r###"<pre><code>a simple
indented code block
</code></pre>
@@ -1513,7 +1513,7 @@ baz</p>
bar
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>foo</p>
@@ -1531,7 +1531,7 @@ baz</p>
- bar
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>
<p>foo</p>
@@ -1552,7 +1552,7 @@ baz</p>
- one
"###,
&danger
- ),
+ )?,
r###"<pre><code>&lt;a/&gt;
*hi*
@@ -1573,7 +1573,7 @@ baz</p>
chunk3
"###,
&danger
- ),
+ )?,
r###"<pre><code>chunk1
chunk2
@@ -1593,7 +1593,7 @@ chunk3
chunk2
"###,
&danger
- ),
+ )?,
r###"<pre><code>chunk1
chunk2
@@ -1609,7 +1609,7 @@ chunk3
"###,
&danger
- ),
+ )?,
r###"<p>Foo
bar</p>
"###,
@@ -1622,7 +1622,7 @@ bar</p>
bar
"###,
&danger
- ),
+ )?,
r###"<pre><code>foo
</code></pre>
<p>bar</p>
@@ -1640,7 +1640,7 @@ Heading
----
"###,
&danger
- ),
+ )?,
r###"<h1>Heading</h1>
<pre><code>foo
</code></pre>
@@ -1658,7 +1658,7 @@ Heading
bar
"###,
&danger
- ),
+ )?,
r###"<pre><code> foo
bar
</code></pre>
@@ -1675,7 +1675,7 @@ bar
"###,
&danger
- ),
+ )?,
r###"<pre><code>foo
</code></pre>
"###,
@@ -1687,7 +1687,7 @@ bar
r###" foo
"###,
&danger
- ),
+ )?,
r###"<pre><code>foo
</code></pre>
"###,
@@ -1702,7 +1702,7 @@ bar
```
"###,
&danger
- ),
+ )?,
r###"<pre><code>&lt;
&gt;
</code></pre>
@@ -1718,7 +1718,7 @@ bar
~~~
"###,
&danger
- ),
+ )?,
r###"<pre><code>&lt;
&gt;
</code></pre>
@@ -1733,7 +1733,7 @@ foo
``
"###,
&danger
- ),
+ )?,
r###"<p><code>foo</code></p>
"###,
r###"Fenced code blocks (121)"###
@@ -1747,7 +1747,7 @@ aaa
```
"###,
&danger
- ),
+ )?,
r###"<pre><code>aaa
~~~
</code></pre>
@@ -1763,7 +1763,7 @@ aaa
~~~
"###,
&danger
- ),
+ )?,
r###"<pre><code>aaa
```
</code></pre>
@@ -1779,7 +1779,7 @@ aaa
``````
"###,
&danger
- ),
+ )?,
r###"<pre><code>aaa
```
</code></pre>
@@ -1795,7 +1795,7 @@ aaa
~~~~
"###,
&danger
- ),
+ )?,
r###"<pre><code>aaa
~~~
</code></pre>
@@ -1808,7 +1808,7 @@ aaa
r###"```
"###,
&danger
- ),
+ )?,
r###"<pre><code></code></pre>
"###,
r###"Fenced code blocks (126)"###
@@ -1822,7 +1822,7 @@ aaa
aaa
"###,
&danger
- ),
+ )?,
r###"<pre><code>
```
aaa
@@ -1839,7 +1839,7 @@ aaa
bbb
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<pre><code>aaa
</code></pre>
@@ -1857,7 +1857,7 @@ bbb
```
"###,
&danger
- ),
+ )?,
r###"<pre><code>
</code></pre>
@@ -1871,7 +1871,7 @@ bbb
```
"###,
&danger
- ),
+ )?,
r###"<pre><code></code></pre>
"###,
r###"Fenced code blocks (130)"###
@@ -1885,7 +1885,7 @@ aaa
```
"###,
&danger
- ),
+ )?,
r###"<pre><code>aaa
aaa
</code></pre>
@@ -1902,7 +1902,7 @@ aaa
```
"###,
&danger
- ),
+ )?,
r###"<pre><code>aaa
aaa
aaa
@@ -1920,7 +1920,7 @@ aaa
```
"###,
&danger
- ),
+ )?,
r###"<pre><code>aaa
aaa
aaa
@@ -1936,7 +1936,7 @@ aaa
```
"###,
&danger
- ),
+ )?,
r###"<pre><code>```
aaa
```
@@ -1952,7 +1952,7 @@ aaa
```
"###,
&danger
- ),
+ )?,
r###"<pre><code>aaa
</code></pre>
"###,
@@ -1966,7 +1966,7 @@ aaa
```
"###,
&danger
- ),
+ )?,
r###"<pre><code>aaa
</code></pre>
"###,
@@ -1980,7 +1980,7 @@ aaa
```
"###,
&danger
- ),
+ )?,
r###"<pre><code>aaa
```
</code></pre>
@@ -1994,7 +1994,7 @@ aaa
aaa
"###,
&danger
- ),
+ )?,
r###"<p><code> </code>
aaa</p>
"###,
@@ -2008,7 +2008,7 @@ aaa
~~~ ~~
"###,
&danger
- ),
+ )?,
r###"<pre><code>aaa
~~~ ~~
</code></pre>
@@ -2025,7 +2025,7 @@ bar
baz
"###,
&danger
- ),
+ )?,
r###"<p>foo</p>
<pre><code>bar
</code></pre>
@@ -2044,7 +2044,7 @@ bar
# baz
"###,
&danger
- ),
+ )?,
r###"<h2>foo</h2>
<pre><code>bar
</code></pre>
@@ -2062,7 +2062,7 @@ end
```
"###,
&danger
- ),
+ )?,
r###"<pre><code class="language-ruby">def foo(x)
return 3
end
@@ -2080,7 +2080,7 @@ end
~~~~~~~
"###,
&danger
- ),
+ )?,
r###"<pre><code class="language-ruby">def foo(x)
return 3
end
@@ -2095,7 +2095,7 @@ end
````
"###,
&danger
- ),
+ )?,
r###"<pre><code class="language-;"></code></pre>
"###,
r###"Fenced code blocks (144)"###
@@ -2107,7 +2107,7 @@ end
foo
"###,
&danger
- ),
+ )?,
r###"<p><code>aa</code>
foo</p>
"###,
@@ -2121,7 +2121,7 @@ foo
~~~
"###,
&danger
- ),
+ )?,
r###"<pre><code class="language-aa">foo
</code></pre>
"###,
@@ -2135,7 +2135,7 @@ foo
```
"###,
&danger
- ),
+ )?,
r###"<pre><code>``` aaa
</code></pre>
"###,
@@ -2153,7 +2153,7 @@ _world_.
</td></tr></table>
"###,
&danger
- ),
+ )?,
r###"<table><tr><td>
<pre>
**Hello**,
@@ -2177,7 +2177,7 @@ _world_.
okay.
"###,
&danger
- ),
+ )?,
r###"<table>
<tr>
<td>
@@ -2197,7 +2197,7 @@ okay.
<foo><a>
"###,
&danger
- ),
+ )?,
r###" <div>
*hello*
<foo><a>
@@ -2211,7 +2211,7 @@ okay.
*foo*
"###,
&danger
- ),
+ )?,
r###"</div>
*foo*
"###,
@@ -2227,7 +2227,7 @@ okay.
</DIV>
"###,
&danger
- ),
+ )?,
r###"<DIV CLASS="foo">
<p><em>Markdown</em></p>
</DIV>
@@ -2242,7 +2242,7 @@ okay.
</div>
"###,
&danger
- ),
+ )?,
r###"<div id="foo"
class="bar">
</div>
@@ -2257,7 +2257,7 @@ okay.
</div>
"###,
&danger
- ),
+ )?,
r###"<div id="foo" class="bar
baz">
</div>
@@ -2273,7 +2273,7 @@ okay.
*bar*
"###,
&danger
- ),
+ )?,
r###"<div>
*foo*
<p><em>bar</em></p>
@@ -2287,7 +2287,7 @@ okay.
*hi*
"###,
&danger
- ),
+ )?,
r###"<div id="foo"
*hi*
"###,
@@ -2300,7 +2300,7 @@ okay.
foo
"###,
&danger
- ),
+ )?,
r###"<div class
foo
"###,
@@ -2313,7 +2313,7 @@ foo
*foo*
"###,
&danger
- ),
+ )?,
r###"<div *???-&&&-<---
*foo*
"###,
@@ -2325,7 +2325,7 @@ foo
r###"<div><a href="bar">*foo*</a></div>
"###,
&danger
- ),
+ )?,
r###"<div><a href="bar">*foo*</a></div>
"###,
r###"HTML blocks (159)"###
@@ -2338,7 +2338,7 @@ foo
</td></tr></table>
"###,
&danger
- ),
+ )?,
r###"<table><tr><td>
foo
</td></tr></table>
@@ -2354,7 +2354,7 @@ int x = 33;
```
"###,
&danger
- ),
+ )?,
r###"<div></div>
``` c
int x = 33;
@@ -2370,7 +2370,7 @@ int x = 33;
</a>
"###,
&danger
- ),
+ )?,
r###"<a href="foo">
*bar*
</a>
@@ -2385,7 +2385,7 @@ int x = 33;
</Warning>
"###,
&danger
- ),
+ )?,
r###"<Warning>
*bar*
</Warning>
@@ -2400,7 +2400,7 @@ int x = 33;
</i>
"###,
&danger
- ),
+ )?,
r###"<i class="foo">
*bar*
</i>
@@ -2414,7 +2414,7 @@ int x = 33;
*bar*
"###,
&danger
- ),
+ )?,
r###"</ins>
*bar*
"###,
@@ -2428,7 +2428,7 @@ int x = 33;
</del>
"###,
&danger
- ),
+ )?,
r###"<del>
*foo*
</del>
@@ -2445,7 +2445,7 @@ int x = 33;
</del>
"###,
&danger
- ),
+ )?,
r###"<del>
<p><em>foo</em></p>
</del>
@@ -2458,7 +2458,7 @@ int x = 33;
r###"<del>*foo*</del>
"###,
&danger
- ),
+ )?,
r###"<p><del><em>foo</em></del></p>
"###,
r###"HTML blocks (168)"###
@@ -2475,7 +2475,7 @@ main = print $ parseTags tags
okay
"###,
&danger
- ),
+ )?,
r###"<pre language="haskell"><code>
import Text.HTML.TagSoup
@@ -2497,7 +2497,7 @@ document.getElementById("demo").innerHTML = "Hello JavaScript!";
okay
"###,
&danger
- ),
+ )?,
r###"<script type="text/javascript">
// JavaScript example
@@ -2519,7 +2519,7 @@ _bar_
</textarea>
"###,
&danger
- ),
+ )?,
r###"<textarea>
*foo*
@@ -2542,7 +2542,7 @@ p {color:blue;}
okay
"###,
&danger
- ),
+ )?,
r###"<style
type="text/css">
h1 {color:red;}
@@ -2562,7 +2562,7 @@ p {color:blue;}
foo
"###,
&danger
- ),
+ )?,
r###"<style
type="text/css">
@@ -2579,7 +2579,7 @@ foo
bar
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<div>
foo
@@ -2595,7 +2595,7 @@ foo
- foo
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<div>
@@ -2612,7 +2612,7 @@ foo
*foo*
"###,
&danger
- ),
+ )?,
r###"<style>p{color:red;}</style>
<p><em>foo</em></p>
"###,
@@ -2625,7 +2625,7 @@ foo
*baz*
"###,
&danger
- ),
+ )?,
r###"<!-- foo -->*bar*
<p><em>baz</em></p>
"###,
@@ -2639,7 +2639,7 @@ foo
</script>1. *bar*
"###,
&danger
- ),
+ )?,
r###"<script>
foo
</script>1. *bar*
@@ -2656,7 +2656,7 @@ bar
okay
"###,
&danger
- ),
+ )?,
r###"<!-- Foo
bar
@@ -2676,7 +2676,7 @@ bar
okay
"###,
&danger
- ),
+ )?,
r###"<?php
echo '>';
@@ -2692,7 +2692,7 @@ okay
r###"<!DOCTYPE html>
"###,
&danger
- ),
+ )?,
r###"<!DOCTYPE html>
"###,
r###"HTML blocks (181)"###
@@ -2715,7 +2715,7 @@ function matchwo(a,b)
okay
"###,
&danger
- ),
+ )?,
r###"<![CDATA[
function matchwo(a,b)
{
@@ -2740,7 +2740,7 @@ function matchwo(a,b)
<!-- foo -->
"###,
&danger
- ),
+ )?,
r###" <!-- foo -->
<pre><code>&lt;!-- foo --&gt;
</code></pre>
@@ -2755,7 +2755,7 @@ function matchwo(a,b)
<div>
"###,
&danger
- ),
+ )?,
r###" <div>
<pre><code>&lt;div&gt;
</code></pre>
@@ -2771,7 +2771,7 @@ bar
</div>
"###,
&danger
- ),
+ )?,
r###"<p>Foo</p>
<div>
bar
@@ -2788,7 +2788,7 @@ bar
*foo*
"###,
&danger
- ),
+ )?,
r###"<div>
bar
</div>
@@ -2804,7 +2804,7 @@ bar
baz
"###,
&danger
- ),
+ )?,
r###"<p>Foo
<a href="bar">
baz</p>
@@ -2821,7 +2821,7 @@ baz</p>
</div>
"###,
&danger
- ),
+ )?,
r###"<div>
<p><em>Emphasized</em> text.</p>
</div>
@@ -2836,7 +2836,7 @@ baz</p>
</div>
"###,
&danger
- ),
+ )?,
r###"<div>
*Emphasized* text.
</div>
@@ -2859,7 +2859,7 @@ Hi
</table>
"###,
&danger
- ),
+ )?,
r###"<table>
<tr>
<td>
@@ -2886,7 +2886,7 @@ Hi
</table>
"###,
&danger
- ),
+ )?,
r###"<table>
<tr>
<pre><code>&lt;td&gt;
@@ -2906,7 +2906,7 @@ Hi
[foo]
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="title">foo</a></p>
"###,
r###"Link reference definitions (192)"###
@@ -2921,7 +2921,7 @@ Hi
[foo]
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="the title">foo</a></p>
"###,
r###"Link reference definitions (193)"###
@@ -2934,7 +2934,7 @@ Hi
[Foo*bar\]]
"###,
&danger
- ),
+ )?,
r###"<p><a href="my_(url)" title="title (with parens)">Foo*bar]</a></p>
"###,
r###"Link reference definitions (194)"###
@@ -2949,7 +2949,7 @@ Hi
[Foo bar]
"###,
&danger
- ),
+ )?,
r###"<p><a href="my%20url" title="title">Foo bar</a></p>
"###,
r###"Link reference definitions (195)"###
@@ -2966,7 +2966,7 @@ line2
[foo]
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="
title
line1
@@ -2985,7 +2985,7 @@ with blank line'
[foo]
"###,
&danger
- ),
+ )?,
r###"<p>[foo]: /url 'title</p>
<p>with blank line'</p>
<p>[foo]</p>
@@ -3001,7 +3001,7 @@ with blank line'
[foo]
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url">foo</a></p>
"###,
r###"Link reference definitions (198)"###
@@ -3014,7 +3014,7 @@ with blank line'
[foo]
"###,
&danger
- ),
+ )?,
r###"<p>[foo]:</p>
<p>[foo]</p>
"###,
@@ -3028,7 +3028,7 @@ with blank line'
[foo]
"###,
&danger
- ),
+ )?,
r###"<p><a href="">foo</a></p>
"###,
r###"Link reference definitions (200)"###
@@ -3041,7 +3041,7 @@ with blank line'
[foo]
"###,
&danger
- ),
+ )?,
r###"<p>[foo]: <bar>(baz)</p>
<p>[foo]</p>
"###,
@@ -3055,7 +3055,7 @@ with blank line'
[foo]
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url%5Cbar*baz" title="foo&quot;bar\baz">foo</a></p>
"###,
r###"Link reference definitions (202)"###
@@ -3068,7 +3068,7 @@ with blank line'
[foo]: url
"###,
&danger
- ),
+ )?,
r###"<p><a href="url">foo</a></p>
"###,
r###"Link reference definitions (203)"###
@@ -3082,7 +3082,7 @@ with blank line'
[foo]: second
"###,
&danger
- ),
+ )?,
r###"<p><a href="first">foo</a></p>
"###,
r###"Link reference definitions (204)"###
@@ -3095,7 +3095,7 @@ with blank line'
[Foo]
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url">Foo</a></p>
"###,
r###"Link reference definitions (205)"###
@@ -3108,7 +3108,7 @@ with blank line'
[αγω]
"###,
&danger
- ),
+ )?,
r###"<p><a href="/%CF%86%CE%BF%CF%85">αγω</a></p>
"###,
r###"Link reference definitions (206)"###
@@ -3119,7 +3119,7 @@ with blank line'
r###"[foo]: /url
"###,
&danger
- ),
+ )?,
r###""###,
r###"Link reference definitions (207)"###
);
@@ -3132,7 +3132,7 @@ foo
bar
"###,
&danger
- ),
+ )?,
r###"<p>bar</p>
"###,
r###"Link reference definitions (208)"###
@@ -3143,7 +3143,7 @@ bar
r###"[foo]: /url "title" ok
"###,
&danger
- ),
+ )?,
r###"<p>[foo]: /url &quot;title&quot; ok</p>
"###,
r###"Link reference definitions (209)"###
@@ -3155,7 +3155,7 @@ bar
"title" ok
"###,
&danger
- ),
+ )?,
r###"<p>&quot;title&quot; ok</p>
"###,
r###"Link reference definitions (210)"###
@@ -3168,7 +3168,7 @@ bar
[foo]
"###,
&danger
- ),
+ )?,
r###"<pre><code>[foo]: /url &quot;title&quot;
</code></pre>
<p>[foo]</p>
@@ -3185,7 +3185,7 @@ bar
[foo]
"###,
&danger
- ),
+ )?,
r###"<pre><code>[foo]: /url
</code></pre>
<p>[foo]</p>
@@ -3201,7 +3201,7 @@ bar
[bar]
"###,
&danger
- ),
+ )?,
r###"<p>Foo
[bar]: /baz</p>
<p>[bar]</p>
@@ -3216,7 +3216,7 @@ bar
> bar
"###,
&danger
- ),
+ )?,
r###"<h1><a href="/url">Foo</a></h1>
<blockquote>
<p>bar</p>
@@ -3233,7 +3233,7 @@ bar
[foo]
"###,
&danger
- ),
+ )?,
r###"<h1>bar</h1>
<p><a href="/url">foo</a></p>
"###,
@@ -3247,7 +3247,7 @@ bar
[foo]
"###,
&danger
- ),
+ )?,
r###"<p>===
<a href="/url">foo</a></p>
"###,
@@ -3266,7 +3266,7 @@ bar
[baz]
"###,
&danger
- ),
+ )?,
r###"<p><a href="/foo-url" title="foo">foo</a>,
<a href="/bar-url" title="bar">bar</a>,
<a href="/baz-url">baz</a></p>
@@ -3281,7 +3281,7 @@ bar
> [foo]: /url
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url">foo</a></p>
<blockquote>
</blockquote>
@@ -3296,7 +3296,7 @@ bar
bbb
"###,
&danger
- ),
+ )?,
r###"<p>aaa</p>
<p>bbb</p>
"###,
@@ -3312,7 +3312,7 @@ ccc
ddd
"###,
&danger
- ),
+ )?,
r###"<p>aaa
bbb</p>
<p>ccc
@@ -3329,7 +3329,7 @@ ddd</p>
bbb
"###,
&danger
- ),
+ )?,
r###"<p>aaa</p>
<p>bbb</p>
"###,
@@ -3342,7 +3342,7 @@ bbb
bbb
"###,
&danger
- ),
+ )?,
r###"<p>aaa
bbb</p>
"###,
@@ -3356,7 +3356,7 @@ bbb</p>
ccc
"###,
&danger
- ),
+ )?,
r###"<p>aaa
bbb
ccc</p>
@@ -3370,7 +3370,7 @@ ccc</p>
bbb
"###,
&danger
- ),
+ )?,
r###"<p>aaa
bbb</p>
"###,
@@ -3383,7 +3383,7 @@ bbb</p>
bbb
"###,
&danger
- ),
+ )?,
r###"<pre><code>aaa
</code></pre>
<p>bbb</p>
@@ -3397,7 +3397,7 @@ bbb
bbb
"###,
&danger
- ),
+ )?,
r###"<p>aaa<br />
bbb</p>
"###,
@@ -3416,7 +3416,7 @@ aaa
"###,
&danger
- ),
+ )?,
r###"<p>aaa</p>
<h1>aaa</h1>
"###,
@@ -3430,7 +3430,7 @@ aaa
> baz
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<h1>Foo</h1>
<p>bar
@@ -3447,7 +3447,7 @@ baz</p>
> baz
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<h1>Foo</h1>
<p>bar
@@ -3464,7 +3464,7 @@ baz</p>
> baz
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<h1>Foo</h1>
<p>bar
@@ -3481,7 +3481,7 @@ baz</p>
> baz
"###,
&danger
- ),
+ )?,
r###"<pre><code>&gt; # Foo
&gt; bar
&gt; baz
@@ -3497,7 +3497,7 @@ baz</p>
baz
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<h1>Foo</h1>
<p>bar
@@ -3514,7 +3514,7 @@ baz
> foo
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>bar
baz
@@ -3530,7 +3530,7 @@ foo</p>
---
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>foo</p>
</blockquote>
@@ -3545,7 +3545,7 @@ foo</p>
- bar
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<ul>
<li>foo</li>
@@ -3564,7 +3564,7 @@ foo</p>
bar
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<pre><code>foo
</code></pre>
@@ -3582,7 +3582,7 @@ foo
```
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<pre><code></code></pre>
</blockquote>
@@ -3598,7 +3598,7 @@ foo
- bar
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>foo
- bar</p>
@@ -3612,7 +3612,7 @@ foo
r###">
"###,
&danger
- ),
+ )?,
r###"<blockquote>
</blockquote>
"###,
@@ -3626,7 +3626,7 @@ foo
>
"###,
&danger
- ),
+ )?,
r###"<blockquote>
</blockquote>
"###,
@@ -3640,7 +3640,7 @@ foo
>
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>foo</p>
</blockquote>
@@ -3655,7 +3655,7 @@ foo
> bar
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>foo</p>
</blockquote>
@@ -3672,7 +3672,7 @@ foo
> bar
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>foo
bar</p>
@@ -3688,7 +3688,7 @@ bar</p>
> bar
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>foo</p>
<p>bar</p>
@@ -3703,7 +3703,7 @@ bar</p>
> bar
"###,
&danger
- ),
+ )?,
r###"<p>foo</p>
<blockquote>
<p>bar</p>
@@ -3719,7 +3719,7 @@ bar</p>
> bbb
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>aaa</p>
</blockquote>
@@ -3737,7 +3737,7 @@ bar</p>
baz
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>bar
baz</p>
@@ -3753,7 +3753,7 @@ baz</p>
baz
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>bar</p>
</blockquote>
@@ -3769,7 +3769,7 @@ baz
baz
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<p>bar</p>
</blockquote>
@@ -3784,7 +3784,7 @@ baz
bar
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<blockquote>
<blockquote>
@@ -3804,7 +3804,7 @@ bar</p>
>>baz
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<blockquote>
<blockquote>
@@ -3825,7 +3825,7 @@ baz</p>
> not code
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<pre><code>code
</code></pre>
@@ -3847,7 +3847,7 @@ with two lines.
> A block quote.
"###,
&danger
- ),
+ )?,
r###"<p>A paragraph
with two lines.</p>
<pre><code>indented code
@@ -3869,7 +3869,7 @@ with two lines.</p>
> A block quote.
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>
<p>A paragraph
@@ -3892,7 +3892,7 @@ with two lines.</p>
two
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>one</li>
</ul>
@@ -3908,7 +3908,7 @@ with two lines.</p>
two
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>one</p>
@@ -3926,7 +3926,7 @@ with two lines.</p>
two
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>one</li>
</ul>
@@ -3943,7 +3943,7 @@ with two lines.</p>
two
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>one</p>
@@ -3961,7 +3961,7 @@ with two lines.</p>
>> two
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<blockquote>
<ol>
@@ -3983,7 +3983,7 @@ with two lines.</p>
> > two
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<blockquote>
<ul>
@@ -4003,7 +4003,7 @@ with two lines.</p>
2.two
"###,
&danger
- ),
+ )?,
r###"<p>-one</p>
<p>2.two</p>
"###,
@@ -4018,7 +4018,7 @@ with two lines.</p>
bar
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>foo</p>
@@ -4042,7 +4042,7 @@ with two lines.</p>
> bam
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>
<p>foo</p>
@@ -4068,7 +4068,7 @@ with two lines.</p>
baz
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>Foo</p>
@@ -4088,7 +4088,7 @@ baz
r###"123456789. ok
"###,
&danger
- ),
+ )?,
r###"<ol start="123456789">
<li>ok</li>
</ol>
@@ -4101,7 +4101,7 @@ baz
r###"1234567890. not ok
"###,
&danger
- ),
+ )?,
r###"<p>1234567890. not ok</p>
"###,
r###"List items (266)"###
@@ -4112,7 +4112,7 @@ baz
r###"0. ok
"###,
&danger
- ),
+ )?,
r###"<ol start="0">
<li>ok</li>
</ol>
@@ -4125,7 +4125,7 @@ baz
r###"003. ok
"###,
&danger
- ),
+ )?,
r###"<ol start="3">
<li>ok</li>
</ol>
@@ -4138,7 +4138,7 @@ baz
r###"-1. not ok
"###,
&danger
- ),
+ )?,
r###"<p>-1. not ok</p>
"###,
r###"List items (269)"###
@@ -4151,7 +4151,7 @@ baz
bar
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>foo</p>
@@ -4170,7 +4170,7 @@ baz
bar
"###,
&danger
- ),
+ )?,
r###"<ol start="10">
<li>
<p>foo</p>
@@ -4191,7 +4191,7 @@ paragraph
more code
"###,
&danger
- ),
+ )?,
r###"<pre><code>indented code
</code></pre>
<p>paragraph</p>
@@ -4210,7 +4210,7 @@ paragraph
more code
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>
<pre><code>indented code
@@ -4233,7 +4233,7 @@ paragraph
more code
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>
<pre><code> indented code
@@ -4254,7 +4254,7 @@ paragraph
bar
"###,
&danger
- ),
+ )?,
r###"<p>foo</p>
<p>bar</p>
"###,
@@ -4268,7 +4268,7 @@ bar
bar
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>foo</li>
</ul>
@@ -4284,7 +4284,7 @@ bar
bar
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>foo</p>
@@ -4307,7 +4307,7 @@ bar
baz
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>foo</li>
<li>
@@ -4329,7 +4329,7 @@ bar
foo
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>foo</li>
</ul>
@@ -4344,7 +4344,7 @@ bar
foo
"###,
&danger
- ),
+ )?,
r###"<ul>
<li></li>
</ul>
@@ -4360,7 +4360,7 @@ bar
- bar
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>foo</li>
<li></li>
@@ -4377,7 +4377,7 @@ bar
- bar
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>foo</li>
<li></li>
@@ -4394,7 +4394,7 @@ bar
3. bar
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>foo</li>
<li></li>
@@ -4409,7 +4409,7 @@ bar
r###"*
"###,
&danger
- ),
+ )?,
r###"<ul>
<li></li>
</ul>
@@ -4426,7 +4426,7 @@ foo
1.
"###,
&danger
- ),
+ )?,
r###"<p>foo
*</p>
<p>foo
@@ -4445,7 +4445,7 @@ foo
> A block quote.
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>
<p>A paragraph
@@ -4471,7 +4471,7 @@ with two lines.</p>
> A block quote.
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>
<p>A paragraph
@@ -4497,7 +4497,7 @@ with two lines.</p>
> A block quote.
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>
<p>A paragraph
@@ -4523,7 +4523,7 @@ with two lines.</p>
> A block quote.
"###,
&danger
- ),
+ )?,
r###"<pre><code>1. A paragraph
with two lines.
@@ -4545,7 +4545,7 @@ with two lines.
> A block quote.
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>
<p>A paragraph
@@ -4567,7 +4567,7 @@ with two lines.</p>
with two lines.
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>A paragraph
with two lines.</li>
@@ -4582,7 +4582,7 @@ with two lines.</li>
continued here.
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<ol>
<li>
@@ -4603,7 +4603,7 @@ continued here.</p>
> continued here.
"###,
&danger
- ),
+ )?,
r###"<blockquote>
<ol>
<li>
@@ -4626,7 +4626,7 @@ continued here.</p>
- boo
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>foo
<ul>
@@ -4654,7 +4654,7 @@ continued here.</p>
- boo
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>foo</li>
<li>bar</li>
@@ -4671,7 +4671,7 @@ continued here.</p>
- bar
"###,
&danger
- ),
+ )?,
r###"<ol start="10">
<li>foo
<ul>
@@ -4689,7 +4689,7 @@ continued here.</p>
- bar
"###,
&danger
- ),
+ )?,
r###"<ol start="10">
<li>foo</li>
</ol>
@@ -4705,7 +4705,7 @@ continued here.</p>
r###"- - foo
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<ul>
@@ -4722,7 +4722,7 @@ continued here.</p>
r###"1. - 2. foo
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>
<ul>
@@ -4746,7 +4746,7 @@ continued here.</p>
baz
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<h1>Foo</h1>
@@ -4766,7 +4766,7 @@ baz</li>
+ baz
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>foo</li>
<li>bar</li>
@@ -4785,7 +4785,7 @@ baz</li>
3) baz
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>foo</li>
<li>bar</li>
@@ -4804,7 +4804,7 @@ baz</li>
- baz
"###,
&danger
- ),
+ )?,
r###"<p>Foo</p>
<ul>
<li>bar</li>
@@ -4820,7 +4820,7 @@ baz</li>
14. The number of doors is 6.
"###,
&danger
- ),
+ )?,
r###"<p>The number of windows in my house is
14. The number of doors is 6.</p>
"###,
@@ -4833,7 +4833,7 @@ baz</li>
1. The number of doors is 6.
"###,
&danger
- ),
+ )?,
r###"<p>The number of windows in my house is</p>
<ol>
<li>The number of doors is 6.</li>
@@ -4852,7 +4852,7 @@ baz</li>
- baz
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>foo</p>
@@ -4878,7 +4878,7 @@ baz</li>
bim
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>foo
<ul>
@@ -4908,7 +4908,7 @@ baz</li>
- bim
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>foo</li>
<li>bar</li>
@@ -4935,7 +4935,7 @@ baz</li>
code
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>foo</p>
@@ -4963,7 +4963,7 @@ baz</li>
- g
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>a</li>
<li>b</li>
@@ -4986,7 +4986,7 @@ baz</li>
3. c
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>
<p>a</p>
@@ -5011,7 +5011,7 @@ baz</li>
- e
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>a</li>
<li>b</li>
@@ -5032,7 +5032,7 @@ baz</li>
3. c
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>
<p>a</p>
@@ -5055,7 +5055,7 @@ baz</li>
- c
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>a</p>
@@ -5079,7 +5079,7 @@ baz</li>
* c
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>a</p>
@@ -5102,7 +5102,7 @@ baz</li>
- d
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>a</p>
@@ -5128,7 +5128,7 @@ baz</li>
- d
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>a</p>
@@ -5155,7 +5155,7 @@ baz</li>
- c
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>a</li>
<li>
@@ -5179,7 +5179,7 @@ baz</li>
- d
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>a
<ul>
@@ -5203,7 +5203,7 @@ baz</li>
* c
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>a
<blockquote>
@@ -5226,7 +5226,7 @@ baz</li>
- d
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>a
<blockquote>
@@ -5246,7 +5246,7 @@ baz</li>
r###"- a
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>a</li>
</ul>
@@ -5260,7 +5260,7 @@ baz</li>
- b
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>a
<ul>
@@ -5281,7 +5281,7 @@ baz</li>
bar
"###,
&danger
- ),
+ )?,
r###"<ol>
<li>
<pre><code>foo
@@ -5301,7 +5301,7 @@ baz</li>
baz
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>foo</p>
@@ -5326,7 +5326,7 @@ baz</li>
- f
"###,
&danger
- ),
+ )?,
r###"<ul>
<li>
<p>a</p>
@@ -5352,7 +5352,7 @@ baz</li>
r###"`hi`lo`
"###,
&danger
- ),
+ )?,
r###"<p><code>hi</code>lo`</p>
"###,
r###"Inlines (327)"###
@@ -5363,7 +5363,7 @@ baz</li>
r###"`foo`
"###,
&danger
- ),
+ )?,
r###"<p><code>foo</code></p>
"###,
r###"Code spans (328)"###
@@ -5374,7 +5374,7 @@ baz</li>
r###"`` foo ` bar ``
"###,
&danger
- ),
+ )?,
r###"<p><code>foo ` bar</code></p>
"###,
r###"Code spans (329)"###
@@ -5385,7 +5385,7 @@ baz</li>
r###"` `` `
"###,
&danger
- ),
+ )?,
r###"<p><code>``</code></p>
"###,
r###"Code spans (330)"###
@@ -5396,7 +5396,7 @@ baz</li>
r###"` `` `
"###,
&danger
- ),
+ )?,
r###"<p><code> `` </code></p>
"###,
r###"Code spans (331)"###
@@ -5407,7 +5407,7 @@ baz</li>
r###"` a`
"###,
&danger
- ),
+ )?,
r###"<p><code> a</code></p>
"###,
r###"Code spans (332)"###
@@ -5418,7 +5418,7 @@ baz</li>
r###"` b `
"###,
&danger
- ),
+ )?,
r###"<p><code> b </code></p>
"###,
r###"Code spans (333)"###
@@ -5430,7 +5430,7 @@ baz</li>
` `
"###,
&danger
- ),
+ )?,
r###"<p><code> </code>
<code> </code></p>
"###,
@@ -5446,7 +5446,7 @@ baz
``
"###,
&danger
- ),
+ )?,
r###"<p><code>foo bar baz</code></p>
"###,
r###"Code spans (335)"###
@@ -5459,7 +5459,7 @@ foo
``
"###,
&danger
- ),
+ )?,
r###"<p><code>foo </code></p>
"###,
r###"Code spans (336)"###
@@ -5471,7 +5471,7 @@ foo
baz`
"###,
&danger
- ),
+ )?,
r###"<p><code>foo bar baz</code></p>
"###,
r###"Code spans (337)"###
@@ -5482,7 +5482,7 @@ baz`
r###"`foo\`bar`
"###,
&danger
- ),
+ )?,
r###"<p><code>foo\</code>bar`</p>
"###,
r###"Code spans (338)"###
@@ -5493,7 +5493,7 @@ baz`
r###"``foo`bar``
"###,
&danger
- ),
+ )?,
r###"<p><code>foo`bar</code></p>
"###,
r###"Code spans (339)"###
@@ -5504,7 +5504,7 @@ baz`
r###"` foo `` bar `
"###,
&danger
- ),
+ )?,
r###"<p><code>foo `` bar</code></p>
"###,
r###"Code spans (340)"###
@@ -5515,7 +5515,7 @@ baz`
r###"*foo`*`
"###,
&danger
- ),
+ )?,
r###"<p>*foo<code>*</code></p>
"###,
r###"Code spans (341)"###
@@ -5526,7 +5526,7 @@ baz`
r###"[not a `link](/foo`)
"###,
&danger
- ),
+ )?,
r###"<p>[not a <code>link](/foo</code>)</p>
"###,
r###"Code spans (342)"###
@@ -5537,7 +5537,7 @@ baz`
r###"`<a href="`">`
"###,
&danger
- ),
+ )?,
r###"<p><code>&lt;a href=&quot;</code>&quot;&gt;`</p>
"###,
r###"Code spans (343)"###
@@ -5548,7 +5548,7 @@ baz`
r###"<a href="`">`
"###,
&danger
- ),
+ )?,
r###"<p><a href="`">`</p>
"###,
r###"Code spans (344)"###
@@ -5559,7 +5559,7 @@ baz`
r###"`<http://foo.bar.`baz>`
"###,
&danger
- ),
+ )?,
r###"<p><code>&lt;http://foo.bar.</code>baz&gt;`</p>
"###,
r###"Code spans (345)"###
@@ -5570,7 +5570,7 @@ baz`
r###"<http://foo.bar.`baz>`
"###,
&danger
- ),
+ )?,
r###"<p><a href="http://foo.bar.%60baz">http://foo.bar.`baz</a>`</p>
"###,
r###"Code spans (346)"###
@@ -5581,7 +5581,7 @@ baz`
r###"```foo``
"###,
&danger
- ),
+ )?,
r###"<p>```foo``</p>
"###,
r###"Code spans (347)"###
@@ -5592,7 +5592,7 @@ baz`
r###"`foo
"###,
&danger
- ),
+ )?,
r###"<p>`foo</p>
"###,
r###"Code spans (348)"###
@@ -5603,7 +5603,7 @@ baz`
r###"`foo``bar``
"###,
&danger
- ),
+ )?,
r###"<p>`foo<code>bar</code></p>
"###,
r###"Code spans (349)"###
@@ -5614,7 +5614,7 @@ baz`
r###"*foo bar*
"###,
&danger
- ),
+ )?,
r###"<p><em>foo bar</em></p>
"###,
r###"Emphasis and strong emphasis (350)"###
@@ -5625,7 +5625,7 @@ baz`
r###"a * foo bar*
"###,
&danger
- ),
+ )?,
r###"<p>a * foo bar*</p>
"###,
r###"Emphasis and strong emphasis (351)"###
@@ -5636,7 +5636,7 @@ baz`
r###"a*"foo"*
"###,
&danger
- ),
+ )?,
r###"<p>a*&quot;foo&quot;*</p>
"###,
r###"Emphasis and strong emphasis (352)"###
@@ -5647,7 +5647,7 @@ baz`
r###"* a *
"###,
&danger
- ),
+ )?,
r###"<p>* a *</p>
"###,
r###"Emphasis and strong emphasis (353)"###
@@ -5658,7 +5658,7 @@ baz`
r###"foo*bar*
"###,
&danger
- ),
+ )?,
r###"<p>foo<em>bar</em></p>
"###,
r###"Emphasis and strong emphasis (354)"###
@@ -5669,7 +5669,7 @@ baz`
r###"5*6*78
"###,
&danger
- ),
+ )?,
r###"<p>5<em>6</em>78</p>
"###,
r###"Emphasis and strong emphasis (355)"###
@@ -5680,7 +5680,7 @@ baz`
r###"_foo bar_
"###,
&danger
- ),
+ )?,
r###"<p><em>foo bar</em></p>
"###,
r###"Emphasis and strong emphasis (356)"###
@@ -5691,7 +5691,7 @@ baz`
r###"_ foo bar_
"###,
&danger
- ),
+ )?,
r###"<p>_ foo bar_</p>
"###,
r###"Emphasis and strong emphasis (357)"###
@@ -5702,7 +5702,7 @@ baz`
r###"a_"foo"_
"###,
&danger
- ),
+ )?,
r###"<p>a_&quot;foo&quot;_</p>
"###,
r###"Emphasis and strong emphasis (358)"###
@@ -5713,7 +5713,7 @@ baz`
r###"foo_bar_
"###,
&danger
- ),
+ )?,
r###"<p>foo_bar_</p>
"###,
r###"Emphasis and strong emphasis (359)"###
@@ -5724,7 +5724,7 @@ baz`
r###"5_6_78
"###,
&danger
- ),
+ )?,
r###"<p>5_6_78</p>
"###,
r###"Emphasis and strong emphasis (360)"###
@@ -5735,7 +5735,7 @@ baz`
r###"пристаням_стремятся_
"###,
&danger
- ),
+ )?,
r###"<p>пристаням_стремятся_</p>
"###,
r###"Emphasis and strong emphasis (361)"###
@@ -5746,7 +5746,7 @@ baz`
r###"aa_"bb"_cc
"###,
&danger
- ),
+ )?,
r###"<p>aa_&quot;bb&quot;_cc</p>
"###,
r###"Emphasis and strong emphasis (362)"###
@@ -5757,7 +5757,7 @@ baz`
r###"foo-_(bar)_
"###,
&danger
- ),
+ )?,
r###"<p>foo-<em>(bar)</em></p>
"###,
r###"Emphasis and strong emphasis (363)"###
@@ -5768,7 +5768,7 @@ baz`
r###"_foo*
"###,
&danger
- ),
+ )?,
r###"<p>_foo*</p>
"###,
r###"Emphasis and strong emphasis (364)"###
@@ -5779,7 +5779,7 @@ baz`
r###"*foo bar *
"###,
&danger
- ),
+ )?,
r###"<p>*foo bar *</p>
"###,
r###"Emphasis and strong emphasis (365)"###
@@ -5791,7 +5791,7 @@ baz`
*
"###,
&danger
- ),
+ )?,
r###"<p>*foo bar
*</p>
"###,
@@ -5803,7 +5803,7 @@ baz`
r###"*(*foo)
"###,
&danger
- ),
+ )?,
r###"<p>*(*foo)</p>
"###,
r###"Emphasis and strong emphasis (367)"###
@@ -5814,7 +5814,7 @@ baz`
r###"*(*foo*)*
"###,
&danger
- ),
+ )?,
r###"<p><em>(<em>foo</em>)</em></p>
"###,
r###"Emphasis and strong emphasis (368)"###
@@ -5825,7 +5825,7 @@ baz`
r###"*foo*bar
"###,
&danger
- ),
+ )?,
r###"<p><em>foo</em>bar</p>
"###,
r###"Emphasis and strong emphasis (369)"###
@@ -5836,7 +5836,7 @@ baz`
r###"_foo bar _
"###,
&danger
- ),
+ )?,
r###"<p>_foo bar _</p>
"###,
r###"Emphasis and strong emphasis (370)"###
@@ -5847,7 +5847,7 @@ baz`
r###"_(_foo)
"###,
&danger
- ),
+ )?,
r###"<p>_(_foo)</p>
"###,
r###"Emphasis and strong emphasis (371)"###
@@ -5858,7 +5858,7 @@ baz`
r###"_(_foo_)_
"###,
&danger
- ),
+ )?,
r###"<p><em>(<em>foo</em>)</em></p>
"###,
r###"Emphasis and strong emphasis (372)"###
@@ -5869,7 +5869,7 @@ baz`
r###"_foo_bar
"###,
&danger
- ),
+ )?,
r###"<p>_foo_bar</p>
"###,
r###"Emphasis and strong emphasis (373)"###
@@ -5880,7 +5880,7 @@ baz`
r###"_пристаням_стремятся
"###,
&danger
- ),
+ )?,
r###"<p>_пристаням_стремятся</p>
"###,
r###"Emphasis and strong emphasis (374)"###
@@ -5891,7 +5891,7 @@ baz`
r###"_foo_bar_baz_
"###,
&danger
- ),
+ )?,
r###"<p><em>foo_bar_baz</em></p>
"###,
r###"Emphasis and strong emphasis (375)"###
@@ -5902,7 +5902,7 @@ baz`
r###"_(bar)_.
"###,
&danger
- ),
+ )?,
r###"<p><em>(bar)</em>.</p>
"###,
r###"Emphasis and strong emphasis (376)"###
@@ -5913,7 +5913,7 @@ baz`
r###"**foo bar**
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo bar</strong></p>
"###,
r###"Emphasis and strong emphasis (377)"###
@@ -5924,7 +5924,7 @@ baz`
r###"** foo bar**
"###,
&danger
- ),
+ )?,
r###"<p>** foo bar**</p>
"###,
r###"Emphasis and strong emphasis (378)"###
@@ -5935,7 +5935,7 @@ baz`
r###"a**"foo"**
"###,
&danger
- ),
+ )?,
r###"<p>a**&quot;foo&quot;**</p>
"###,
r###"Emphasis and strong emphasis (379)"###
@@ -5946,7 +5946,7 @@ baz`
r###"foo**bar**
"###,
&danger
- ),
+ )?,
r###"<p>foo<strong>bar</strong></p>
"###,
r###"Emphasis and strong emphasis (380)"###
@@ -5957,7 +5957,7 @@ baz`
r###"__foo bar__
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo bar</strong></p>
"###,
r###"Emphasis and strong emphasis (381)"###
@@ -5968,7 +5968,7 @@ baz`
r###"__ foo bar__
"###,
&danger
- ),
+ )?,
r###"<p>__ foo bar__</p>
"###,
r###"Emphasis and strong emphasis (382)"###
@@ -5980,7 +5980,7 @@ baz`
foo bar__
"###,
&danger
- ),
+ )?,
r###"<p>__
foo bar__</p>
"###,
@@ -5992,7 +5992,7 @@ foo bar__</p>
r###"a__"foo"__
"###,
&danger
- ),
+ )?,
r###"<p>a__&quot;foo&quot;__</p>
"###,
r###"Emphasis and strong emphasis (384)"###
@@ -6003,7 +6003,7 @@ foo bar__</p>
r###"foo__bar__
"###,
&danger
- ),
+ )?,
r###"<p>foo__bar__</p>
"###,
r###"Emphasis and strong emphasis (385)"###
@@ -6014,7 +6014,7 @@ foo bar__</p>
r###"5__6__78
"###,
&danger
- ),
+ )?,
r###"<p>5__6__78</p>
"###,
r###"Emphasis and strong emphasis (386)"###
@@ -6025,7 +6025,7 @@ foo bar__</p>
r###"пристаням__стремятся__
"###,
&danger
- ),
+ )?,
r###"<p>пристаням__стремятся__</p>
"###,
r###"Emphasis and strong emphasis (387)"###
@@ -6036,7 +6036,7 @@ foo bar__</p>
r###"__foo, __bar__, baz__
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo, <strong>bar</strong>, baz</strong></p>
"###,
r###"Emphasis and strong emphasis (388)"###
@@ -6047,7 +6047,7 @@ foo bar__</p>
r###"foo-__(bar)__
"###,
&danger
- ),
+ )?,
r###"<p>foo-<strong>(bar)</strong></p>
"###,
r###"Emphasis and strong emphasis (389)"###
@@ -6058,7 +6058,7 @@ foo bar__</p>
r###"**foo bar **
"###,
&danger
- ),
+ )?,
r###"<p>**foo bar **</p>
"###,
r###"Emphasis and strong emphasis (390)"###
@@ -6069,7 +6069,7 @@ foo bar__</p>
r###"**(**foo)
"###,
&danger
- ),
+ )?,
r###"<p>**(**foo)</p>
"###,
r###"Emphasis and strong emphasis (391)"###
@@ -6080,7 +6080,7 @@ foo bar__</p>
r###"*(**foo**)*
"###,
&danger
- ),
+ )?,
r###"<p><em>(<strong>foo</strong>)</em></p>
"###,
r###"Emphasis and strong emphasis (392)"###
@@ -6092,7 +6092,7 @@ foo bar__</p>
*Asclepias physocarpa*)**
"###,
&danger
- ),
+ )?,
r###"<p><strong>Gomphocarpus (<em>Gomphocarpus physocarpus</em>, syn.
<em>Asclepias physocarpa</em>)</strong></p>
"###,
@@ -6104,7 +6104,7 @@ foo bar__</p>
r###"**foo "*bar*" foo**
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo &quot;<em>bar</em>&quot; foo</strong></p>
"###,
r###"Emphasis and strong emphasis (394)"###
@@ -6115,7 +6115,7 @@ foo bar__</p>
r###"**foo**bar
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo</strong>bar</p>
"###,
r###"Emphasis and strong emphasis (395)"###
@@ -6126,7 +6126,7 @@ foo bar__</p>
r###"__foo bar __
"###,
&danger
- ),
+ )?,
r###"<p>__foo bar __</p>
"###,
r###"Emphasis and strong emphasis (396)"###
@@ -6137,7 +6137,7 @@ foo bar__</p>
r###"__(__foo)
"###,
&danger
- ),
+ )?,
r###"<p>__(__foo)</p>
"###,
r###"Emphasis and strong emphasis (397)"###
@@ -6148,7 +6148,7 @@ foo bar__</p>
r###"_(__foo__)_
"###,
&danger
- ),
+ )?,
r###"<p><em>(<strong>foo</strong>)</em></p>
"###,
r###"Emphasis and strong emphasis (398)"###
@@ -6159,7 +6159,7 @@ foo bar__</p>
r###"__foo__bar
"###,
&danger
- ),
+ )?,
r###"<p>__foo__bar</p>
"###,
r###"Emphasis and strong emphasis (399)"###
@@ -6170,7 +6170,7 @@ foo bar__</p>
r###"__пристаням__стремятся
"###,
&danger
- ),
+ )?,
r###"<p>__пристаням__стремятся</p>
"###,
r###"Emphasis and strong emphasis (400)"###
@@ -6181,7 +6181,7 @@ foo bar__</p>
r###"__foo__bar__baz__
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo__bar__baz</strong></p>
"###,
r###"Emphasis and strong emphasis (401)"###
@@ -6192,7 +6192,7 @@ foo bar__</p>
r###"__(bar)__.
"###,
&danger
- ),
+ )?,
r###"<p><strong>(bar)</strong>.</p>
"###,
r###"Emphasis and strong emphasis (402)"###
@@ -6203,7 +6203,7 @@ foo bar__</p>
r###"*foo [bar](/url)*
"###,
&danger
- ),
+ )?,
r###"<p><em>foo <a href="/url">bar</a></em></p>
"###,
r###"Emphasis and strong emphasis (403)"###
@@ -6215,7 +6215,7 @@ foo bar__</p>
bar*
"###,
&danger
- ),
+ )?,
r###"<p><em>foo
bar</em></p>
"###,
@@ -6227,7 +6227,7 @@ bar</em></p>
r###"_foo __bar__ baz_
"###,
&danger
- ),
+ )?,
r###"<p><em>foo <strong>bar</strong> baz</em></p>
"###,
r###"Emphasis and strong emphasis (405)"###
@@ -6238,7 +6238,7 @@ bar</em></p>
r###"_foo _bar_ baz_
"###,
&danger
- ),
+ )?,
r###"<p><em>foo <em>bar</em> baz</em></p>
"###,
r###"Emphasis and strong emphasis (406)"###
@@ -6249,7 +6249,7 @@ bar</em></p>
r###"__foo_ bar_
"###,
&danger
- ),
+ )?,
r###"<p><em><em>foo</em> bar</em></p>
"###,
r###"Emphasis and strong emphasis (407)"###
@@ -6260,7 +6260,7 @@ bar</em></p>
r###"*foo *bar**
"###,
&danger
- ),
+ )?,
r###"<p><em>foo <em>bar</em></em></p>
"###,
r###"Emphasis and strong emphasis (408)"###
@@ -6271,7 +6271,7 @@ bar</em></p>
r###"*foo **bar** baz*
"###,
&danger
- ),
+ )?,
r###"<p><em>foo <strong>bar</strong> baz</em></p>
"###,
r###"Emphasis and strong emphasis (409)"###
@@ -6282,7 +6282,7 @@ bar</em></p>
r###"*foo**bar**baz*
"###,
&danger
- ),
+ )?,
r###"<p><em>foo<strong>bar</strong>baz</em></p>
"###,
r###"Emphasis and strong emphasis (410)"###
@@ -6293,7 +6293,7 @@ bar</em></p>
r###"*foo**bar*
"###,
&danger
- ),
+ )?,
r###"<p><em>foo**bar</em></p>
"###,
r###"Emphasis and strong emphasis (411)"###
@@ -6304,7 +6304,7 @@ bar</em></p>
r###"***foo** bar*
"###,
&danger
- ),
+ )?,
r###"<p><em><strong>foo</strong> bar</em></p>
"###,
r###"Emphasis and strong emphasis (412)"###
@@ -6315,7 +6315,7 @@ bar</em></p>
r###"*foo **bar***
"###,
&danger
- ),
+ )?,
r###"<p><em>foo <strong>bar</strong></em></p>
"###,
r###"Emphasis and strong emphasis (413)"###
@@ -6326,7 +6326,7 @@ bar</em></p>
r###"*foo**bar***
"###,
&danger
- ),
+ )?,
r###"<p><em>foo<strong>bar</strong></em></p>
"###,
r###"Emphasis and strong emphasis (414)"###
@@ -6337,7 +6337,7 @@ bar</em></p>
r###"foo***bar***baz
"###,
&danger
- ),
+ )?,
r###"<p>foo<em><strong>bar</strong></em>baz</p>
"###,
r###"Emphasis and strong emphasis (415)"###
@@ -6348,7 +6348,7 @@ bar</em></p>
r###"foo******bar*********baz
"###,
&danger
- ),
+ )?,
r###"<p>foo<strong><strong><strong>bar</strong></strong></strong>***baz</p>
"###,
r###"Emphasis and strong emphasis (416)"###
@@ -6359,7 +6359,7 @@ bar</em></p>
r###"*foo **bar *baz* bim** bop*
"###,
&danger
- ),
+ )?,
r###"<p><em>foo <strong>bar <em>baz</em> bim</strong> bop</em></p>
"###,
r###"Emphasis and strong emphasis (417)"###
@@ -6370,7 +6370,7 @@ bar</em></p>
r###"*foo [*bar*](/url)*
"###,
&danger
- ),
+ )?,
r###"<p><em>foo <a href="/url"><em>bar</em></a></em></p>
"###,
r###"Emphasis and strong emphasis (418)"###
@@ -6381,7 +6381,7 @@ bar</em></p>
r###"** is not an empty emphasis
"###,
&danger
- ),
+ )?,
r###"<p>** is not an empty emphasis</p>
"###,
r###"Emphasis and strong emphasis (419)"###
@@ -6392,7 +6392,7 @@ bar</em></p>
r###"**** is not an empty strong emphasis
"###,
&danger
- ),
+ )?,
r###"<p>**** is not an empty strong emphasis</p>
"###,
r###"Emphasis and strong emphasis (420)"###
@@ -6403,7 +6403,7 @@ bar</em></p>
r###"**foo [bar](/url)**
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo <a href="/url">bar</a></strong></p>
"###,
r###"Emphasis and strong emphasis (421)"###
@@ -6415,7 +6415,7 @@ bar</em></p>
bar**
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo
bar</strong></p>
"###,
@@ -6427,7 +6427,7 @@ bar</strong></p>
r###"__foo _bar_ baz__
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo <em>bar</em> baz</strong></p>
"###,
r###"Emphasis and strong emphasis (423)"###
@@ -6438,7 +6438,7 @@ bar</strong></p>
r###"__foo __bar__ baz__
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo <strong>bar</strong> baz</strong></p>
"###,
r###"Emphasis and strong emphasis (424)"###
@@ -6449,7 +6449,7 @@ bar</strong></p>
r###"____foo__ bar__
"###,
&danger
- ),
+ )?,
r###"<p><strong><strong>foo</strong> bar</strong></p>
"###,
r###"Emphasis and strong emphasis (425)"###
@@ -6460,7 +6460,7 @@ bar</strong></p>
r###"**foo **bar****
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo <strong>bar</strong></strong></p>
"###,
r###"Emphasis and strong emphasis (426)"###
@@ -6471,7 +6471,7 @@ bar</strong></p>
r###"**foo *bar* baz**
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo <em>bar</em> baz</strong></p>
"###,
r###"Emphasis and strong emphasis (427)"###
@@ -6482,7 +6482,7 @@ bar</strong></p>
r###"**foo*bar*baz**
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo<em>bar</em>baz</strong></p>
"###,
r###"Emphasis and strong emphasis (428)"###
@@ -6493,7 +6493,7 @@ bar</strong></p>
r###"***foo* bar**
"###,
&danger
- ),
+ )?,
r###"<p><strong><em>foo</em> bar</strong></p>
"###,
r###"Emphasis and strong emphasis (429)"###
@@ -6504,7 +6504,7 @@ bar</strong></p>
r###"**foo *bar***
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo <em>bar</em></strong></p>
"###,
r###"Emphasis and strong emphasis (430)"###
@@ -6516,7 +6516,7 @@ bar</strong></p>
bim* bop**
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo <em>bar <strong>baz</strong>
bim</em> bop</strong></p>
"###,
@@ -6528,7 +6528,7 @@ bim</em> bop</strong></p>
r###"**foo [*bar*](/url)**
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo <a href="/url"><em>bar</em></a></strong></p>
"###,
r###"Emphasis and strong emphasis (432)"###
@@ -6539,7 +6539,7 @@ bim</em> bop</strong></p>
r###"__ is not an empty emphasis
"###,
&danger
- ),
+ )?,
r###"<p>__ is not an empty emphasis</p>
"###,
r###"Emphasis and strong emphasis (433)"###
@@ -6550,7 +6550,7 @@ bim</em> bop</strong></p>
r###"____ is not an empty strong emphasis
"###,
&danger
- ),
+ )?,
r###"<p>____ is not an empty strong emphasis</p>
"###,
r###"Emphasis and strong emphasis (434)"###
@@ -6561,7 +6561,7 @@ bim</em> bop</strong></p>
r###"foo ***
"###,
&danger
- ),
+ )?,
r###"<p>foo ***</p>
"###,
r###"Emphasis and strong emphasis (435)"###
@@ -6572,7 +6572,7 @@ bim</em> bop</strong></p>
r###"foo *\**
"###,
&danger
- ),
+ )?,
r###"<p>foo <em>*</em></p>
"###,
r###"Emphasis and strong emphasis (436)"###
@@ -6583,7 +6583,7 @@ bim</em> bop</strong></p>
r###"foo *_*
"###,
&danger
- ),
+ )?,
r###"<p>foo <em>_</em></p>
"###,
r###"Emphasis and strong emphasis (437)"###
@@ -6594,7 +6594,7 @@ bim</em> bop</strong></p>
r###"foo *****
"###,
&danger
- ),
+ )?,
r###"<p>foo *****</p>
"###,
r###"Emphasis and strong emphasis (438)"###
@@ -6605,7 +6605,7 @@ bim</em> bop</strong></p>
r###"foo **\***
"###,
&danger
- ),
+ )?,
r###"<p>foo <strong>*</strong></p>
"###,
r###"Emphasis and strong emphasis (439)"###
@@ -6616,7 +6616,7 @@ bim</em> bop</strong></p>
r###"foo **_**
"###,
&danger
- ),
+ )?,
r###"<p>foo <strong>_</strong></p>
"###,
r###"Emphasis and strong emphasis (440)"###
@@ -6627,7 +6627,7 @@ bim</em> bop</strong></p>
r###"**foo*
"###,
&danger
- ),
+ )?,
r###"<p>*<em>foo</em></p>
"###,
r###"Emphasis and strong emphasis (441)"###
@@ -6638,7 +6638,7 @@ bim</em> bop</strong></p>
r###"*foo**
"###,
&danger
- ),
+ )?,
r###"<p><em>foo</em>*</p>
"###,
r###"Emphasis and strong emphasis (442)"###
@@ -6649,7 +6649,7 @@ bim</em> bop</strong></p>
r###"***foo**
"###,
&danger
- ),
+ )?,
r###"<p>*<strong>foo</strong></p>
"###,
r###"Emphasis and strong emphasis (443)"###
@@ -6660,7 +6660,7 @@ bim</em> bop</strong></p>
r###"****foo*
"###,
&danger
- ),
+ )?,
r###"<p>***<em>foo</em></p>
"###,
r###"Emphasis and strong emphasis (444)"###
@@ -6671,7 +6671,7 @@ bim</em> bop</strong></p>
r###"**foo***
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo</strong>*</p>
"###,
r###"Emphasis and strong emphasis (445)"###
@@ -6682,7 +6682,7 @@ bim</em> bop</strong></p>
r###"*foo****
"###,
&danger
- ),
+ )?,
r###"<p><em>foo</em>***</p>
"###,
r###"Emphasis and strong emphasis (446)"###
@@ -6693,7 +6693,7 @@ bim</em> bop</strong></p>
r###"foo ___
"###,
&danger
- ),
+ )?,
r###"<p>foo ___</p>
"###,
r###"Emphasis and strong emphasis (447)"###
@@ -6704,7 +6704,7 @@ bim</em> bop</strong></p>
r###"foo _\__
"###,
&danger
- ),
+ )?,
r###"<p>foo <em>_</em></p>
"###,
r###"Emphasis and strong emphasis (448)"###
@@ -6715,7 +6715,7 @@ bim</em> bop</strong></p>
r###"foo _*_
"###,
&danger
- ),
+ )?,
r###"<p>foo <em>*</em></p>
"###,
r###"Emphasis and strong emphasis (449)"###
@@ -6726,7 +6726,7 @@ bim</em> bop</strong></p>
r###"foo _____
"###,
&danger
- ),
+ )?,
r###"<p>foo _____</p>
"###,
r###"Emphasis and strong emphasis (450)"###
@@ -6737,7 +6737,7 @@ bim</em> bop</strong></p>
r###"foo __\___
"###,
&danger
- ),
+ )?,
r###"<p>foo <strong>_</strong></p>
"###,
r###"Emphasis and strong emphasis (451)"###
@@ -6748,7 +6748,7 @@ bim</em> bop</strong></p>
r###"foo __*__
"###,
&danger
- ),
+ )?,
r###"<p>foo <strong>*</strong></p>
"###,
r###"Emphasis and strong emphasis (452)"###
@@ -6759,7 +6759,7 @@ bim</em> bop</strong></p>
r###"__foo_
"###,
&danger
- ),
+ )?,
r###"<p>_<em>foo</em></p>
"###,
r###"Emphasis and strong emphasis (453)"###
@@ -6770,7 +6770,7 @@ bim</em> bop</strong></p>
r###"_foo__
"###,
&danger
- ),
+ )?,
r###"<p><em>foo</em>_</p>
"###,
r###"Emphasis and strong emphasis (454)"###
@@ -6781,7 +6781,7 @@ bim</em> bop</strong></p>
r###"___foo__
"###,
&danger
- ),
+ )?,
r###"<p>_<strong>foo</strong></p>
"###,
r###"Emphasis and strong emphasis (455)"###
@@ -6792,7 +6792,7 @@ bim</em> bop</strong></p>
r###"____foo_
"###,
&danger
- ),
+ )?,
r###"<p>___<em>foo</em></p>
"###,
r###"Emphasis and strong emphasis (456)"###
@@ -6803,7 +6803,7 @@ bim</em> bop</strong></p>
r###"__foo___
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo</strong>_</p>
"###,
r###"Emphasis and strong emphasis (457)"###
@@ -6814,7 +6814,7 @@ bim</em> bop</strong></p>
r###"_foo____
"###,
&danger
- ),
+ )?,
r###"<p><em>foo</em>___</p>
"###,
r###"Emphasis and strong emphasis (458)"###
@@ -6825,7 +6825,7 @@ bim</em> bop</strong></p>
r###"**foo**
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo</strong></p>
"###,
r###"Emphasis and strong emphasis (459)"###
@@ -6836,7 +6836,7 @@ bim</em> bop</strong></p>
r###"*_foo_*
"###,
&danger
- ),
+ )?,
r###"<p><em><em>foo</em></em></p>
"###,
r###"Emphasis and strong emphasis (460)"###
@@ -6847,7 +6847,7 @@ bim</em> bop</strong></p>
r###"__foo__
"###,
&danger
- ),
+ )?,
r###"<p><strong>foo</strong></p>
"###,
r###"Emphasis and strong emphasis (461)"###
@@ -6858,7 +6858,7 @@ bim</em> bop</strong></p>
r###"_*foo*_
"###,
&danger
- ),
+ )?,
r###"<p><em><em>foo</em></em></p>
"###,
r###"Emphasis and strong emphasis (462)"###
@@ -6869,7 +6869,7 @@ bim</em> bop</strong></p>
r###"****foo****
"###,
&danger
- ),
+ )?,
r###"<p><strong><strong>foo</strong></strong></p>
"###,
r###"Emphasis and strong emphasis (463)"###
@@ -6880,7 +6880,7 @@ bim</em> bop</strong></p>
r###"____foo____
"###,
&danger
- ),
+ )?,
r###"<p><strong><strong>foo</strong></strong></p>
"###,
r###"Emphasis and strong emphasis (464)"###
@@ -6891,7 +6891,7 @@ bim</em> bop</strong></p>
r###"******foo******
"###,
&danger
- ),
+ )?,
r###"<p><strong><strong><strong>foo</strong></strong></strong></p>
"###,
r###"Emphasis and strong emphasis (465)"###
@@ -6902,7 +6902,7 @@ bim</em> bop</strong></p>
r###"***foo***
"###,
&danger
- ),
+ )?,
r###"<p><em><strong>foo</strong></em></p>
"###,
r###"Emphasis and strong emphasis (466)"###
@@ -6913,7 +6913,7 @@ bim</em> bop</strong></p>
r###"_____foo_____
"###,
&danger
- ),
+ )?,
r###"<p><em><strong><strong>foo</strong></strong></em></p>
"###,
r###"Emphasis and strong emphasis (467)"###
@@ -6924,7 +6924,7 @@ bim</em> bop</strong></p>
r###"*foo _bar* baz_
"###,
&danger
- ),
+ )?,
r###"<p><em>foo _bar</em> baz_</p>
"###,
r###"Emphasis and strong emphasis (468)"###
@@ -6935,7 +6935,7 @@ bim</em> bop</strong></p>
r###"*foo __bar *baz bim__ bam*
"###,
&danger
- ),
+ )?,
r###"<p><em>foo <strong>bar *baz bim</strong> bam</em></p>
"###,
r###"Emphasis and strong emphasis (469)"###
@@ -6946,7 +6946,7 @@ bim</em> bop</strong></p>
r###"**foo **bar baz**
"###,
&danger
- ),
+ )?,
r###"<p>**foo <strong>bar baz</strong></p>
"###,
r###"Emphasis and strong emphasis (470)"###
@@ -6957,7 +6957,7 @@ bim</em> bop</strong></p>
r###"*foo *bar baz*
"###,
&danger
- ),
+ )?,
r###"<p>*foo <em>bar baz</em></p>
"###,
r###"Emphasis and strong emphasis (471)"###
@@ -6968,7 +6968,7 @@ bim</em> bop</strong></p>
r###"*[bar*](/url)
"###,
&danger
- ),
+ )?,
r###"<p>*<a href="/url">bar*</a></p>
"###,
r###"Emphasis and strong emphasis (472)"###
@@ -6979,7 +6979,7 @@ bim</em> bop</strong></p>
r###"_foo [bar_](/url)
"###,
&danger
- ),
+ )?,
r###"<p>_foo <a href="/url">bar_</a></p>
"###,
r###"Emphasis and strong emphasis (473)"###
@@ -6990,7 +6990,7 @@ bim</em> bop</strong></p>
r###"*<img src="foo" title="*"/>
"###,
&danger
- ),
+ )?,
r###"<p>*<img src="foo" title="*"/></p>
"###,
r###"Emphasis and strong emphasis (474)"###
@@ -7001,7 +7001,7 @@ bim</em> bop</strong></p>
r###"**<a href="**">
"###,
&danger
- ),
+ )?,
r###"<p>**<a href="**"></p>
"###,
r###"Emphasis and strong emphasis (475)"###
@@ -7012,7 +7012,7 @@ bim</em> bop</strong></p>
r###"__<a href="__">
"###,
&danger
- ),
+ )?,
r###"<p>__<a href="__"></p>
"###,
r###"Emphasis and strong emphasis (476)"###
@@ -7023,7 +7023,7 @@ bim</em> bop</strong></p>
r###"*a `*`*
"###,
&danger
- ),
+ )?,
r###"<p><em>a <code>*</code></em></p>
"###,
r###"Emphasis and strong emphasis (477)"###
@@ -7034,7 +7034,7 @@ bim</em> bop</strong></p>
r###"_a `_`_
"###,
&danger
- ),
+ )?,
r###"<p><em>a <code>_</code></em></p>
"###,
r###"Emphasis and strong emphasis (478)"###
@@ -7045,7 +7045,7 @@ bim</em> bop</strong></p>
r###"**a<http://foo.bar/?q=**>
"###,
&danger
- ),
+ )?,
r###"<p>**a<a href="http://foo.bar/?q=**">http://foo.bar/?q=**</a></p>
"###,
r###"Emphasis and strong emphasis (479)"###
@@ -7056,7 +7056,7 @@ bim</em> bop</strong></p>
r###"__a<http://foo.bar/?q=__>
"###,
&danger
- ),
+ )?,
r###"<p>__a<a href="http://foo.bar/?q=__">http://foo.bar/?q=__</a></p>
"###,
r###"Emphasis and strong emphasis (480)"###
@@ -7067,7 +7067,7 @@ bim</em> bop</strong></p>
r###"[link](/uri "title")
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri" title="title">link</a></p>
"###,
r###"Links (481)"###
@@ -7078,7 +7078,7 @@ bim</em> bop</strong></p>
r###"[link](/uri)
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri">link</a></p>
"###,
r###"Links (482)"###
@@ -7089,7 +7089,7 @@ bim</em> bop</strong></p>
r###"[](./target.md)
"###,
&danger
- ),
+ )?,
r###"<p><a href="./target.md"></a></p>
"###,
r###"Links (483)"###
@@ -7100,7 +7100,7 @@ bim</em> bop</strong></p>
r###"[link]()
"###,
&danger
- ),
+ )?,
r###"<p><a href="">link</a></p>
"###,
r###"Links (484)"###
@@ -7111,7 +7111,7 @@ bim</em> bop</strong></p>
r###"[link](<>)
"###,
&danger
- ),
+ )?,
r###"<p><a href="">link</a></p>
"###,
r###"Links (485)"###
@@ -7122,7 +7122,7 @@ bim</em> bop</strong></p>
r###"[]()
"###,
&danger
- ),
+ )?,
r###"<p><a href=""></a></p>
"###,
r###"Links (486)"###
@@ -7133,7 +7133,7 @@ bim</em> bop</strong></p>
r###"[link](/my uri)
"###,
&danger
- ),
+ )?,
r###"<p>[link](/my uri)</p>
"###,
r###"Links (487)"###
@@ -7144,7 +7144,7 @@ bim</em> bop</strong></p>
r###"[link](</my uri>)
"###,
&danger
- ),
+ )?,
r###"<p><a href="/my%20uri">link</a></p>
"###,
r###"Links (488)"###
@@ -7156,7 +7156,7 @@ bim</em> bop</strong></p>
bar)
"###,
&danger
- ),
+ )?,
r###"<p>[link](foo
bar)</p>
"###,
@@ -7169,7 +7169,7 @@ bar)</p>
bar>)
"###,
&danger
- ),
+ )?,
r###"<p>[link](<foo
bar>)</p>
"###,
@@ -7181,7 +7181,7 @@ bar>)</p>
r###"[a](<b)c>)
"###,
&danger
- ),
+ )?,
r###"<p><a href="b)c">a</a></p>
"###,
r###"Links (491)"###
@@ -7192,7 +7192,7 @@ bar>)</p>
r###"[link](<foo\>)
"###,
&danger
- ),
+ )?,
r###"<p>[link](&lt;foo&gt;)</p>
"###,
r###"Links (492)"###
@@ -7205,7 +7205,7 @@ bar>)</p>
[a](<b>c)
"###,
&danger
- ),
+ )?,
r###"<p>[a](&lt;b)c
[a](&lt;b)c&gt;
[a](<b>c)</p>
@@ -7218,7 +7218,7 @@ bar>)</p>
r###"[link](\(foo\))
"###,
&danger
- ),
+ )?,
r###"<p><a href="(foo)">link</a></p>
"###,
r###"Links (494)"###
@@ -7229,7 +7229,7 @@ bar>)</p>
r###"[link](foo(and(bar)))
"###,
&danger
- ),
+ )?,
r###"<p><a href="foo(and(bar))">link</a></p>
"###,
r###"Links (495)"###
@@ -7240,7 +7240,7 @@ bar>)</p>
r###"[link](foo(and(bar))
"###,
&danger
- ),
+ )?,
r###"<p>[link](foo(and(bar))</p>
"###,
r###"Links (496)"###
@@ -7251,7 +7251,7 @@ bar>)</p>
r###"[link](foo\(and\(bar\))
"###,
&danger
- ),
+ )?,
r###"<p><a href="foo(and(bar)">link</a></p>
"###,
r###"Links (497)"###
@@ -7262,7 +7262,7 @@ bar>)</p>
r###"[link](<foo(and(bar)>)
"###,
&danger
- ),
+ )?,
r###"<p><a href="foo(and(bar)">link</a></p>
"###,
r###"Links (498)"###
@@ -7273,7 +7273,7 @@ bar>)</p>
r###"[link](foo\)\:)
"###,
&danger
- ),
+ )?,
r###"<p><a href="foo):">link</a></p>
"###,
r###"Links (499)"###
@@ -7288,7 +7288,7 @@ bar>)</p>
[link](http://example.com?foo=3#frag)
"###,
&danger
- ),
+ )?,
r###"<p><a href="#fragment">link</a></p>
<p><a href="http://example.com#fragment">link</a></p>
<p><a href="http://example.com?foo=3#frag">link</a></p>
@@ -7301,7 +7301,7 @@ bar>)</p>
r###"[link](foo\bar)
"###,
&danger
- ),
+ )?,
r###"<p><a href="foo%5Cbar">link</a></p>
"###,
r###"Links (501)"###
@@ -7312,7 +7312,7 @@ bar>)</p>
r###"[link](foo%20b&auml;)
"###,
&danger
- ),
+ )?,
r###"<p><a href="foo%20b%C3%A4">link</a></p>
"###,
r###"Links (502)"###
@@ -7323,7 +7323,7 @@ bar>)</p>
r###"[link]("title")
"###,
&danger
- ),
+ )?,
r###"<p><a href="%22title%22">link</a></p>
"###,
r###"Links (503)"###
@@ -7336,7 +7336,7 @@ bar>)</p>
[link](/url (title))
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="title">link</a>
<a href="/url" title="title">link</a>
<a href="/url" title="title">link</a></p>
@@ -7349,7 +7349,7 @@ bar>)</p>
r###"[link](/url "title \"&quot;")
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="title &quot;&quot;">link</a></p>
"###,
r###"Links (505)"###
@@ -7360,7 +7360,7 @@ bar>)</p>
r###"[link](/url "title")
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url%C2%A0%22title%22">link</a></p>
"###,
r###"Links (506)"###
@@ -7371,7 +7371,7 @@ bar>)</p>
r###"[link](/url "title "and" title")
"###,
&danger
- ),
+ )?,
r###"<p>[link](/url &quot;title &quot;and&quot; title&quot;)</p>
"###,
r###"Links (507)"###
@@ -7382,7 +7382,7 @@ bar>)</p>
r###"[link](/url 'title "and" title')
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="title &quot;and&quot; title">link</a></p>
"###,
r###"Links (508)"###
@@ -7394,7 +7394,7 @@ bar>)</p>
"title" )
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri" title="title">link</a></p>
"###,
r###"Links (509)"###
@@ -7405,7 +7405,7 @@ bar>)</p>
r###"[link] (/uri)
"###,
&danger
- ),
+ )?,
r###"<p>[link] (/uri)</p>
"###,
r###"Links (510)"###
@@ -7416,7 +7416,7 @@ bar>)</p>
r###"[link [foo [bar]]](/uri)
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri">link [foo [bar]]</a></p>
"###,
r###"Links (511)"###
@@ -7427,7 +7427,7 @@ bar>)</p>
r###"[link] bar](/uri)
"###,
&danger
- ),
+ )?,
r###"<p>[link] bar](/uri)</p>
"###,
r###"Links (512)"###
@@ -7438,7 +7438,7 @@ bar>)</p>
r###"[link [bar](/uri)
"###,
&danger
- ),
+ )?,
r###"<p>[link <a href="/uri">bar</a></p>
"###,
r###"Links (513)"###
@@ -7449,7 +7449,7 @@ bar>)</p>
r###"[link \[bar](/uri)
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri">link [bar</a></p>
"###,
r###"Links (514)"###
@@ -7460,7 +7460,7 @@ bar>)</p>
r###"[link *foo **bar** `#`*](/uri)
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri">link <em>foo <strong>bar</strong> <code>#</code></em></a></p>
"###,
r###"Links (515)"###
@@ -7471,7 +7471,7 @@ bar>)</p>
r###"[![moon](moon.jpg)](/uri)
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri"><img src="moon.jpg" alt="moon" /></a></p>
"###,
r###"Links (516)"###
@@ -7482,7 +7482,7 @@ bar>)</p>
r###"[foo [bar](/uri)](/uri)
"###,
&danger
- ),
+ )?,
r###"<p>[foo <a href="/uri">bar</a>](/uri)</p>
"###,
r###"Links (517)"###
@@ -7493,7 +7493,7 @@ bar>)</p>
r###"[foo *[bar [baz](/uri)](/uri)*](/uri)
"###,
&danger
- ),
+ )?,
r###"<p>[foo <em>[bar <a href="/uri">baz</a>](/uri)</em>](/uri)</p>
"###,
r###"Links (518)"###
@@ -7504,7 +7504,7 @@ bar>)</p>
r###"![[[foo](uri1)](uri2)](uri3)
"###,
&danger
- ),
+ )?,
r###"<p><img src="uri3" alt="[foo](uri2)" /></p>
"###,
r###"Links (519)"###
@@ -7515,7 +7515,7 @@ bar>)</p>
r###"*[foo*](/uri)
"###,
&danger
- ),
+ )?,
r###"<p>*<a href="/uri">foo*</a></p>
"###,
r###"Links (520)"###
@@ -7526,7 +7526,7 @@ bar>)</p>
r###"[foo *bar](baz*)
"###,
&danger
- ),
+ )?,
r###"<p><a href="baz*">foo *bar</a></p>
"###,
r###"Links (521)"###
@@ -7537,7 +7537,7 @@ bar>)</p>
r###"*foo [bar* baz]
"###,
&danger
- ),
+ )?,
r###"<p><em>foo [bar</em> baz]</p>
"###,
r###"Links (522)"###
@@ -7548,7 +7548,7 @@ bar>)</p>
r###"[foo <bar attr="](baz)">
"###,
&danger
- ),
+ )?,
r###"<p>[foo <bar attr="](baz)"></p>
"###,
r###"Links (523)"###
@@ -7559,7 +7559,7 @@ bar>)</p>
r###"[foo`](/uri)`
"###,
&danger
- ),
+ )?,
r###"<p>[foo<code>](/uri)</code></p>
"###,
r###"Links (524)"###
@@ -7570,7 +7570,7 @@ bar>)</p>
r###"[foo<http://example.com/?search=](uri)>
"###,
&danger
- ),
+ )?,
r###"<p>[foo<a href="http://example.com/?search=%5D(uri)">http://example.com/?search=](uri)</a></p>
"###,
r###"Links (525)"###
@@ -7583,7 +7583,7 @@ bar>)</p>
[bar]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="title">foo</a></p>
"###,
r###"Links (526)"###
@@ -7596,7 +7596,7 @@ bar>)</p>
[ref]: /uri
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri">link [foo [bar]]</a></p>
"###,
r###"Links (527)"###
@@ -7609,7 +7609,7 @@ bar>)</p>
[ref]: /uri
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri">link [bar</a></p>
"###,
r###"Links (528)"###
@@ -7622,7 +7622,7 @@ bar>)</p>
[ref]: /uri
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri">link <em>foo <strong>bar</strong> <code>#</code></em></a></p>
"###,
r###"Links (529)"###
@@ -7635,7 +7635,7 @@ bar>)</p>
[ref]: /uri
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri"><img src="moon.jpg" alt="moon" /></a></p>
"###,
r###"Links (530)"###
@@ -7648,7 +7648,7 @@ bar>)</p>
[ref]: /uri
"###,
&danger
- ),
+ )?,
r###"<p>[foo <a href="/uri">bar</a>]<a href="/uri">ref</a></p>
"###,
r###"Links (531)"###
@@ -7661,7 +7661,7 @@ bar>)</p>
[ref]: /uri
"###,
&danger
- ),
+ )?,
r###"<p>[foo <em>bar <a href="/uri">baz</a></em>]<a href="/uri">ref</a></p>
"###,
r###"Links (532)"###
@@ -7674,7 +7674,7 @@ bar>)</p>
[ref]: /uri
"###,
&danger
- ),
+ )?,
r###"<p>*<a href="/uri">foo*</a></p>
"###,
r###"Links (533)"###
@@ -7687,7 +7687,7 @@ bar>)</p>
[ref]: /uri
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri">foo *bar</a>*</p>
"###,
r###"Links (534)"###
@@ -7700,7 +7700,7 @@ bar>)</p>
[ref]: /uri
"###,
&danger
- ),
+ )?,
r###"<p>[foo <bar attr="][ref]"></p>
"###,
r###"Links (535)"###
@@ -7713,7 +7713,7 @@ bar>)</p>
[ref]: /uri
"###,
&danger
- ),
+ )?,
r###"<p>[foo<code>][ref]</code></p>
"###,
r###"Links (536)"###
@@ -7726,7 +7726,7 @@ bar>)</p>
[ref]: /uri
"###,
&danger
- ),
+ )?,
r###"<p>[foo<a href="http://example.com/?search=%5D%5Bref%5D">http://example.com/?search=][ref]</a></p>
"###,
r###"Links (537)"###
@@ -7739,7 +7739,7 @@ bar>)</p>
[bar]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="title">foo</a></p>
"###,
r###"Links (538)"###
@@ -7752,7 +7752,7 @@ bar>)</p>
[SS]: /url
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url">ẞ</a></p>
"###,
r###"Links (539)"###
@@ -7766,7 +7766,7 @@ bar>)</p>
[Baz][Foo bar]
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url">Baz</a></p>
"###,
r###"Links (540)"###
@@ -7779,7 +7779,7 @@ bar>)</p>
[bar]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p>[foo] <a href="/url" title="title">bar</a></p>
"###,
r###"Links (541)"###
@@ -7793,7 +7793,7 @@ bar>)</p>
[bar]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p>[foo]
<a href="/url" title="title">bar</a></p>
"###,
@@ -7809,7 +7809,7 @@ bar>)</p>
[bar][foo]
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url1">bar</a></p>
"###,
r###"Links (543)"###
@@ -7822,7 +7822,7 @@ bar>)</p>
[foo!]: /url
"###,
&danger
- ),
+ )?,
r###"<p>[bar][foo!]</p>
"###,
r###"Links (544)"###
@@ -7835,7 +7835,7 @@ bar>)</p>
[ref[]: /uri
"###,
&danger
- ),
+ )?,
r###"<p>[foo][ref[]</p>
<p>[ref[]: /uri</p>
"###,
@@ -7849,7 +7849,7 @@ bar>)</p>
[ref[bar]]: /uri
"###,
&danger
- ),
+ )?,
r###"<p>[foo][ref[bar]]</p>
<p>[ref[bar]]: /uri</p>
"###,
@@ -7863,7 +7863,7 @@ bar>)</p>
[[[foo]]]: /url
"###,
&danger
- ),
+ )?,
r###"<p>[[[foo]]]</p>
<p>[[[foo]]]: /url</p>
"###,
@@ -7877,7 +7877,7 @@ bar>)</p>
[ref\[]: /uri
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri">foo</a></p>
"###,
r###"Links (548)"###
@@ -7890,7 +7890,7 @@ bar>)</p>
[bar\\]
"###,
&danger
- ),
+ )?,
r###"<p><a href="/uri">bar\</a></p>
"###,
r###"Links (549)"###
@@ -7903,7 +7903,7 @@ bar>)</p>
[]: /uri
"###,
&danger
- ),
+ )?,
r###"<p>[]</p>
<p>[]: /uri</p>
"###,
@@ -7919,7 +7919,7 @@ bar>)</p>
]: /uri
"###,
&danger
- ),
+ )?,
r###"<p>[
]</p>
<p>[
@@ -7935,7 +7935,7 @@ bar>)</p>
[foo]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="title">foo</a></p>
"###,
r###"Links (552)"###
@@ -7948,7 +7948,7 @@ bar>)</p>
[*foo* bar]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="title"><em>foo</em> bar</a></p>
"###,
r###"Links (553)"###
@@ -7961,7 +7961,7 @@ bar>)</p>
[foo]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="title">Foo</a></p>
"###,
r###"Links (554)"###
@@ -7975,7 +7975,7 @@ bar>)</p>
[foo]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="title">foo</a>
[]</p>
"###,
@@ -7989,7 +7989,7 @@ bar>)</p>
[foo]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="title">foo</a></p>
"###,
r###"Links (556)"###
@@ -8002,7 +8002,7 @@ bar>)</p>
[*foo* bar]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="title"><em>foo</em> bar</a></p>
"###,
r###"Links (557)"###
@@ -8015,7 +8015,7 @@ bar>)</p>
[*foo* bar]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p>[<a href="/url" title="title"><em>foo</em> bar</a>]</p>
"###,
r###"Links (558)"###
@@ -8028,7 +8028,7 @@ bar>)</p>
[foo]: /url
"###,
&danger
- ),
+ )?,
r###"<p>[[bar <a href="/url">foo</a></p>
"###,
r###"Links (559)"###
@@ -8041,7 +8041,7 @@ bar>)</p>
[foo]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url" title="title">Foo</a></p>
"###,
r###"Links (560)"###
@@ -8054,7 +8054,7 @@ bar>)</p>
[foo]: /url
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url">foo</a> bar</p>
"###,
r###"Links (561)"###
@@ -8067,7 +8067,7 @@ bar>)</p>
[foo]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p>[foo]</p>
"###,
r###"Links (562)"###
@@ -8080,7 +8080,7 @@ bar>)</p>
*[foo*]
"###,
&danger
- ),
+ )?,
r###"<p>*<a href="/url">foo*</a></p>
"###,
r###"Links (563)"###
@@ -8094,7 +8094,7 @@ bar>)</p>
[bar]: /url2
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url2">foo</a></p>
"###,
r###"Links (564)"###
@@ -8107,7 +8107,7 @@ bar>)</p>
[foo]: /url1
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url1">foo</a></p>
"###,
r###"Links (565)"###
@@ -8120,7 +8120,7 @@ bar>)</p>
[foo]: /url1
"###,
&danger
- ),
+ )?,
r###"<p><a href="">foo</a></p>
"###,
r###"Links (566)"###
@@ -8133,7 +8133,7 @@ bar>)</p>
[foo]: /url1
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url1">foo</a>(not a link)</p>
"###,
r###"Links (567)"###
@@ -8146,7 +8146,7 @@ bar>)</p>
[baz]: /url
"###,
&danger
- ),
+ )?,
r###"<p>[foo]<a href="/url">bar</a></p>
"###,
r###"Links (568)"###
@@ -8160,7 +8160,7 @@ bar>)</p>
[bar]: /url2
"###,
&danger
- ),
+ )?,
r###"<p><a href="/url2">foo</a><a href="/url1">baz</a></p>
"###,
r###"Links (569)"###
@@ -8174,7 +8174,7 @@ bar>)</p>
[foo]: /url2
"###,
&danger
- ),
+ )?,
r###"<p>[foo]<a href="/url1">bar</a></p>
"###,
r###"Links (570)"###
@@ -8185,7 +8185,7 @@ bar>)</p>
r###"![foo](/url "title")
"###,
&danger
- ),
+ )?,
r###"<p><img src="/url" alt="foo" title="title" /></p>
"###,
r###"Images (571)"###
@@ -8198,7 +8198,7 @@ bar>)</p>
[foo *bar*]: train.jpg "train & tracks"
"###,
&danger
- ),
+ )?,
r###"<p><img src="train.jpg" alt="foo bar" title="train &amp; tracks" /></p>
"###,
r###"Images (572)"###
@@ -8209,7 +8209,7 @@ bar>)</p>
r###"![foo ![bar](/url)](/url2)
"###,
&danger
- ),
+ )?,
r###"<p><img src="/url2" alt="foo bar" /></p>
"###,
r###"Images (573)"###
@@ -8220,7 +8220,7 @@ bar>)</p>
r###"![foo [bar](/url)](/url2)
"###,
&danger
- ),
+ )?,
r###"<p><img src="/url2" alt="foo bar" /></p>
"###,
r###"Images (574)"###
@@ -8233,7 +8233,7 @@ bar>)</p>
[foo *bar*]: train.jpg "train & tracks"
"###,
&danger
- ),
+ )?,
r###"<p><img src="train.jpg" alt="foo bar" title="train &amp; tracks" /></p>
"###,
r###"Images (575)"###
@@ -8246,7 +8246,7 @@ bar>)</p>
[FOOBAR]: train.jpg "train & tracks"
"###,
&danger
- ),
+ )?,
r###"<p><img src="train.jpg" alt="foo bar" title="train &amp; tracks" /></p>
"###,
r###"Images (576)"###
@@ -8257,7 +8257,7 @@ bar>)</p>
r###"![foo](train.jpg)
"###,
&danger
- ),
+ )?,
r###"<p><img src="train.jpg" alt="foo" /></p>
"###,
r###"Images (577)"###
@@ -8268,7 +8268,7 @@ bar>)</p>
r###"My ![foo bar](/path/to/train.jpg "title" )
"###,
&danger
- ),
+ )?,
r###"<p>My <img src="/path/to/train.jpg" alt="foo bar" title="title" /></p>
"###,
r###"Images (578)"###
@@ -8279,7 +8279,7 @@ bar>)</p>
r###"![foo](<url>)
"###,
&danger
- ),
+ )?,
r###"<p><img src="url" alt="foo" /></p>
"###,
r###"Images (579)"###
@@ -8290,7 +8290,7 @@ bar>)</p>
r###"![](/url)
"###,
&danger
- ),
+ )?,
r###"<p><img src="/url" alt="" /></p>
"###,
r###"Images (580)"###
@@ -8303,7 +8303,7 @@ bar>)</p>
[bar]: /url
"###,
&danger
- ),
+ )?,
r###"<p><img src="/url" alt="foo" /></p>
"###,
r###"Images (581)"###
@@ -8316,7 +8316,7 @@ bar>)</p>
[BAR]: /url
"###,
&danger
- ),
+ )?,
r###"<p><img src="/url" alt="foo" /></p>
"###,
r###"Images (582)"###
@@ -8329,7 +8329,7 @@ bar>)</p>
[foo]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><img src="/url" alt="foo" title="title" /></p>
"###,
r###"Images (583)"###
@@ -8342,7 +8342,7 @@ bar>)</p>
[*foo* bar]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><img src="/url" alt="foo bar" title="title" /></p>
"###,
r###"Images (584)"###
@@ -8355,7 +8355,7 @@ bar>)</p>
[foo]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><img src="/url" alt="Foo" title="title" /></p>
"###,
r###"Images (585)"###
@@ -8369,7 +8369,7 @@ bar>)</p>
[foo]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><img src="/url" alt="foo" title="title" />
[]</p>
"###,
@@ -8383,7 +8383,7 @@ bar>)</p>
[foo]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><img src="/url" alt="foo" title="title" /></p>
"###,
r###"Images (587)"###
@@ -8396,7 +8396,7 @@ bar>)</p>
[*foo* bar]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><img src="/url" alt="foo bar" title="title" /></p>
"###,
r###"Images (588)"###
@@ -8409,7 +8409,7 @@ bar>)</p>
[[foo]]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p>![[foo]]</p>
<p>[[foo]]: /url &quot;title&quot;</p>
"###,
@@ -8423,7 +8423,7 @@ bar>)</p>
[foo]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p><img src="/url" alt="Foo" title="title" /></p>
"###,
r###"Images (590)"###
@@ -8436,7 +8436,7 @@ bar>)</p>
[foo]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p>![foo]</p>
"###,
r###"Images (591)"###
@@ -8449,7 +8449,7 @@ bar>)</p>
[foo]: /url "title"
"###,
&danger
- ),
+ )?,
r###"<p>!<a href="/url" title="title">foo</a></p>
"###,
r###"Images (592)"###
@@ -8460,7 +8460,7 @@ bar>)</p>
r###"<http://foo.bar.baz>
"###,
&danger
- ),
+ )?,
r###"<p><a href="http://foo.bar.baz">http://foo.bar.baz</a></p>
"###,
r###"Autolinks (593)"###
@@ -8471,7 +8471,7 @@ bar>)</p>
r###"<http://foo.bar.baz/test?q=hello&id=22&boolean>
"###,
&danger
- ),
+ )?,
r###"<p><a href="http://foo.bar.baz/test?q=hello&amp;id=22&amp;boolean">http://foo.bar.baz/test?q=hello&amp;id=22&amp;boolean</a></p>
"###,
r###"Autolinks (594)"###
@@ -8482,7 +8482,7 @@ bar>)</p>
r###"<irc://foo.bar:2233/baz>
"###,
&danger
- ),
+ )?,
r###"<p><a href="irc://foo.bar:2233/baz">irc://foo.bar:2233/baz</a></p>
"###,
r###"Autolinks (595)"###
@@ -8493,7 +8493,7 @@ bar>)</p>
r###"<MAILTO:FOO@BAR.BAZ>
"###,
&danger
- ),
+ )?,
r###"<p><a href="MAILTO:FOO@BAR.BAZ">MAILTO:FOO@BAR.BAZ</a></p>
"###,
r###"Autolinks (596)"###
@@ -8504,7 +8504,7 @@ bar>)</p>
r###"<a+b+c:d>
"###,
&danger
- ),
+ )?,
r###"<p><a href="a+b+c:d">a+b+c:d</a></p>
"###,
r###"Autolinks (597)"###
@@ -8515,7 +8515,7 @@ bar>)</p>
r###"<made-up-scheme://foo,bar>
"###,
&danger
- ),
+ )?,
r###"<p><a href="made-up-scheme://foo,bar">made-up-scheme://foo,bar</a></p>
"###,
r###"Autolinks (598)"###
@@ -8526,7 +8526,7 @@ bar>)</p>
r###"<http://../>
"###,
&danger
- ),
+ )?,
r###"<p><a href="http://../">http://../</a></p>
"###,
r###"Autolinks (599)"###
@@ -8537,7 +8537,7 @@ bar>)</p>
r###"<localhost:5001/foo>
"###,
&danger
- ),
+ )?,
r###"<p><a href="localhost:5001/foo">localhost:5001/foo</a></p>
"###,
r###"Autolinks (600)"###
@@ -8548,7 +8548,7 @@ bar>)</p>
r###"<http://foo.bar/baz bim>
"###,
&danger
- ),
+ )?,
r###"<p>&lt;http://foo.bar/baz bim&gt;</p>
"###,
r###"Autolinks (601)"###
@@ -8559,7 +8559,7 @@ bar>)</p>
r###"<http://example.com/\[\>
"###,
&danger
- ),
+ )?,
r###"<p><a href="http://example.com/%5C%5B%5C">http://example.com/\[\</a></p>
"###,
r###"Autolinks (602)"###
@@ -8570,7 +8570,7 @@ bar>)</p>
r###"<foo@bar.example.com>
"###,
&danger
- ),
+ )?,
r###"<p><a href="mailto:foo@bar.example.com">foo@bar.example.com</a></p>
"###,
r###"Autolinks (603)"###
@@ -8581,7 +8581,7 @@ bar>)</p>
r###"<foo+special@Bar.baz-bar0.com>
"###,
&danger
- ),
+ )?,
r###"<p><a href="mailto:foo+special@Bar.baz-bar0.com">foo+special@Bar.baz-bar0.com</a></p>
"###,
r###"Autolinks (604)"###
@@ -8592,7 +8592,7 @@ bar>)</p>
r###"<foo\+@bar.example.com>
"###,
&danger
- ),
+ )?,
r###"<p>&lt;foo+@bar.example.com&gt;</p>
"###,
r###"Autolinks (605)"###
@@ -8603,7 +8603,7 @@ bar>)</p>
r###"<>
"###,
&danger
- ),
+ )?,
r###"<p>&lt;&gt;</p>
"###,
r###"Autolinks (606)"###
@@ -8614,7 +8614,7 @@ bar>)</p>
r###"< http://foo.bar >
"###,
&danger
- ),
+ )?,
r###"<p>&lt; http://foo.bar &gt;</p>
"###,
r###"Autolinks (607)"###
@@ -8625,7 +8625,7 @@ bar>)</p>
r###"<m:abc>
"###,
&danger
- ),
+ )?,
r###"<p>&lt;m:abc&gt;</p>
"###,
r###"Autolinks (608)"###
@@ -8636,7 +8636,7 @@ bar>)</p>
r###"<foo.bar.baz>
"###,
&danger
- ),
+ )?,
r###"<p>&lt;foo.bar.baz&gt;</p>
"###,
r###"Autolinks (609)"###
@@ -8647,7 +8647,7 @@ bar>)</p>
r###"http://example.com
"###,
&danger
- ),
+ )?,
r###"<p>http://example.com</p>
"###,
r###"Autolinks (610)"###
@@ -8658,7 +8658,7 @@ bar>)</p>
r###"foo@bar.example.com
"###,
&danger
- ),
+ )?,
r###"<p>foo@bar.example.com</p>
"###,
r###"Autolinks (611)"###
@@ -8669,7 +8669,7 @@ bar>)</p>
r###"<a><bab><c2c>
"###,
&danger
- ),
+ )?,
r###"<p><a><bab><c2c></p>
"###,
r###"Raw HTML (612)"###
@@ -8680,7 +8680,7 @@ bar>)</p>
r###"<a/><b2/>
"###,
&danger
- ),
+ )?,
r###"<p><a/><b2/></p>
"###,
r###"Raw HTML (613)"###
@@ -8692,7 +8692,7 @@ bar>)</p>
data="foo" >
"###,
&danger
- ),
+ )?,
r###"<p><a /><b2
data="foo" ></p>
"###,
@@ -8705,7 +8705,7 @@ data="foo" ></p>
_boolean zoop:33=zoop:33 />
"###,
&danger
- ),
+ )?,
r###"<p><a foo="bar" bam = 'baz <em>"</em>'
_boolean zoop:33=zoop:33 /></p>
"###,
@@ -8717,7 +8717,7 @@ _boolean zoop:33=zoop:33 /></p>
r###"Foo <responsive-image src="foo.jpg" />
"###,
&danger
- ),
+ )?,
r###"<p>Foo <responsive-image src="foo.jpg" /></p>
"###,
r###"Raw HTML (616)"###
@@ -8728,7 +8728,7 @@ _boolean zoop:33=zoop:33 /></p>
r###"<33> <__>
"###,
&danger
- ),
+ )?,
r###"<p>&lt;33&gt; &lt;__&gt;</p>
"###,
r###"Raw HTML (617)"###
@@ -8739,7 +8739,7 @@ _boolean zoop:33=zoop:33 /></p>
r###"<a h*#ref="hi">
"###,
&danger
- ),
+ )?,
r###"<p>&lt;a h*#ref=&quot;hi&quot;&gt;</p>
"###,
r###"Raw HTML (618)"###
@@ -8750,7 +8750,7 @@ _boolean zoop:33=zoop:33 /></p>
r###"<a href="hi'> <a href=hi'>
"###,
&danger
- ),
+ )?,
r###"<p>&lt;a href=&quot;hi'&gt; &lt;a href=hi'&gt;</p>
"###,
r###"Raw HTML (619)"###
@@ -8764,7 +8764,7 @@ foo><bar/ >
bim!bop />
"###,
&danger
- ),
+ )?,
r###"<p>&lt; a&gt;&lt;
foo&gt;&lt;bar/ &gt;
&lt;foo bar=baz
@@ -8778,7 +8778,7 @@ bim!bop /&gt;</p>
r###"<a href='bar'title=title>
"###,
&danger
- ),
+ )?,
r###"<p>&lt;a href='bar'title=title&gt;</p>
"###,
r###"Raw HTML (621)"###
@@ -8789,7 +8789,7 @@ bim!bop /&gt;</p>
r###"</a></foo >
"###,
&danger
- ),
+ )?,
r###"<p></a></foo ></p>
"###,
r###"Raw HTML (622)"###
@@ -8800,7 +8800,7 @@ bim!bop /&gt;</p>
r###"</a href="foo">
"###,
&danger
- ),
+ )?,
r###"<p>&lt;/a href=&quot;foo&quot;&gt;</p>
"###,
r###"Raw HTML (623)"###
@@ -8812,7 +8812,7 @@ bim!bop /&gt;</p>
comment - with hyphen -->
"###,
&danger
- ),
+ )?,
r###"<p>foo <!-- this is a
comment - with hyphen --></p>
"###,
@@ -8824,7 +8824,7 @@ comment - with hyphen --></p>
r###"foo <!-- not a comment -- two hyphens -->
"###,
&danger
- ),
+ )?,
r###"<p>foo &lt;!-- not a comment -- two hyphens --&gt;</p>
"###,
r###"Raw HTML (625)"###
@@ -8837,7 +8837,7 @@ comment - with hyphen --></p>
foo <!-- foo--->
"###,
&danger
- ),
+ )?,
r###"<p>foo &lt;!--&gt; foo --&gt;</p>
<p>foo &lt;!-- foo---&gt;</p>
"###,
@@ -8849,7 +8849,7 @@ foo <!-- foo--->
r###"foo <?php echo $a; ?>
"###,
&danger
- ),
+ )?,
r###"<p>foo <?php echo $a; ?></p>
"###,
r###"Raw HTML (627)"###
@@ -8860,7 +8860,7 @@ foo <!-- foo--->
r###"foo <!ELEMENT br EMPTY>
"###,
&danger
- ),
+ )?,
r###"<p>foo <!ELEMENT br EMPTY></p>
"###,
r###"Raw HTML (628)"###
@@ -8871,7 +8871,7 @@ foo <!-- foo--->
r###"foo <![CDATA[>&<]]>
"###,
&danger
- ),
+ )?,
r###"<p>foo <![CDATA[>&<]]></p>
"###,
r###"Raw HTML (629)"###
@@ -8882,7 +8882,7 @@ foo <!-- foo--->
r###"foo <a href="&ouml;">
"###,
&danger
- ),
+ )?,
r###"<p>foo <a href="&ouml;"></p>
"###,
r###"Raw HTML (630)"###
@@ -8893,7 +8893,7 @@ foo <!-- foo--->
r###"foo <a href="\*">
"###,
&danger
- ),
+ )?,
r###"<p>foo <a href="\*"></p>
"###,
r###"Raw HTML (631)"###
@@ -8904,7 +8904,7 @@ foo <!-- foo--->
r###"<a href="\"">
"###,
&danger
- ),
+ )?,
r###"<p>&lt;a href=&quot;&quot;&quot;&gt;</p>
"###,
r###"Raw HTML (632)"###
@@ -8916,7 +8916,7 @@ foo <!-- foo--->
baz
"###,
&danger
- ),
+ )?,
r###"<p>foo<br />
baz</p>
"###,
@@ -8929,7 +8929,7 @@ baz</p>
baz
"###,
&danger
- ),
+ )?,
r###"<p>foo<br />
baz</p>
"###,
@@ -8942,7 +8942,7 @@ baz</p>
baz
"###,
&danger
- ),
+ )?,
r###"<p>foo<br />
baz</p>
"###,
@@ -8955,7 +8955,7 @@ baz</p>
bar
"###,
&danger
- ),
+ )?,
r###"<p>foo<br />
bar</p>
"###,
@@ -8968,7 +8968,7 @@ bar</p>
bar
"###,
&danger
- ),
+ )?,
r###"<p>foo<br />
bar</p>
"###,
@@ -8981,7 +8981,7 @@ bar</p>
bar*
"###,
&danger
- ),
+ )?,
r###"<p><em>foo<br />
bar</em></p>
"###,
@@ -8994,7 +8994,7 @@ bar</em></p>
bar*
"###,
&danger
- ),
+ )?,
r###"<p><em>foo<br />
bar</em></p>
"###,
@@ -9007,7 +9007,7 @@ bar</em></p>
span`
"###,
&danger
- ),
+ )?,
r###"<p><code>code span</code></p>
"###,
r###"Hard line breaks (640)"###
@@ -9019,7 +9019,7 @@ span`
span`
"###,
&danger
- ),
+ )?,
r###"<p><code>code\ span</code></p>
"###,
r###"Hard line breaks (641)"###
@@ -9031,7 +9031,7 @@ span`
bar">
"###,
&danger
- ),
+ )?,
r###"<p><a href="foo
bar"></p>
"###,
@@ -9044,7 +9044,7 @@ bar"></p>
bar">
"###,
&danger
- ),
+ )?,
r###"<p><a href="foo\
bar"></p>
"###,
@@ -9056,7 +9056,7 @@ bar"></p>
r###"foo\
"###,
&danger
- ),
+ )?,
r###"<p>foo\</p>
"###,
r###"Hard line breaks (644)"###
@@ -9067,7 +9067,7 @@ bar"></p>
r###"foo
"###,
&danger
- ),
+ )?,
r###"<p>foo</p>
"###,
r###"Hard line breaks (645)"###
@@ -9078,7 +9078,7 @@ bar"></p>
r###"### foo\
"###,
&danger
- ),
+ )?,
r###"<h3>foo\</h3>
"###,
r###"Hard line breaks (646)"###
@@ -9089,7 +9089,7 @@ bar"></p>
r###"### foo
"###,
&danger
- ),
+ )?,
r###"<h3>foo</h3>
"###,
r###"Hard line breaks (647)"###
@@ -9101,7 +9101,7 @@ bar"></p>
baz
"###,
&danger
- ),
+ )?,
r###"<p>foo
baz</p>
"###,
@@ -9114,7 +9114,7 @@ baz</p>
baz
"###,
&danger
- ),
+ )?,
r###"<p>foo
baz</p>
"###,
@@ -9126,7 +9126,7 @@ baz</p>
r###"hello $.;'there
"###,
&danger
- ),
+ )?,
r###"<p>hello $.;'there</p>
"###,
r###"Textual content (650)"###
@@ -9137,7 +9137,7 @@ baz</p>
r###"Foo χρῆν
"###,
&danger
- ),
+ )?,
r###"<p>Foo χρῆν</p>
"###,
r###"Textual content (651)"###
@@ -9148,9 +9148,11 @@ baz</p>
r###"Multiple spaces
"###,
&danger
- ),
+ )?,
r###"<p>Multiple spaces</p>
"###,
r###"Textual content (652)"###
);
+
+ Ok(())
}
diff --git a/tests/definition.rs b/tests/definition.rs
index 589994d..11f783d 100644
--- a/tests/definition.rs
+++ b/tests/definition.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn definition() {
+fn definition() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
allow_dangerous_protocol: true,
@@ -77,7 +77,7 @@ fn definition() {
);
assert_eq!(
- micromark_with_options("[foo]: <bar>(baz)\n\n[foo]", &danger),
+ micromark_with_options("[foo]: <bar>(baz)\n\n[foo]", &danger)?,
"<p>[foo]: <bar>(baz)</p>\n<p>[foo]</p>",
"should not support definitions w/ no whitespace between destination and title"
);
@@ -211,8 +211,7 @@ fn definition() {
assert_eq!(
micromark(
- "[foo]: /foo-url \"foo\"\n[bar]: /bar-url\n \"bar\"\n[baz]: /baz-url\n\n[foo],\n[bar],\n[baz]"
- ),
+ "[foo]: /foo-url \"foo\"\n[bar]: /bar-url\n \"bar\"\n[baz]: /baz-url\n\n[foo],\n[bar],\n[baz]"),
"<p><a href=\"/foo-url\" title=\"foo\">foo</a>,\n<a href=\"/bar-url\" title=\"bar\">bar</a>,\n<a href=\"/baz-url\">baz</a></p>",
"should support definitions after definitions"
);
@@ -370,7 +369,7 @@ fn definition() {
);
assert_eq!(
- micromark_with_options("[a]\n\n[a]: <b<c>", &danger),
+ micromark_with_options("[a]\n\n[a]: <b<c>", &danger)?,
"<p>[a]</p>\n<p>[a]: &lt;b<c></p>",
"should not support a less than in an enclosed destination"
);
@@ -451,8 +450,10 @@ fn definition() {
},
..Options::default()
}
- ),
+ )?,
"<p>[foo]: /url &quot;title&quot;</p>",
"should support turning off definitions"
);
+
+ Ok(())
}
diff --git a/tests/frontmatter.rs b/tests/frontmatter.rs
index 012eb9a..6195a5a 100644
--- a/tests/frontmatter.rs
+++ b/tests/frontmatter.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn frontmatter() {
+fn frontmatter() -> Result<(), String> {
let frontmatter = Options {
constructs: Constructs {
frontmatter: true,
@@ -19,50 +19,52 @@ fn frontmatter() {
);
assert_eq!(
- micromark_with_options("---\ntitle: Jupyter\n---", &frontmatter),
+ micromark_with_options("---\ntitle: Jupyter\n---", &frontmatter)?,
"",
"should support frontmatter (yaml)"
);
assert_eq!(
- micromark_with_options("+++\ntitle = \"Jupyter\"\n+++", &frontmatter),
+ micromark_with_options("+++\ntitle = \"Jupyter\"\n+++", &frontmatter)?,
"",
"should support frontmatter (toml)"
);
assert_eq!(
- micromark_with_options("---\n---", &frontmatter),
+ micromark_with_options("---\n---", &frontmatter)?,
"",
"should support empty frontmatter"
);
assert_eq!(
- micromark_with_options("---\n---\n## Neptune", &frontmatter),
+ micromark_with_options("---\n---\n## Neptune", &frontmatter)?,
"<h2>Neptune</h2>",
"should support content after frontmatter"
);
assert_eq!(
- micromark_with_options("## Neptune\n---\n---", &frontmatter),
+ micromark_with_options("## Neptune\n---\n---", &frontmatter)?,
"<h2>Neptune</h2>\n<hr />\n<hr />",
"should not support frontmatter after content"
);
assert_eq!(
- micromark_with_options("> ---\n> ---\n> ## Neptune", &frontmatter),
+ micromark_with_options("> ---\n> ---\n> ## Neptune", &frontmatter)?,
"<blockquote>\n<hr />\n<hr />\n<h2>Neptune</h2>\n</blockquote>",
"should not support frontmatter in a container"
);
assert_eq!(
- micromark_with_options("---", &frontmatter),
+ micromark_with_options("---", &frontmatter)?,
"<hr />",
"should not support just an opening fence"
);
assert_eq!(
- micromark_with_options("---\ntitle: Neptune", &frontmatter),
+ micromark_with_options("---\ntitle: Neptune", &frontmatter)?,
"<hr />\n<p>title: Neptune</p>",
"should not support a missing closing fence"
);
+
+ Ok(())
}
diff --git a/tests/gfm_autolink_literal.rs b/tests/gfm_autolink_literal.rs
index 0c646b6..bcb0797 100644
--- a/tests/gfm_autolink_literal.rs
+++ b/tests/gfm_autolink_literal.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn gfm_autolink_literal() {
+fn gfm_autolink_literal() -> Result<(), String> {
let gfm = Options {
constructs: Constructs::gfm(),
..Options::default()
@@ -26,165 +26,165 @@ fn gfm_autolink_literal() {
);
assert_eq!(
- micromark_with_options("https://example.com", &gfm),
+ 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),
+ 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),
+ 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("[https://example.com](xxx)", &gfm),
+ micromark_with_options("[https://example.com](xxx)", &gfm)?,
"<p><a href=\"xxx\">https://example.com</a></p>",
"should not link protocol urls in links"
);
assert_eq!(
- micromark_with_options("[www.example.com](xxx)", &gfm),
+ micromark_with_options("[www.example.com](xxx)", &gfm)?,
"<p><a href=\"xxx\">www.example.com</a></p>",
"should not link www urls in links"
);
assert_eq!(
- micromark_with_options("[user@example.com](xxx)", &gfm),
+ micromark_with_options("[user@example.com](xxx)", &gfm)?,
"<p><a href=\"xxx\">user@example.com</a></p>",
"should not link email urls in links"
);
assert_eq!(
- micromark_with_options("user@example.com", &gfm),
+ 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),
+ 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),
+ 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),
+ 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),
+ 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),
+ 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),
+ 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),
+ 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),
+ 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),
+ 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),
+ 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),
+ 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),
+ 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),
+ micromark_with_options("www.a&a;", &gfm)?,
"<p><a href=\"http://www.a\">www.a</a>&amp;a;</p>",
"should support named character references in domains"
);
assert_eq!(
- micromark_with_options("https://a.bc/d/e/).", &gfm),
+ 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),
+ 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),
+ 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),
+ 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),
+ 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),
+ 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),
+ 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),
+ micromark_with_options("ftp://a/b/c.txt", &gfm)?,
"<p>ftp://a/b/c.txt</p>",
"should not support ftp links"
);
@@ -193,19 +193,19 @@ fn gfm_autolink_literal() {
// Fixing it would mean deviating 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),
+ // 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),
+ 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),
+ 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"
);
@@ -214,13 +214,13 @@ fn gfm_autolink_literal() {
micromark_with_options(
"http&#x3A;//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),
+ micromark_with_options("http://example.com/ab<cd", &gfm)?,
"<p><a href=\"http://example.com/ab\">http://example.com/ab</a>&lt;cd</p>",
"should stop domains/paths at `<`"
);
@@ -252,7 +252,7 @@ xmpp:scyther@pokemon.com/message.
Email me at:scyther@pokemon.com"###,
&gfm
- ),
+ )?,
r###"<p><a href="mailto:scyther@pokemon.com">mailto:scyther@pokemon.com</a></p>
<p>This is a <a href="mailto:scyther@pokemon.com">mailto:scyther@pokemon.com</a></p>
<p><a href="mailto:scyther@pokemon.com">mailto:scyther@pokemon.com</a>.</p>
@@ -298,7 +298,7 @@ a www.example.com&. b
a www.example.com& b
"###,
&gfm
- ),
+ )?,
r###"<p>a <a href="http://www.example.com&amp;xxx;b">www.example.com&amp;xxx;b</a> c</p>
<p>a <a href="http://www.example.com">www.example.com</a>&amp;xxx;. b</p>
<p>a <a href="http://www.example.com">www.example.com</a>&amp;xxxxxxxxx;. b</p>
@@ -345,7 +345,7 @@ a www.example.com& b
![ 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>
@@ -392,7 +392,7 @@ www.example.com/?q=a(business)))
(www.example.com/?q=a(business)".
"###,
&gfm
- ),
+ )?,
r###"<p><a href="http://www.example.com/?=a(b)cccccc">www.example.com/?=a(b)cccccc</a></p>
<p><a href="http://www.example.com/?=a(b(c)ccccc">www.example.com/?=a(b(c)ccccc</a></p>
<p><a href="http://www.example.com/?=a(b(c)c)cccc">www.example.com/?=a(b(c)c)cccc</a></p>
@@ -537,7 +537,7 @@ Can contain an underscore followed by a period: aaa@a.b_.c
[link]() <http://autolink> should still be expanded.
"###,
&gfm
- ),
+ )?,
r###"<h1>Literal autolinks</h1>
<h2>WWW autolinks</h2>
<p>w.commonmark.org</p>
@@ -641,7 +641,7 @@ H5.
[[]]www.a.com&copy;b
"###,
&gfm
- ),
+ )?,
r###"<p>H0.</p>
<p>[<a href="https://a.com&amp;copy;b">https://a.com&amp;copy;b</a></p>
<p>[<a href="http://www.a.com&amp;copy;b">www.a.com&amp;copy;b</a></p>
@@ -716,7 +716,7 @@ Autolink literal after image.
![a]() www.a.com
![a]() a@b.c
-"###, &gfm),
+"###, &gfm)?,
r###"<p>Image start.</p>
<p>![<a href="https://a.com">https://a.com</a></p>
<p>![<a href="http://a.com">http://a.com</a></p>
@@ -858,7 +858,7 @@ Autolink literal after link.
[a]() www.a.com
[a]() a@b.c
-"###, &gfm),
+"###, &gfm)?,
r###"<p>Link start.</p>
<p>[<a href="https://a.com">https://a.com</a></p>
<p>[<a href="http://a.com">http://a.com</a></p>
@@ -991,7 +991,7 @@ www.a&b}
www.a&b~
"###,
&gfm
- ),
+ )?,
r###"<h1>“character reference”</h1>
<p><a href="http://www.a&amp;b">www.a&amp;b</a> (space)</p>
<p><a href="http://www.a&amp;b">www.a&amp;b</a>!</p>
@@ -1101,7 +1101,7 @@ www.a&#35|
www.a&#35}
www.a&#35~
-"###, &gfm),
+"###, &gfm)?,
r###"<h1>“character reference”</h1>
<p><a href="http://www.a&amp;#35">www.a&amp;#35</a> (space)</p>
<p><a href="http://www.a&amp;#35">www.a&amp;#35</a>!</p>
@@ -1174,7 +1174,7 @@ react@0.0.0-experimental-aae83a4b9
[ react@0.0.0-experimental-aae83a4b9
"###,
&gfm
- ),
+ )?,
r###"<p>a@0.0</p>
<p><a href="mailto:a@0.b">a@0.b</a></p>
<p>a@a.29</p>
@@ -1267,7 +1267,7 @@ http://a}
http://a~
"###,
&gfm
- ),
+ )?,
r###"<h1>httpshhh? (2)</h1>
<p><a href="http://a">http://a</a> (space)</p>
<p><a href="http://a">http://a</a>!</p>
@@ -1380,7 +1380,7 @@ http://}
http://~
"###,
&gfm
- ),
+ )?,
r###"<h1>httpshhh? (1)</h1>
<p>http:// (space)</p>
<p>http://!</p>
@@ -1493,7 +1493,7 @@ http://a/b}
http://a/b~
"###,
&gfm
- ),
+ )?,
r###"<h1>httpshhh? (4)</h1>
<p><a href="http://a/b">http://a/b</a> (space)</p>
<p><a href="http://a/b">http://a/b</a>!</p>
@@ -1606,7 +1606,7 @@ http://a/}
http://a/~
"###,
&gfm
- ),
+ )?,
r###"<h1>httpshhh? (3)</h1>
<p><a href="http://a/">http://a/</a> (space)</p>
<p><a href="http://a/">http://a/</a>!</p>
@@ -1661,7 +1661,7 @@ www.example.com/a&bogus;
www.example.com/a\.
"###,
&gfm
- ),
+ )?,
r###"<p><a href="#">www.example.com/a©</a></p>
<p><a href="http://www.example.com/a">www.example.com/a</a>©</p>
<p><a href="#">www.example.com/a&amp;bogus;</a></p>
@@ -1745,7 +1745,7 @@ www.a/b&c}
www.a/b&c~
"###,
&gfm
- ),
+ )?,
r###"<h1>“character reference”</h1>
<p><a href="http://www.a/b&amp;c">www.a/b&amp;c</a> (space)</p>
<p><a href="http://www.a/b&amp;c">www.a/b&amp;c</a>!</p>
@@ -1858,7 +1858,7 @@ www.a/b&#35}
www.a/b&#35~
"###,
&gfm
- ),
+ )?,
r###"<h1>“character reference”</h1>
<p><a href="http://www.a/b&amp;#35">www.a/b&amp;#35</a> (space)</p>
<p><a href="http://www.a/b&amp;#35">www.a/b&amp;#35</a>!</p>
@@ -1943,7 +1943,7 @@ http://a.com#d]()
www.a.com#d]()
"###,
&gfm
- ),
+ )?,
r###"<p>In autolink literal path or link end?</p>
<p><a href="">https://a.com/d</a></p>
<p><a href="">http://a.com/d</a></p>
@@ -2016,7 +2016,7 @@ Some non-ascii: 中noreply@example.com, 中http://example.com, 中https://exampl
Some more non-ascii: 🤷‍noreply@example.com, 🤷‍http://example.com, 🤷‍https://example.com, 🤷‍www.example.com
"###,
&gfm
- ),
+ )?,
r###"<p>Last non-markdown ASCII whitespace (FF): <a href="mailto:noreply@example.com">noreply@example.com</a>, <a href="http://example.com">http://example.com</a>, <a href="https://example.com">https://example.com</a>, www.example.com</p>
<p>Last non-whitespace ASCII control (US): <a href="mailto:noreply@example.com">noreply@example.com</a>, <a href="http://example.com">http://example.com</a>, <a href="https://example.com">https://example.com</a>, www.example.com</p>
<p>First punctuation after controls: !<a href="mailto:noreply@example.com">noreply@example.com</a>, !<a href="http://example.com">http://example.com</a>, !<a href="https://example.com">https://example.com</a>, !www.example.com</p>
@@ -2123,7 +2123,7 @@ See `https://github.com/remarkjs/remark/discussions/678`.
[asd] ,https://github.com
"###,
&gfm
- ),
+ )?,
r###"<h1>HTTP</h1>
<p><a href="https://a.b">https://a.b</a> can start after EOF</p>
<p>Can start after EOL:
@@ -2243,7 +2243,7 @@ www.a}
www.a~
"###,
&gfm
- ),
+ )?,
r###"<h1>wwwtf 2?</h1>
<p><a href="http://www.a">www.a</a> (space)</p>
<p><a href="http://www.a">www.a</a>!</p>
@@ -2356,7 +2356,7 @@ www.a.}
www.a.~
"###,
&gfm
- ),
+ )?,
r###"<h1>wwwtf 5?</h1>
<p><a href="http://www.a">www.a</a>. (space)</p>
<p><a href="http://www.a">www.a</a>.!</p>
@@ -2469,7 +2469,7 @@ www.}
www.~
"###,
&gfm
- ),
+ )?,
r###"<h1>wwwtf?</h1>
<p><a href="http://www">www</a>. (space)</p>
<p><a href="http://www">www</a>.!</p>
@@ -2582,7 +2582,7 @@ www.a/b}
www.a/b~
"###,
&gfm
- ),
+ )?,
r###"<h1>wwwtf? (4)</h1>
<p><a href="http://www.a/b">www.a/b</a> (space)</p>
<p><a href="http://www.a/b">www.a/b</a>!</p>
@@ -2695,7 +2695,7 @@ www.a/}
www.a/~
"###,
&gfm
- ),
+ )?,
r###"<h1>wwwtf? (3)</h1>
<p><a href="http://www.a/">www.a/</a> (space)</p>
<p><a href="http://www.a/">www.a/</a>!</p>
@@ -2734,4 +2734,6 @@ www.a/~
"###,
"should match www (path start) like GitHub does (except for the bracket bug)"
);
+
+ Ok(())
}
diff --git a/tests/gfm_footnote.rs b/tests/gfm_footnote.rs
index 8c6cc54..d371455 100644
--- a/tests/gfm_footnote.rs
+++ b/tests/gfm_footnote.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn gfm_footnote() {
+fn gfm_footnote() -> Result<(), String> {
let gfm = Options {
constructs: Constructs::gfm(),
..Options::default()
@@ -16,7 +16,7 @@ fn gfm_footnote() {
);
assert_eq!(
- micromark_with_options("A call.[^a]\n\n[^a]: whatevs", &gfm),
+ micromark_with_options("A call.[^a]\n\n[^a]: whatevs", &gfm)?,
"<p>A call.<sup><a href=\"#user-content-fn-a\" id=\"user-content-fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>
<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>
<ol>
@@ -28,6 +28,7 @@ fn gfm_footnote() {
",
"should support footnotes"
);
+
assert_eq!(
micromark_with_options(
"Noot.[^a]\n\n[^a]: dingen",
@@ -37,7 +38,7 @@ fn gfm_footnote() {
gfm_footnote_back_label: Some("Terug naar de inhoud".to_string()),
..Options::default()
}
- ),
+ )?,
"<p>Noot.<sup><a href=\"#user-content-fn-a\" id=\"user-content-fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>
<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Voetnoten</h2>
<ol>
@@ -58,7 +59,7 @@ fn gfm_footnote() {
gfm_footnote_label_tag_name: Some("h1".to_string()),
..Options::default()
}
- ),
+ )?,
"<p><sup><a href=\"#user-content-fn-a\" id=\"user-content-fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>
<section data-footnotes=\"\" class=\"footnotes\"><h1 id=\"footnote-label\" class=\"sr-only\">Footnotes</h1>
<ol>
@@ -79,7 +80,7 @@ fn gfm_footnote() {
gfm_footnote_label_attributes: Some("class=\"footnote-heading\"".to_string()),
..Options::default()
}
- ),
+ )?,
"<p><sup><a href=\"#user-content-fn-a\" id=\"user-content-fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>
<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"footnote-heading\">Footnotes</h2>
<ol>
@@ -100,7 +101,7 @@ fn gfm_footnote() {
gfm_footnote_clobber_prefix: Some("".to_string()),
..Options::default()
}
- ),
+ )?,
"<p><sup><a href=\"#fn-a\" id=\"fnref-a\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>
<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>
<ol>
@@ -114,19 +115,19 @@ fn gfm_footnote() {
);
assert_eq!(
- micromark_with_options("A paragraph.\n\n[^a]: whatevs", &gfm),
+ micromark_with_options("A paragraph.\n\n[^a]: whatevs", &gfm)?,
"<p>A paragraph.</p>\n",
"should ignore definitions w/o calls"
);
assert_eq!(
- micromark_with_options("a[^b]", &gfm),
+ micromark_with_options("a[^b]", &gfm)?,
"<p>a[^b]</p>",
"should ignore calls w/o definitions"
);
assert_eq!(
- micromark_with_options("a[^b]\n\n[^b]: c\n[^b]: d", &gfm),
+ micromark_with_options("a[^b]\n\n[^b]: c\n[^b]: d", &gfm)?,
"<p>a<sup><a href=\"#user-content-fn-b\" id=\"user-content-fnref-b\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>
<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>
<ol>
@@ -140,7 +141,7 @@ fn gfm_footnote() {
);
assert_eq!(
- micromark_with_options("a[^b], c[^b]\n\n[^b]: d", &gfm),
+ micromark_with_options("a[^b], c[^b]\n\n[^b]: d", &gfm)?,
"<p>a<sup><a href=\"#user-content-fn-b\" id=\"user-content-fnref-b\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup>, c<sup><a href=\"#user-content-fn-b\" id=\"user-content-fnref-b-2\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup></p>
<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>
<ol>
@@ -154,32 +155,32 @@ fn gfm_footnote() {
);
assert_eq!(
- micromark_with_options("![^a](b)", &gfm),
+ micromark_with_options("![^a](b)", &gfm)?,
"<p>!<a href=\"b\">^a</a></p>",
"should not support images starting w/ `^` (but see it as a link?!, 1)"
);
assert_eq!(
- micromark_with_options("![^a][b]\n\n[b]: c", &gfm),
+ micromark_with_options("![^a][b]\n\n[b]: c", &gfm)?,
"<p>!<a href=\"c\">^a</a></p>\n",
"should not support images starting w/ `^` (but see it as a link?!, 2)"
);
assert_eq!(
- micromark_with_options("[^]()", &gfm),
+ micromark_with_options("[^]()", &gfm)?,
"<p><a href=\"\">^</a></p>",
"should support an empty link with caret"
);
assert_eq!(
- micromark_with_options("![^]()", &gfm),
+ micromark_with_options("![^]()", &gfm)?,
"<p>!<a href=\"\">^</a></p>",
"should support an empty image with caret (as link)"
);
// <https://github.com/github/cmark-gfm/issues/239>
assert_eq!(
- micromark_with_options("Call.[^a\\+b].\n\n[^a\\+b]: y", &gfm),
+ micromark_with_options("Call.[^a\\+b].\n\n[^a\\+b]: y", &gfm)?,
"<p>Call.<sup><a href=\"#user-content-fn-a%5C+b\" id=\"user-content-fnref-a%5C+b\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup>.</p>
<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>
<ol>
@@ -193,7 +194,7 @@ fn gfm_footnote() {
);
assert_eq!(
- micromark_with_options("Call.[^a&copy;b].\n\n[^a&copy;b]: y", &gfm),
+ micromark_with_options("Call.[^a&copy;b].\n\n[^a&copy;b]: y", &gfm)?,
"<p>Call.<sup><a href=\"#user-content-fn-a&amp;copy;b\" id=\"user-content-fnref-a&amp;copy;b\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup>.</p>
<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>
<ol>
@@ -209,7 +210,7 @@ fn gfm_footnote() {
// <https://github.com/github/cmark-gfm/issues/239>
// <https://github.com/github/cmark-gfm/issues/240>
assert_eq!(
- micromark_with_options("Call.[^a\\]b].\n\n[^a\\]b]: y", &gfm),
+ micromark_with_options("Call.[^a\\]b].\n\n[^a\\]b]: y", &gfm)?,
"<p>Call.<sup><a href=\"#user-content-fn-a%5C%5Db\" id=\"user-content-fnref-a%5C%5Db\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup>.</p>
<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>
<ol>
@@ -223,7 +224,7 @@ fn gfm_footnote() {
);
assert_eq!(
- micromark_with_options("Call.[^a&#91;b].\n\n[^a&#91;b]: y", &gfm),
+ micromark_with_options("Call.[^a&#91;b].\n\n[^a&#91;b]: y", &gfm)?,
"<p>Call.<sup><a href=\"#user-content-fn-a&amp;#91;b\" id=\"user-content-fnref-a&amp;#91;b\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup>.</p>
<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>
<ol>
@@ -237,19 +238,19 @@ fn gfm_footnote() {
);
assert_eq!(
- micromark_with_options("Call.[^a\\+b].\n\n[^a+b]: y", &gfm),
+ micromark_with_options("Call.[^a\\+b].\n\n[^a+b]: y", &gfm)?,
"<p>Call.[^a+b].</p>\n",
"should match calls to definitions on the source of the label, not on resolved escapes"
);
assert_eq!(
- micromark_with_options("Call.[^a&#91;b].\n\n[^a\\[b]: y", &gfm),
+ micromark_with_options("Call.[^a&#91;b].\n\n[^a\\[b]: y", &gfm)?,
"<p>Call.[^a[b].</p>\n",
"should match calls to definitions on the source of the label, not on resolved references"
);
assert_eq!(
- micromark_with_options("[^1].\n\n[^1]: a\nb", &gfm),
+ micromark_with_options("[^1].\n\n[^1]: a\nb", &gfm)?,
"<p><sup><a href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup>.</p>
<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>
<ol>
@@ -264,7 +265,7 @@ b <a href=\"#user-content-fnref-1\" data-footnote-backref=\"\" class=\"data-foot
);
assert_eq!(
- micromark_with_options("[^1].\n\n> [^1]: a\nb", &gfm),
+ micromark_with_options("[^1].\n\n> [^1]: a\nb", &gfm)?,
"<p><sup><a href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup>.</p>
<blockquote>
</blockquote>
@@ -281,7 +282,7 @@ b <a href=\"#user-content-fnref-1\" data-footnote-backref=\"\" class=\"data-foot
);
assert_eq!(
- micromark_with_options("[^1].\n\n> [^1]: a\n> b", &gfm),
+ micromark_with_options("[^1].\n\n> [^1]: a\n> b", &gfm)?,
"<p><sup><a href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup>.</p>
<blockquote>
</blockquote>
@@ -298,7 +299,7 @@ b <a href=\"#user-content-fnref-1\" data-footnote-backref=\"\" class=\"data-foot
);
assert_eq!(
- micromark_with_options("[^1].\n\n[^1]: a\n\n > b", &gfm),
+ micromark_with_options("[^1].\n\n[^1]: a\n\n > b", &gfm)?,
"<p><sup><a href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup>.</p>
<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>
<ol>
@@ -319,7 +320,7 @@ b <a href=\"#user-content-fnref-1\" data-footnote-backref=\"\" class=\"data-foot
let max = "x".repeat(999);
assert_eq!(
- micromark_with_options(format!("Call.[^{}].\n\n[^{}]: y", max, max).as_str(), &gfm),
+ micromark_with_options(format!("Call.[^{}].\n\n[^{}]: y", max, max).as_str(), &gfm)?,
format!("<p>Call.<sup><a href=\"#user-content-fn-{}\" id=\"user-content-fnref-{}\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1</a></sup>.</p>
<section data-footnotes=\"\" class=\"footnotes\"><h2 id=\"footnote-label\" class=\"sr-only\">Footnotes</h2>
<ol>
@@ -336,7 +337,7 @@ b <a href=\"#user-content-fnref-1\" data-footnote-backref=\"\" class=\"data-foot
micromark_with_options(
format!("Call.[^a{}].\n\n[^a{}]: y", max, max).as_str(),
&gfm
- ),
+ )?,
format!("<p>Call.[^a{}].</p>\n<p>[^a{}]: y</p>", max, max),
"should not support 1000 characters in a call / definition"
);
@@ -354,7 +355,7 @@ a![^1]
[i]: c"###,
&gfm
- ),
+ )?,
r###"<p>a<img src="#" alt="i" />
a!<a href="#">i</a>
a<img src="c" alt="i" />
@@ -373,7 +374,7 @@ a!<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref=
);
assert_eq!(
- micromark_with_options("a![^1]", &gfm),
+ micromark_with_options("a![^1]", &gfm)?,
"<p>a![^1]</p>",
"should match bang/caret interplay (undefined) like GitHub"
);
@@ -385,7 +386,7 @@ a!<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref=
[^1]: b
"###,
&gfm
- ),
+ )?,
r###"<p>a!<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></p>
<section data-footnotes="" class="footnotes"><h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
@@ -424,7 +425,7 @@ even another caret.
[^^]: caret
"###,
&gfm
- ),
+ )?,
r###"<p>Calls may not be empty: <a href="empty">^</a>.</p>
<p>Calls cannot contain whitespace only: <a href="empty">^ </a>.</p>
<p>Calls cannot contain whitespace at all: <a href="empty">^ </a>, <a href="empty">^ </a>, <a href="empty">^
@@ -482,7 +483,7 @@ even another caret.</p>
[^![image](#)]: a
"###,
&gfm
- ),
+ )?,
// Note:
// * GH does not support colons.
// See: <https://github.com/github/cmark-gfm/issues/250>
@@ -541,7 +542,7 @@ even another caret.</p>
[^4]: Directly after a list item.
"###,
&gfm
- ),
+ )?,
r###"<p>Call<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup><sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup><sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup><sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup></p>
<blockquote>
<p>More.</p>
@@ -598,7 +599,7 @@ even another caret.</p>
- list
"###,
&gfm
- ),
+ )?,
r###"<p><sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup><sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup><sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup><sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup></p>
<h1>Heading</h1>
<blockquote>
@@ -655,7 +656,7 @@ Lazy?
Lazy!
"###,
&gfm
- ),
+ )?,
r###"<p>Call<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup><sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup><sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup><sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup><sup><a href="#user-content-fn-5" id="user-content-fnref-5" data-footnote-ref="" aria-describedby="footnote-label">5</a></sup>.</p>
<p>Lazy?</p>
<p>Lazy!</p>
@@ -711,7 +712,7 @@ Lazy!
[^10]:- - - kilo
"###,
&gfm
- ),
+ )?,
r###"<p>Note!<sup><a href="#user-content-fn-0" id="user-content-fnref-0" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup><sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup><sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup><sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup><sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">5</a></sup><sup><a href="#user-content-fn-5" id="user-content-fnref-5" data-footnote-ref="" aria-describedby="footnote-label">6</a></sup><sup><a href="#user-content-fn-6" id="user-content-fnref-6" data-footnote-ref="" aria-describedby="footnote-label">7</a></sup><sup><a href="#user-content-fn-7" id="user-content-fnref-7" data-footnote-ref="" aria-describedby="footnote-label">8</a></sup><sup><a href="#user-content-fn-8" id="user-content-fnref-8" data-footnote-ref="" aria-describedby="footnote-label">9</a></sup><sup><a href="#user-content-fn-9" id="user-content-fnref-9" data-footnote-ref="" aria-describedby="footnote-label">10</a></sup><sup><a href="#user-content-fn-10" id="user-content-fnref-10" data-footnote-ref="" aria-describedby="footnote-label">11</a></sup></p>
<section data-footnotes="" class="footnotes"><h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
@@ -784,7 +785,7 @@ indented delta <a href="#user-content-fnref-2" data-footnote-backref="" class="d
[^1]: Recursion[^1][^1]
"###,
&gfm
- ),
+ )?,
r###"<p>Call<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup><sup><a href="#user-content-fn-1" id="user-content-fnref-1-2" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></p>
<section data-footnotes="" class="footnotes"><h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
@@ -806,7 +807,7 @@ indented delta <a href="#user-content-fnref-2" data-footnote-backref="" class="d
[^1]: b
"###,
&gfm
- ),
+ )?,
r###"<p>Call<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></p>
<section data-footnotes="" class="footnotes"><h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
@@ -848,7 +849,7 @@ indented delta <a href="#user-content-fnref-2" data-footnote-backref="" class="d
[^5]: e
"###,
&gfm
- ),
+ )?,
r###"<p><em>emphasis<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></em></p>
<p><strong>strong<sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup></strong></p>
<p><code>code[^3]</code></p>
@@ -885,7 +886,7 @@ indented delta <a href="#user-content-fnref-2" data-footnote-backref="" class="d
[^3]: c
"###,
&gfm
- ),
+ )?,
r###"<p>What are these!<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup>, !<sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup>[], and ![this]<sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup>.</p>
<section data-footnotes="" class="footnotes"><h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
@@ -927,7 +928,7 @@ indented delta <a href="#user-content-fnref-2" data-footnote-backref="" class="d
* list
"###,
&gfm
- ),
+ )?,
r###"<p><sup><a href="#user-content-fn-0" id="user-content-fnref-0" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup><sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup><sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup><sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup><sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">5</a></sup><sup><a href="#user-content-fn-5" id="user-content-fnref-5" data-footnote-ref="" aria-describedby="footnote-label">6</a></sup></p>
<h1>Heading</h1>
<blockquote>
@@ -980,7 +981,7 @@ indented delta <a href="#user-content-fnref-2" data-footnote-backref="" class="d
[^3]: c
"###,
&gfm
- ),
+ )?,
r###"<p>What are these<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup>, <sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup>[], and [this]<sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup>.</p>
<section data-footnotes="" class="footnotes"><h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
@@ -1030,7 +1031,7 @@ indented delta <a href="#user-content-fnref-2" data-footnote-backref="" class="d
- list
"###,
&gfm
- ),
+ )?,
r###"<p><sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup><sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup><sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup><sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup></p>
<h1>Heading</h1>
<blockquote>
@@ -1092,7 +1093,7 @@ indented delta <a href="#user-content-fnref-2" data-footnote-backref="" class="d
- list
"###,
&gfm
- ),
+ )?,
r###"<p><sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup><sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup><sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup><sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup></p>
<section data-footnotes="" class="footnotes"><h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
@@ -1141,7 +1142,7 @@ more code
[^3]: [^4]: Paragraph
"###,
&gfm
- ),
+ )?,
r###"<p>Note!<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup><sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup><sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup><sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup></p>
<ul>
<li></li>
@@ -1191,7 +1192,7 @@ more code
- list
"###,
&gfm
- ),
+ )?,
r###"<p><sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup><sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup><sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup><sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup></p>
<h1>Heading</h1>
<blockquote>
@@ -1245,7 +1246,7 @@ more code
- list
"###,
&gfm
- ),
+ )?,
r###"<p><sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup><sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup><sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup><sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup></p>
<section data-footnotes="" class="footnotes"><h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
@@ -1303,7 +1304,7 @@ This paragraph won’t be part of the note, because it
isn’t indented.
"###,
&gfm
- ),
+ )?,
r###"<p>Here is a footnote reference,<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup> and another.<sup><a href="#user-content-fn-longnote" id="user-content-fnref-longnote" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup></p>
<p>This paragraph won’t be part of the note, because it
isn’t indented.</p>
@@ -1371,7 +1372,7 @@ multi-paragraph list items. <a href="#user-content-fnref-longnote" data-footnote
3
"###,
&gfm
- ),
+ )?,
r###"<p>Call[^1][^2]<sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup><sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup><sup><a href="#user-content-fn-5" id="user-content-fnref-5" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup><sup><a href="#user-content-fn-6" id="user-content-fnref-6" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup><sup><a href="#user-content-fn-7" id="user-content-fnref-7" data-footnote-ref="" aria-describedby="footnote-label">5</a></sup><sup><a href="#user-content-fn-8" id="user-content-fnref-8" data-footnote-ref="" aria-describedby="footnote-label">6</a></sup><sup><a href="#user-content-fn-9" id="user-content-fnref-9" data-footnote-ref="" aria-describedby="footnote-label">7</a></sup><sup><a href="#user-content-fn-10" id="user-content-fnref-10" data-footnote-ref="" aria-describedby="footnote-label">8</a></sup><sup><a href="#user-content-fn-11" id="user-content-fnref-11" data-footnote-ref="" aria-describedby="footnote-label">9</a></sup><sup><a href="#user-content-fn-12" id="user-content-fnref-12" data-footnote-ref="" aria-describedby="footnote-label">10</a></sup>.</p>
<pre><code> [^1]: 5
@@ -1463,7 +1464,7 @@ multi-paragraph list items. <a href="#user-content-fnref-longnote" data-footnote
0
"###,
&gfm
- ),
+ )?,
r###"<p>Call<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup><sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup><sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup><sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup><sup><a href="#user-content-fn-5" id="user-content-fnref-5" data-footnote-ref="" aria-describedby="footnote-label">5</a></sup><sup><a href="#user-content-fn-6" id="user-content-fnref-6" data-footnote-ref="" aria-describedby="footnote-label">6</a></sup><sup><a href="#user-content-fn-7" id="user-content-fnref-7" data-footnote-ref="" aria-describedby="footnote-label">7</a></sup><sup><a href="#user-content-fn-8" id="user-content-fnref-8" data-footnote-ref="" aria-describedby="footnote-label">8</a></sup><sup><a href="#user-content-fn-9" id="user-content-fnref-9" data-footnote-ref="" aria-describedby="footnote-label">9</a></sup>.</p>
<p>3</p>
<p>2</p>
@@ -1522,9 +1523,11 @@ multi-paragraph list items. <a href="#user-content-fnref-longnote" data-footnote
[3]: c
"###,
&gfm
- ),
+ )?,
r###"<p>Here is a short reference,<a href="a">1</a>, a collapsed one,<a href="b">2</a>, and a full <a href="c">one</a>.</p>
"###,
"should match references and definitions like GitHub"
);
+
+ Ok(())
}
diff --git a/tests/gfm_strikethrough.rs b/tests/gfm_strikethrough.rs
index f39be07..b8c3e1f 100644
--- a/tests/gfm_strikethrough.rs
+++ b/tests/gfm_strikethrough.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn gfm_strikethrough() {
+fn gfm_strikethrough() -> Result<(), String> {
let gfm = Options {
constructs: Constructs::gfm(),
..Options::default()
@@ -16,49 +16,49 @@ fn gfm_strikethrough() {
);
assert_eq!(
- micromark_with_options("a ~b~", &gfm),
+ micromark_with_options("a ~b~", &gfm)?,
"<p>a <del>b</del></p>",
"should support strikethrough w/ one tilde"
);
assert_eq!(
- micromark_with_options("a ~~b~~", &gfm),
+ micromark_with_options("a ~~b~~", &gfm)?,
"<p>a <del>b</del></p>",
"should support strikethrough w/ two tildes"
);
assert_eq!(
- micromark_with_options("a ~~~b~~~", &gfm),
+ micromark_with_options("a ~~~b~~~", &gfm)?,
"<p>a ~~~b~~~</p>",
"should not support strikethrough w/ three tildes"
);
assert_eq!(
- micromark_with_options("a \\~~~b~~ c", &gfm),
+ micromark_with_options("a \\~~~b~~ c", &gfm)?,
"<p>a ~<del>b</del> c</p>",
"should support strikethrough after an escaped tilde"
);
assert_eq!(
- micromark_with_options("a ~~b ~~c~~ d~~ e", &gfm),
+ micromark_with_options("a ~~b ~~c~~ d~~ e", &gfm)?,
"<p>a <del>b <del>c</del> d</del> e</p>",
"should support nested strikethrough"
);
assert_eq!(
- micromark_with_options("a ~-1~ b", &gfm),
+ micromark_with_options("a ~-1~ b", &gfm)?,
"<p>a <del>-1</del> b</p>",
"should open if preceded by whitespace and followed by punctuation"
);
assert_eq!(
- micromark_with_options("a ~b.~ c", &gfm),
+ micromark_with_options("a ~b.~ c", &gfm)?,
"<p>a <del>b.</del> c</p>",
"should close if preceded by punctuation and followed by whitespace"
);
assert_eq!(
- micromark_with_options("~b.~.", &gfm),
+ micromark_with_options("~b.~.", &gfm)?,
"<p><del>b.</del>.</p>",
"should close if preceded and followed by punctuation"
);
@@ -123,7 +123,7 @@ a ~~two b one~ c two~~ d
a ~~two b two~~ c one~ d
"###,
&gfm
- ),
+ )?,
r###"<h1>Balanced</h1>
<p>a <del>one</del> b</p>
<p>a <del>two</del> b</p>
@@ -192,7 +192,7 @@ a ~~twoLeft b ~~twoLeft c twoRight~~ d
a ~~twoLeft b ~~twoLeft c ~~twoLeft d
"###,
&gfm
- ),
+ )?,
r###"<h1>Flank</h1>
<p>a oneRight~ b oneRight~ c oneRight~ d</p>
<p>a oneRight~ b oneRight~ c ~oneLeft d</p>
@@ -309,7 +309,7 @@ t ~~**xxx**~~ zzz
u ~**xxx**~ zzz
"###,
&gfm
- ),
+ )?,
r###"<h1>Interlpay</h1>
<h2>Interleave with attention</h2>
<p>a <del>two <em>emphasis</em> two</del> b</p>
@@ -367,7 +367,7 @@ u ~**xxx**~ zzz
gfm_strikethrough_single_tilde: false,
..Options::default()
}
- ),
+ )?,
"<p>a ~b~ <del>c</del> d</p>",
"should not support strikethrough w/ one tilde if `singleTilde: false`"
);
@@ -380,8 +380,10 @@ u ~**xxx**~ zzz
gfm_strikethrough_single_tilde: true,
..Options::default()
}
- ),
+ )?,
"<p>a <del>b</del> <del>c</del> d</p>",
"should support strikethrough w/ one tilde if `singleTilde: true`"
);
+
+ Ok(())
}
diff --git a/tests/gfm_table.rs b/tests/gfm_table.rs
index a265549..619bf2a 100644
--- a/tests/gfm_table.rs
+++ b/tests/gfm_table.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn gfm_table() {
+fn gfm_table() -> Result<(), String> {
let gfm = Options {
constructs: Constructs::gfm(),
..Options::default()
@@ -16,181 +16,181 @@ fn gfm_table() {
);
assert_eq!(
- micromark_with_options("| a |\n| - |\n| b |", &gfm),
+ micromark_with_options("| a |\n| - |\n| b |", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>b</td>\n</tr>\n</tbody>\n</table>",
"should support tables"
);
assert_eq!(
- micromark_with_options("| a |", &gfm),
+ micromark_with_options("| a |", &gfm)?,
"<p>| a |</p>",
"should not support a table w/ the head row ending in an eof (1)"
);
assert_eq!(
- micromark_with_options("| a", &gfm),
+ micromark_with_options("| a", &gfm)?,
"<p>| a</p>",
"should not support a table w/ the head row ending in an eof (2)"
);
assert_eq!(
- micromark_with_options("a |", &gfm),
+ micromark_with_options("a |", &gfm)?,
"<p>a |</p>",
"should not support a table w/ the head row ending in an eof (3)"
);
assert_eq!(
- micromark_with_options("| a |\n| - |", &gfm),
+ micromark_with_options("| a |\n| - |", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>",
"should support a table w/ a delimiter row ending in an eof (1)"
);
assert_eq!(
- micromark_with_options("| a\n| -", &gfm),
+ micromark_with_options("| a\n| -", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>",
"should support a table w/ a delimiter row ending in an eof (2)"
);
assert_eq!(
- micromark_with_options("| a |\n| - |\n| b |", &gfm),
+ micromark_with_options("| a |\n| - |\n| b |", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>b</td>\n</tr>\n</tbody>\n</table>",
"should support a table w/ a body row ending in an eof (1)"
);
assert_eq!(
- micromark_with_options("| a\n| -\n| b", &gfm),
+ micromark_with_options("| a\n| -\n| b", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>b</td>\n</tr>\n</tbody>\n</table>",
"should support a table w/ a body row ending in an eof (2)"
);
assert_eq!(
- micromark_with_options("a|b\n-|-\nc|d", &gfm),
+ micromark_with_options("a|b\n-|-\nc|d", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n<th>b</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>c</td>\n<td>d</td>\n</tr>\n</tbody>\n</table>",
"should support a table w/ a body row ending in an eof (3)"
);
assert_eq!(
- micromark_with_options("| a \n| -\t\n| b | ", &gfm),
+ micromark_with_options("| a \n| -\t\n| b | ", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>b</td>\n</tr>\n</tbody>\n</table>",
"should support rows w/ trailing whitespace (1)"
);
assert_eq!(
- micromark_with_options("| a | \n| - |", &gfm),
+ micromark_with_options("| a | \n| - |", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>",
"should support rows w/ trailing whitespace (2)"
);
assert_eq!(
- micromark_with_options("| a |\n| - | ", &gfm),
+ micromark_with_options("| a |\n| - | ", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>",
"should support rows w/ trailing whitespace (3)"
);
assert_eq!(
- micromark_with_options("| a |\n| - |\n| b | ", &gfm),
+ micromark_with_options("| a |\n| - |\n| b | ", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>b</td>\n</tr>\n</tbody>\n</table>",
"should support rows w/ trailing whitespace (4)"
);
assert_eq!(
- micromark_with_options("||a|\n|-|-|", &gfm),
+ micromark_with_options("||a|\n|-|-|", &gfm)?,
"<table>\n<thead>\n<tr>\n<th></th>\n<th>a</th>\n</tr>\n</thead>\n</table>",
"should support empty first header cells"
);
assert_eq!(
- micromark_with_options("|a||\n|-|-|", &gfm),
+ micromark_with_options("|a||\n|-|-|", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n<th></th>\n</tr>\n</thead>\n</table>",
"should support empty last header cells"
);
assert_eq!(
- micromark_with_options("a||b\n-|-|-", &gfm),
+ micromark_with_options("a||b\n-|-|-", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n<th></th>\n<th>b</th>\n</tr>\n</thead>\n</table>",
"should support empty header cells"
);
assert_eq!(
- micromark_with_options("|a|b|\n|-|-|\n||c|", &gfm),
+ micromark_with_options("|a|b|\n|-|-|\n||c|", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n<th>b</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td></td>\n<td>c</td>\n</tr>\n</tbody>\n</table>",
"should support empty first body cells"
);
assert_eq!(
- micromark_with_options("|a|b|\n|-|-|\n|c||", &gfm),
+ micromark_with_options("|a|b|\n|-|-|\n|c||", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n<th>b</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>c</td>\n<td></td>\n</tr>\n</tbody>\n</table>",
"should support empty last body cells"
);
assert_eq!(
- micromark_with_options("a|b|c\n-|-|-\nd||e", &gfm),
+ micromark_with_options("a|b|c\n-|-|-\nd||e", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n<th>b</th>\n<th>c</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>d</td>\n<td></td>\n<td>e</td>\n</tr>\n</tbody>\n</table>",
"should support empty body cells"
);
assert_eq!(
- micromark_with_options("| a |\n| - |\n- b", &gfm),
+ micromark_with_options("| a |\n| - |\n- b", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>\n<ul>\n<li>b</li>\n</ul>",
"should support a list after a table"
);
assert_eq!(
- micromark_with_options("> | a |\n| - |", &gfm),
+ micromark_with_options("> | a |\n| - |", &gfm)?,
"<blockquote>\n<p>| a |\n| - |</p>\n</blockquote>",
"should not support a lazy delimiter row (1)"
);
assert_eq!(
- micromark_with_options("> a\n> | b |\n| - |", &gfm),
+ micromark_with_options("> a\n> | b |\n| - |", &gfm)?,
"<blockquote>\n<p>a\n| b |\n| - |</p>\n</blockquote>",
"should not support a lazy delimiter row (2)"
);
assert_eq!(
- micromark_with_options("| a |\n> | - |", &gfm),
+ micromark_with_options("| a |\n> | - |", &gfm)?,
"<p>| a |</p>\n<blockquote>\n<p>| - |</p>\n</blockquote>",
"should not support a piercing delimiter row"
);
assert_eq!(
- micromark_with_options("> a\n> | b |\n|-", &gfm),
+ micromark_with_options("> a\n> | b |\n|-", &gfm)?,
"<blockquote>\n<p>a\n| b |\n|-</p>\n</blockquote>",
"should not support a lazy body row (2)"
);
assert_eq!(
- micromark_with_options("> | a |\n> | - |\n| b |", &gfm),
+ micromark_with_options("> | a |\n> | - |\n| b |", &gfm)?,
"<blockquote>\n<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>\n</blockquote>\n<p>| b |</p>",
"should not support a lazy body row (1)"
);
assert_eq!(
- micromark_with_options("> a\n> | b |\n> | - |\n| c |", &gfm),
+ micromark_with_options("> a\n> | b |\n> | - |\n| c |", &gfm)?,
"<blockquote>\n<p>a</p>\n<table>\n<thead>\n<tr>\n<th>b</th>\n</tr>\n</thead>\n</table>\n</blockquote>\n<p>| c |</p>",
"should not support a lazy body row (2)"
);
assert_eq!(
- micromark_with_options("> | A |\n> | - |\n> | 1 |\n| 2 |", &gfm),
+ micromark_with_options("> | A |\n> | - |\n> | 1 |\n| 2 |", &gfm)?,
"<blockquote>\n<table>\n<thead>\n<tr>\n<th>A</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1</td>\n</tr>\n</tbody>\n</table>\n</blockquote>\n<p>| 2 |</p>",
"should not support a lazy body row (3)"
);
assert_eq!(
- micromark_with_options(" - d\n - e", &gfm),
+ micromark_with_options(" - d\n - e", &gfm)?,
micromark(" - d\n - e"),
"should not change how lists and lazyness work"
);
assert_eq!(
- micromark_with_options("| a |\n | - |", &gfm),
+ micromark_with_options("| a |\n | - |", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>",
"should form a table if the delimiter row is indented w/ 3 spaces"
);
assert_eq!(
- micromark_with_options("| a |\n | - |", &gfm),
+ micromark_with_options("| a |\n | - |", &gfm)?,
"<p>| a |\n| - |</p>",
"should not form a table if the delimiter row is indented w/ 4 spaces"
);
@@ -202,31 +202,31 @@ fn gfm_table() {
..Constructs::gfm()
},
..Options::default()
- }),
+ })?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>",
"should form a table if the delimiter row is indented w/ 4 spaces and indented code is turned off"
);
assert_eq!(
- micromark_with_options("| a |\n| - |\n> block quote?", &gfm),
+ micromark_with_options("| a |\n| - |\n> block quote?", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>\n<blockquote>\n<p>block quote?</p>\n</blockquote>",
"should be interrupted by a block quote"
);
assert_eq!(
- micromark_with_options("| a |\n| - |\n>", &gfm),
+ micromark_with_options("| a |\n| - |\n>", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>\n<blockquote>\n</blockquote>",
"should be interrupted by a block quote (empty)"
);
assert_eq!(
- micromark_with_options("| a |\n| - |\n- list?", &gfm),
+ micromark_with_options("| a |\n| - |\n- list?", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>\n<ul>\n<li>list?</li>\n</ul>",
"should be interrupted by a list"
);
assert_eq!(
- micromark_with_options("| a |\n| - |\n-", &gfm),
+ micromark_with_options("| a |\n| - |\n-", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>\n<ul>\n<li></li>\n</ul>",
"should be interrupted by a list (empty)"
);
@@ -239,7 +239,7 @@ fn gfm_table() {
constructs: Constructs::gfm(),
..Options::default()
}
- ),
+ )?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>\n<!-- HTML? -->",
"should be interrupted by HTML (flow)"
);
@@ -249,7 +249,7 @@ fn gfm_table() {
allow_dangerous_html: true,
constructs: Constructs::gfm(),
..Options::default()
- }),
+ })?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>\n<pre><code>code?\n</code></pre>",
"should be interrupted by code (indented)"
);
@@ -259,7 +259,7 @@ fn gfm_table() {
allow_dangerous_html: true,
constructs: Constructs::gfm(),
..Options::default()
- }),
+ })?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>\n<pre><code class=\"language-js\">code?\n</code></pre>\n",
"should be interrupted by code (fenced)"
);
@@ -272,75 +272,71 @@ fn gfm_table() {
constructs: Constructs::gfm(),
..Options::default()
}
- ),
+ )?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>\n<hr />",
"should be interrupted by a thematic break"
);
assert_eq!(
- micromark_with_options("| a |\n| - |\n# heading?", &gfm),
+ micromark_with_options("| a |\n| - |\n# heading?", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>\n<h1>heading?</h1>",
"should be interrupted by a heading (ATX)"
);
assert_eq!(
- micromark_with_options("| a |\n| - |\nheading\n=", &gfm),
+ micromark_with_options("| a |\n| - |\nheading\n=", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>heading</td>\n</tr>\n<tr>\n<td>=</td>\n</tr>\n</tbody>\n</table>",
"should *not* be interrupted by a heading (setext)"
);
assert_eq!(
- micromark_with_options("| a |\n| - |\nheading\n---", &gfm),
+ micromark_with_options("| a |\n| - |\nheading\n---", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>heading</td>\n</tr>\n</tbody>\n</table>\n<hr />",
"should *not* be interrupted by a heading (setext), but interrupt if the underline is also a thematic break"
);
assert_eq!(
- micromark_with_options("| a |\n| - |\nheading\n-", &gfm),
+ micromark_with_options("| a |\n| - |\nheading\n-", &gfm)?,
"<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>heading</td>\n</tr>\n</tbody>\n</table>\n<ul>\n<li></li>\n</ul>",
"should *not* be interrupted by a heading (setext), but interrupt if the underline is also an empty list item bullet"
);
assert_eq!(
- micromark_with_options("a\nb\n-:", &gfm),
+ micromark_with_options("a\nb\n-:", &gfm)?,
"<p>a</p>\n<table>\n<thead>\n<tr>\n<th align=\"right\">b</th>\n</tr>\n</thead>\n</table>",
"should support a single head row"
);
assert_eq!(
- micromark_with_options("> | a |\n> | - |", &gfm),
+ micromark_with_options("> | a |\n> | - |", &gfm)?,
"<blockquote>\n<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>\n</blockquote>",
"should support a table in a container"
);
assert_eq!(
- micromark_with_options("> | a |\n| - |", &gfm),
+ micromark_with_options("> | a |\n| - |", &gfm)?,
"<blockquote>\n<p>| a |\n| - |</p>\n</blockquote>",
"should not support a lazy delimiter row if the head row is in a container"
);
assert_eq!(
- micromark_with_options("| a |\n> | - |", &gfm),
+ micromark_with_options("| a |\n> | - |", &gfm)?,
"<p>| a |</p>\n<blockquote>\n<p>| - |</p>\n</blockquote>",
"should not support a “piercing” container for the delimiter row, if the head row was not in that container"
);
assert_eq!(
- micromark_with_options("> | a |\n> | - |\n| c |", &gfm),
+ micromark_with_options("> | a |\n> | - |\n| c |", &gfm)?,
"<blockquote>\n<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n</table>\n</blockquote>\n<p>| c |</p>",
"should not support a lazy body row if the head row and delimiter row are in a container"
);
assert_eq!(
- micromark_with_options("> | a |\n| - |\n> | c |", &gfm),
+ micromark_with_options("> | a |\n| - |\n> | c |", &gfm)?,
"<blockquote>\n<p>| a |\n| - |\n| c |</p>\n</blockquote>",
"should not support a lazy delimiter row if the head row and a further body row are in a container"
);
- assert_eq!(micromark_with_options("", &gfm), "", "should support");
-
- assert_eq!(micromark_with_options("", &gfm), "", "should support");
-
assert_eq!(
micromark_with_options(
r###"# Align
@@ -422,7 +418,7 @@ a
| f |
"###,
&gfm
- ),
+ )?,
r###"<h1>Align</h1>
<h2>An empty initial cell</h2>
<table>
@@ -551,7 +547,7 @@ a
| b |
"###,
&gfm
- ),
+ )?,
r###"<h1>Tables</h1>
<table>
<thead>
@@ -653,7 +649,7 @@ a
|-
"###,
&gfm
- ),
+ )?,
r###"<h1>Tables in things</h1>
<h2>In lists</h2>
<ul>
@@ -798,7 +794,7 @@ a
| 1 |
"###,
&gfm
- ),
+ )?,
r###"<table>
<thead>
<tr>
@@ -876,7 +872,7 @@ bar
| --- | --- |
"###,
&gfm
- ),
+ )?,
r###"<h1>Examples from GFM</h1>
<h2>A</h2>
<table>
@@ -1037,7 +1033,7 @@ bar
allow_dangerous_html: true,
..gfm.clone()
}
- ),
+ )?,
r###"<h1>Grave accents</h1>
<h2>Grave accent in cell</h2>
<table>
@@ -1148,7 +1144,7 @@ a
| E |
"###,
&gfm
- ),
+ )?,
r###"<h1>Code</h1>
<h2>Indented delimiter row</h2>
<table>
@@ -1345,7 +1341,7 @@ b
allow_dangerous_html: true,
..gfm.clone()
}
- ),
+ )?,
r###"<h2>Blank line</h2>
<table>
<thead>
@@ -1696,7 +1692,7 @@ a
| - |
"###,
&gfm
- ),
+ )?,
r###"<h1>Loose</h1>
<h2>Loose</h2>
<table>
@@ -1748,7 +1744,7 @@ Note: GH has a bug where in case C and E, the escaped escape is treated as a
normal escape: <https://github.com/github/cmark-gfm/issues/277>.
"###,
&gfm
- ),
+ )?,
r###"<h1>Some more escapes</h1>
<table>
<thead>
@@ -1779,4 +1775,6 @@ normal escape: <a href="https://github.com/github/cmark-gfm/issues/277">https://
"###,
"should match loose escapes like GitHub"
);
+
+ Ok(())
}
diff --git a/tests/gfm_tagfilter.rs b/tests/gfm_tagfilter.rs
index 54c56ae..68246bd 100644
--- a/tests/gfm_tagfilter.rs
+++ b/tests/gfm_tagfilter.rs
@@ -3,7 +3,7 @@ use micromark::{micromark_with_options, Options};
use pretty_assertions::assert_eq;
#[test]
-fn gfm_tagfilter() {
+fn gfm_tagfilter() -> Result<(), String> {
assert_eq!(
micromark_with_options(
"<iframe>",
@@ -11,7 +11,7 @@ fn gfm_tagfilter() {
allow_dangerous_html: true,
..Options::default()
}
- ),
+ )?,
"<iframe>",
"should not filter by default"
);
@@ -23,7 +23,7 @@ fn gfm_tagfilter() {
gfm_tagfilter: true,
..Options::default()
}
- ),
+ )?,
"<p>a &lt;i&gt;</p>\n&lt;script&gt;",
"should not turn `allow_dangerous_html` on"
);
@@ -36,7 +36,7 @@ fn gfm_tagfilter() {
allow_dangerous_html: true,
..Options::default()
}
- ),
+ )?,
"&lt;iframe>",
"should filter"
);
@@ -91,7 +91,7 @@ javascript:/*--></title></style></textarea></script></xmp><svg/onload='+/"/+/onm
allow_dangerous_html: true,
..Options::default()
}
- ),
+ )?,
r###"&lt;title>
<div title="&lt;title>"></div>
<p><span title="&lt;title>"></span></p>
@@ -118,4 +118,6 @@ javascript:/*--></title></style></textarea></script></xmp><svg/onload='+/"/+/onm
"###,
"should handle things like GitHub"
);
+
+ Ok(())
}
diff --git a/tests/gfm_task_list_item.rs b/tests/gfm_task_list_item.rs
index 66b646f..b824730 100644
--- a/tests/gfm_task_list_item.rs
+++ b/tests/gfm_task_list_item.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn gfm_task_list_item() {
+fn gfm_task_list_item() -> Result<(), String> {
let gfm = Options {
constructs: Constructs::gfm(),
..Options::default()
@@ -16,25 +16,25 @@ fn gfm_task_list_item() {
);
assert_eq!(
- micromark_with_options("* [x] y.", &gfm),
+ micromark_with_options("* [x] y.", &gfm)?,
"<ul>\n<li><input type=\"checkbox\" disabled=\"\" checked=\"\" /> y.</li>\n</ul>",
"should support task list item checks"
);
assert_eq!(
- micromark_with_options("* [ ] z.", &gfm),
+ micromark_with_options("* [ ] z.", &gfm)?,
"<ul>\n<li><input type=\"checkbox\" disabled=\"\" /> z.</li>\n</ul>",
"should support unchecked task list item checks"
);
assert_eq!(
- micromark_with_options("*\n [x]", &gfm),
+ micromark_with_options("*\n [x]", &gfm)?,
"<ul>\n<li>[x]</li>\n</ul>",
"should not support laziness (1)"
);
assert_eq!(
- micromark_with_options("*\n[x]", &gfm),
+ micromark_with_options("*\n[x]", &gfm)?,
"<ul>\n<li></li>\n</ul>\n<p>[x]</p>",
"should not support laziness (2)"
);
@@ -122,7 +122,7 @@ EOL after:
.replace('␠', " ")
.replace('␉', "\t"),
&gfm
- ),
+ )?,
r###"<ul>
<li><input type="checkbox" disabled="" /> foo</li>
<li><input type="checkbox" disabled="" checked="" /> bar</li>
@@ -239,4 +239,6 @@ Text.</li>
"###,
"should handle things like GitHub"
);
+
+ Ok(())
}
diff --git a/tests/hard_break_escape.rs b/tests/hard_break_escape.rs
index 70fbf64..2510860 100644
--- a/tests/hard_break_escape.rs
+++ b/tests/hard_break_escape.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn hard_break_escape() {
+fn hard_break_escape() -> Result<(), String> {
assert_eq!(
micromark("foo\\\nbaz"),
"<p>foo<br />\nbaz</p>",
@@ -50,8 +50,10 @@ fn hard_break_escape() {
},
..Options::default()
}
- ),
+ )?,
"<p>a\\\nb</p>",
"should support turning off hard break (escape)"
);
+
+ Ok(())
}
diff --git a/tests/hard_break_trailing.rs b/tests/hard_break_trailing.rs
index f977657..b5577fd 100644
--- a/tests/hard_break_trailing.rs
+++ b/tests/hard_break_trailing.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn hard_break_trailing() {
+fn hard_break_trailing() -> Result<(), String> {
assert_eq!(
micromark("foo \nbaz"),
"<p>foo<br />\nbaz</p>",
@@ -116,8 +116,10 @@ fn hard_break_trailing() {
},
..Options::default()
}
- ),
+ )?,
"<p>a\nb</p>",
"should support turning off hard break (trailing)"
);
+
+ Ok(())
}
diff --git a/tests/heading_atx.rs b/tests/heading_atx.rs
index 715b17a..1bd437c 100644
--- a/tests/heading_atx.rs
+++ b/tests/heading_atx.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn heading_atx() {
+fn heading_atx() -> Result<(), String> {
assert_eq!(
micromark("# foo"),
"<h1>foo</h1>",
@@ -212,8 +212,10 @@ fn heading_atx() {
},
..Options::default()
}
- ),
+ )?,
"<p># a</p>",
"should support turning off heading (atx)"
);
+
+ Ok(())
}
diff --git a/tests/heading_setext.rs b/tests/heading_setext.rs
index fa979be..b2889f5 100644
--- a/tests/heading_setext.rs
+++ b/tests/heading_setext.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn heading_setext() {
+fn heading_setext() -> Result<(), String> {
assert_eq!(
micromark("Foo *bar*\n========="),
"<h1>Foo <em>bar</em></h1>",
@@ -279,8 +279,10 @@ fn heading_setext() {
},
..Options::default()
}
- ),
+ )?,
"<p>a\n-</p>",
"should support turning off setext underlines"
);
+
+ Ok(())
}
diff --git a/tests/html_flow.rs b/tests/html_flow.rs
index 7013657..c411036 100644
--- a/tests/html_flow.rs
+++ b/tests/html_flow.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn html_flow() {
+fn html_flow() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
..Options::default()
@@ -16,7 +16,7 @@ fn html_flow() {
);
assert_eq!(
- micromark_with_options("<!-- asd -->", &danger),
+ micromark_with_options("<!-- asd -->", &danger)?,
"<!-- asd -->",
"should support a heading w/ rank 1"
);
@@ -31,14 +31,16 @@ fn html_flow() {
},
..Options::default()
}
- ),
+ )?,
"<p>&lt;x&gt;</p>",
"should support turning off html (flow)"
);
+
+ Ok(())
}
#[test]
-fn html_flow_1_raw() {
+fn html_flow_1_raw() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
..Options::default()
@@ -54,7 +56,7 @@ main = print $ parseTags tags
</code></pre>
okay",
&danger
- ),
+ )?,
"<pre language=\"haskell\"><code>
import Text.HTML.TagSoup
@@ -74,7 +76,7 @@ document.getElementById(\"demo\").innerHTML = \"Hello JavaScript!\";
</script>
okay",
&danger
- ),
+ )?,
"<script type=\"text/javascript\">
// JavaScript example
@@ -94,7 +96,7 @@ p {color:blue;}
</style>
okay",
&danger
- ),
+ )?,
"<style
type=\"text/css\">
h1 {color:red;}
@@ -106,285 +108,291 @@ p {color:blue;}
);
assert_eq!(
- micromark_with_options("<style\n type=\"text/css\">\n\nfoo", &danger),
+ micromark_with_options("<style\n type=\"text/css\">\n\nfoo", &danger)?,
"<style\n type=\"text/css\">\n\nfoo",
"should support raw tags w/o ending"
);
assert_eq!(
- micromark_with_options("<style>p{color:red;}</style>\n*foo*", &danger),
+ micromark_with_options("<style>p{color:red;}</style>\n*foo*", &danger)?,
"<style>p{color:red;}</style>\n<p><em>foo</em></p>",
"should support raw tags w/ start and end on a single line"
);
assert_eq!(
- micromark_with_options("<script>\nfoo\n</script>1. *bar*", &danger),
+ micromark_with_options("<script>\nfoo\n</script>1. *bar*", &danger)?,
"<script>\nfoo\n</script>1. *bar*",
"should support raw tags w/ more data on ending line"
);
assert_eq!(
- micromark_with_options("<script", &danger),
+ micromark_with_options("<script", &danger)?,
"<script",
"should support an eof directly after a raw tag name"
);
assert_eq!(
- micromark_with_options("</script\nmore", &danger),
+ micromark_with_options("</script\nmore", &danger)?,
"<p>&lt;/script\nmore</p>",
"should not support a raw closing tag"
);
assert_eq!(
- micromark_with_options("<script/", &danger),
+ micromark_with_options("<script/", &danger)?,
"<p>&lt;script/</p>",
"should not support an eof after a self-closing slash"
);
assert_eq!(
- micromark_with_options("<script/\n*asd*", &danger),
+ micromark_with_options("<script/\n*asd*", &danger)?,
"<p>&lt;script/\n<em>asd</em></p>",
"should not support a line ending after a self-closing slash"
);
assert_eq!(
- micromark_with_options("<script/>", &danger),
+ micromark_with_options("<script/>", &danger)?,
"<script/>",
"should support an eof after a self-closing tag"
);
assert_eq!(
- micromark_with_options("<script/>\na", &danger),
+ micromark_with_options("<script/>\na", &danger)?,
"<script/>\na",
"should support a line ending after a self-closing tag"
);
assert_eq!(
- micromark_with_options("<script/>a", &danger),
+ micromark_with_options("<script/>a", &danger)?,
"<p><script/>a</p>",
"should not support other characters after a self-closing tag"
);
assert_eq!(
- micromark_with_options("<script>a", &danger),
+ micromark_with_options("<script>a", &danger)?,
"<script>a",
"should support other characters after a raw opening tag"
);
// Extra.
assert_eq!(
- micromark_with_options("Foo\n<script", &danger),
+ micromark_with_options("Foo\n<script", &danger)?,
"<p>Foo</p>\n<script",
"should support interrupting paragraphs w/ raw tags"
);
assert_eq!(
- micromark_with_options("<script>\n \n \n</script>", &danger),
+ micromark_with_options("<script>\n \n \n</script>", &danger)?,
"<script>\n \n \n</script>",
"should support blank lines in raw"
);
assert_eq!(
- micromark_with_options("> <script>\na", &danger),
+ micromark_with_options("> <script>\na", &danger)?,
"<blockquote>\n<script>\n</blockquote>\n<p>a</p>",
"should not support lazyness (1)"
);
assert_eq!(
- micromark_with_options("> a\n<script>", &danger),
+ micromark_with_options("> a\n<script>", &danger)?,
"<blockquote>\n<p>a</p>\n</blockquote>\n<script>",
"should not support lazyness (2)"
);
+
+ Ok(())
}
#[test]
-fn html_flow_2_comment() {
+fn html_flow_2_comment() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
..Options::default()
};
assert_eq!(
- micromark_with_options("<!-- Foo\n\nbar\n baz -->\nokay", &danger),
+ micromark_with_options("<!-- Foo\n\nbar\n baz -->\nokay", &danger)?,
"<!-- Foo\n\nbar\n baz -->\n<p>okay</p>",
"should support comments (type 2)"
);
assert_eq!(
- micromark_with_options("<!-- foo -->*bar*\n*baz*", &danger),
+ micromark_with_options("<!-- foo -->*bar*\n*baz*", &danger)?,
"<!-- foo -->*bar*\n<p><em>baz</em></p>",
"should support comments w/ start and end on a single line"
);
assert_eq!(
- micromark_with_options("<!-asd-->", &danger),
+ micromark_with_options("<!-asd-->", &danger)?,
"<p>&lt;!-asd--&gt;</p>",
"should not support a single dash to start comments"
);
assert_eq!(
- micromark_with_options("<!-->", &danger),
+ micromark_with_options("<!-->", &danger)?,
"<!-->",
"should support comments where the start dashes are the end dashes (1)"
);
assert_eq!(
- micromark_with_options("<!--->", &danger),
+ micromark_with_options("<!--->", &danger)?,
"<!--->",
"should support comments where the start dashes are the end dashes (2)"
);
assert_eq!(
- micromark_with_options("<!---->", &danger),
+ micromark_with_options("<!---->", &danger)?,
"<!---->",
"should support empty comments"
);
// If the `\"` is encoded, we’re in text. If it remains, we’re in HTML.
assert_eq!(
- micromark_with_options("<!--\n->\n\"", &danger),
+ micromark_with_options("<!--\n->\n\"", &danger)?,
"<!--\n->\n\"",
"should not end a comment at one dash (`->`)"
);
assert_eq!(
- micromark_with_options("<!--\n-->\n\"", &danger),
+ micromark_with_options("<!--\n-->\n\"", &danger)?,
"<!--\n-->\n<p>&quot;</p>",
"should end a comment at two dashes (`-->`)"
);
assert_eq!(
- micromark_with_options("<!--\n--->\n\"", &danger),
+ micromark_with_options("<!--\n--->\n\"", &danger)?,
"<!--\n--->\n<p>&quot;</p>",
"should end a comment at three dashes (`--->`)"
);
assert_eq!(
- micromark_with_options("<!--\n---->\n\"", &danger),
+ micromark_with_options("<!--\n---->\n\"", &danger)?,
"<!--\n---->\n<p>&quot;</p>",
"should end a comment at four dashes (`---->`)"
);
assert_eq!(
- micromark_with_options(" <!-- foo -->", &danger),
+ micromark_with_options(" <!-- foo -->", &danger)?,
" <!-- foo -->",
"should support comments w/ indent"
);
assert_eq!(
- micromark_with_options(" <!-- foo -->", &danger),
+ micromark_with_options(" <!-- foo -->", &danger)?,
"<pre><code>&lt;!-- foo --&gt;\n</code></pre>",
"should not support comments w/ a 4 character indent"
);
// Extra.
assert_eq!(
- micromark_with_options("Foo\n<!--", &danger),
+ micromark_with_options("Foo\n<!--", &danger)?,
"<p>Foo</p>\n<!--",
"should support interrupting paragraphs w/ comments"
);
assert_eq!(
- micromark_with_options("<!--\n \n \n-->", &danger),
+ micromark_with_options("<!--\n \n \n-->", &danger)?,
"<!--\n \n \n-->",
"should support blank lines in comments"
);
assert_eq!(
- micromark_with_options("> <!--\na", &danger),
+ micromark_with_options("> <!--\na", &danger)?,
"<blockquote>\n<!--\n</blockquote>\n<p>a</p>",
"should not support lazyness (1)"
);
assert_eq!(
- micromark_with_options("> a\n<!--", &danger),
+ micromark_with_options("> a\n<!--", &danger)?,
"<blockquote>\n<p>a</p>\n</blockquote>\n<!--",
"should not support lazyness (2)"
);
+
+ Ok(())
}
#[test]
-fn html_flow_3_instruction() {
+fn html_flow_3_instruction() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
..Options::default()
};
assert_eq!(
- micromark_with_options("<?php\n\n echo \">\";\n\n?>\nokay", &danger),
+ micromark_with_options("<?php\n\n echo \">\";\n\n?>\nokay", &danger)?,
"<?php\n\n echo \">\";\n\n?>\n<p>okay</p>",
"should support instructions (type 3)"
);
assert_eq!(
- micromark_with_options("<?>", &danger),
+ micromark_with_options("<?>", &danger)?,
"<?>",
"should support empty instructions where the `?` is part of both the start and the end"
);
assert_eq!(
- micromark_with_options("<??>", &danger),
+ micromark_with_options("<??>", &danger)?,
"<??>",
"should support empty instructions"
);
// Extra.
assert_eq!(
- micromark_with_options("Foo\n<?", &danger),
+ micromark_with_options("Foo\n<?", &danger)?,
"<p>Foo</p>\n<?",
"should support interrupting paragraphs w/ instructions"
);
assert_eq!(
- micromark_with_options("<?\n \n \n?>", &danger),
+ micromark_with_options("<?\n \n \n?>", &danger)?,
"<?\n \n \n?>",
"should support blank lines in instructions"
);
assert_eq!(
- micromark_with_options("> <?\na", &danger),
+ micromark_with_options("> <?\na", &danger)?,
"<blockquote>\n<?\n</blockquote>\n<p>a</p>",
"should not support lazyness (1)"
);
assert_eq!(
- micromark_with_options("> a\n<?", &danger),
+ micromark_with_options("> a\n<?", &danger)?,
"<blockquote>\n<p>a</p>\n</blockquote>\n<?",
"should not support lazyness (2)"
);
+
+ Ok(())
}
#[test]
-fn html_flow_4_declaration() {
+fn html_flow_4_declaration() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
..Options::default()
};
assert_eq!(
- micromark_with_options("<!DOCTYPE html>", &danger),
+ micromark_with_options("<!DOCTYPE html>", &danger)?,
"<!DOCTYPE html>",
"should support declarations (type 4)"
);
assert_eq!(
- micromark_with_options("<!123>", &danger),
+ micromark_with_options("<!123>", &danger)?,
"<p>&lt;!123&gt;</p>",
"should not support declarations that start w/o an alpha"
);
assert_eq!(
- micromark_with_options("<!>", &danger),
+ micromark_with_options("<!>", &danger)?,
"<p>&lt;!&gt;</p>",
"should not support declarations w/o an identifier"
);
assert_eq!(
- micromark_with_options("<!a>", &danger),
+ micromark_with_options("<!a>", &danger)?,
"<!a>",
"should support declarations w/o a single alpha as identifier"
);
// Extra.
assert_eq!(
- micromark_with_options("Foo\n<!d", &danger),
+ micromark_with_options("Foo\n<!d", &danger)?,
"<p>Foo</p>\n<!d",
"should support interrupting paragraphs w/ declarations"
);
@@ -392,26 +400,28 @@ fn html_flow_4_declaration() {
// Note about the lower letter:
// <https://github.com/commonmark/commonmark-spec/pull/621>
assert_eq!(
- micromark_with_options("<!a\n \n \n>", &danger),
+ micromark_with_options("<!a\n \n \n>", &danger)?,
"<!a\n \n \n>",
"should support blank lines in declarations"
);
assert_eq!(
- micromark_with_options("> <!a\nb", &danger),
+ micromark_with_options("> <!a\nb", &danger)?,
"<blockquote>\n<!a\n</blockquote>\n<p>b</p>",
"should not support lazyness (1)"
);
assert_eq!(
- micromark_with_options("> a\n<!b", &danger),
+ micromark_with_options("> a\n<!b", &danger)?,
"<blockquote>\n<p>a</p>\n</blockquote>\n<!b",
"should not support lazyness (2)"
);
+
+ Ok(())
}
#[test]
-fn html_flow_5_cdata() {
+fn html_flow_5_cdata() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
..Options::default()
@@ -421,32 +431,32 @@ fn html_flow_5_cdata() {
micromark_with_options(
"<![CDATA[\nfunction matchwo(a,b)\n{\n if (a < b && a < 0) then {\n return 1;\n\n } else {\n\n return 0;\n }\n}\n]]>\nokay",
&danger
- ),
+ )?,
"<![CDATA[\nfunction matchwo(a,b)\n{\n if (a < b && a < 0) then {\n return 1;\n\n } else {\n\n return 0;\n }\n}\n]]>\n<p>okay</p>",
"should support cdata (type 5)"
);
assert_eq!(
- micromark_with_options("<![CDATA[]]>", &danger),
+ micromark_with_options("<![CDATA[]]>", &danger)?,
"<![CDATA[]]>",
"should support empty cdata"
);
assert_eq!(
- micromark_with_options("<![CDATA]]>", &danger),
+ micromark_with_options("<![CDATA]]>", &danger)?,
"<p>&lt;![CDATA]]&gt;</p>",
"should not support cdata w/ a missing `[`"
);
assert_eq!(
- micromark_with_options("<![CDATA[]]]>", &danger),
+ micromark_with_options("<![CDATA[]]]>", &danger)?,
"<![CDATA[]]]>",
"should support cdata w/ a single `]` as content"
);
// Extra.
assert_eq!(
- micromark_with_options("Foo\n<![CDATA[", &danger),
+ micromark_with_options("Foo\n<![CDATA[", &danger)?,
"<p>Foo</p>\n<![CDATA[",
"should support interrupting paragraphs w/ cdata"
);
@@ -454,32 +464,34 @@ fn html_flow_5_cdata() {
// Note: cmjs parses this differently.
// See: <https://github.com/commonmark/commonmark.js/issues/193>
assert_eq!(
- micromark_with_options("<![cdata[]]>", &danger),
+ micromark_with_options("<![cdata[]]>", &danger)?,
"<p>&lt;![cdata[]]&gt;</p>",
"should not support lowercase cdata"
);
assert_eq!(
- micromark_with_options("<![CDATA[\n \n \n]]>", &danger),
+ micromark_with_options("<![CDATA[\n \n \n]]>", &danger)?,
"<![CDATA[\n \n \n]]>",
"should support blank lines in cdata"
);
assert_eq!(
- micromark_with_options("> <![CDATA[\na", &danger),
+ micromark_with_options("> <![CDATA[\na", &danger)?,
"<blockquote>\n<![CDATA[\n</blockquote>\n<p>a</p>",
"should not support lazyness (1)"
);
assert_eq!(
- micromark_with_options("> a\n<![CDATA[", &danger),
+ micromark_with_options("> a\n<![CDATA[", &danger)?,
"<blockquote>\n<p>a</p>\n</blockquote>\n<![CDATA[",
"should not support lazyness (2)"
);
+
+ Ok(())
}
#[test]
-fn html_flow_6_basic() {
+fn html_flow_6_basic() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
..Options::default()
@@ -489,7 +501,7 @@ fn html_flow_6_basic() {
micromark_with_options(
"<table><tr><td>\n<pre>\n**Hello**,\n\n_world_.\n</pre>\n</td></tr></table>",
&danger
- ),
+ )?,
"<table><tr><td>\n<pre>\n**Hello**,\n<p><em>world</em>.\n</pre></p>\n</td></tr></table>",
"should support html (basic)"
);
@@ -506,7 +518,7 @@ fn html_flow_6_basic() {
okay.",
&danger
- ),
+ )?,
"<table>
<tr>
<td>
@@ -519,121 +531,121 @@ okay.",
);
assert_eq!(
- micromark_with_options(" <div>\n *hello*\n <foo><a>", &danger),
+ micromark_with_options(" <div>\n *hello*\n <foo><a>", &danger)?,
" <div>\n *hello*\n <foo><a>",
"should support html of type 6 (2)"
);
assert_eq!(
- micromark_with_options("</div>\n*foo*", &danger),
+ micromark_with_options("</div>\n*foo*", &danger)?,
"</div>\n*foo*",
"should support html starting w/ a closing tag"
);
assert_eq!(
- micromark_with_options("<DIV CLASS=\"foo\">\n\n*Markdown*\n\n</DIV>", &danger),
+ micromark_with_options("<DIV CLASS=\"foo\">\n\n*Markdown*\n\n</DIV>", &danger)?,
"<DIV CLASS=\"foo\">\n<p><em>Markdown</em></p>\n</DIV>",
"should support html w/ markdown in between"
);
assert_eq!(
- micromark_with_options("<div id=\"foo\"\n class=\"bar\">\n</div>", &danger),
+ micromark_with_options("<div id=\"foo\"\n class=\"bar\">\n</div>", &danger)?,
"<div id=\"foo\"\n class=\"bar\">\n</div>",
"should support html w/ line endings (1)"
);
assert_eq!(
- micromark_with_options("<div id=\"foo\" class=\"bar\n baz\">\n</div>", &danger),
+ micromark_with_options("<div id=\"foo\" class=\"bar\n baz\">\n</div>", &danger)?,
"<div id=\"foo\" class=\"bar\n baz\">\n</div>",
"should support html w/ line endings (2)"
);
assert_eq!(
- micromark_with_options("<div>\n*foo*\n\n*bar*", &danger),
+ micromark_with_options("<div>\n*foo*\n\n*bar*", &danger)?,
"<div>\n*foo*\n<p><em>bar</em></p>",
"should support an unclosed html element"
);
assert_eq!(
- micromark_with_options("<div id=\"foo\"\n*hi*", &danger),
+ micromark_with_options("<div id=\"foo\"\n*hi*", &danger)?,
"<div id=\"foo\"\n*hi*",
"should support garbage html (1)"
);
assert_eq!(
- micromark_with_options("<div class\nfoo", &danger),
+ micromark_with_options("<div class\nfoo", &danger)?,
"<div class\nfoo",
"should support garbage html (2)"
);
assert_eq!(
- micromark_with_options("<div *???-&&&-<---\n*foo*", &danger),
+ micromark_with_options("<div *???-&&&-<---\n*foo*", &danger)?,
"<div *???-&&&-<---\n*foo*",
"should support garbage html (3)"
);
assert_eq!(
- micromark_with_options("<div><a href=\"bar\">*foo*</a></div>", &danger),
+ micromark_with_options("<div><a href=\"bar\">*foo*</a></div>", &danger)?,
"<div><a href=\"bar\">*foo*</a></div>",
"should support other tags in the opening (1)"
);
assert_eq!(
- micromark_with_options("<table><tr><td>\nfoo\n</td></tr></table>", &danger),
+ micromark_with_options("<table><tr><td>\nfoo\n</td></tr></table>", &danger)?,
"<table><tr><td>\nfoo\n</td></tr></table>",
"should support other tags in the opening (2)"
);
assert_eq!(
- micromark_with_options("<div></div>\n``` c\nint x = 33;\n```", &danger),
+ micromark_with_options("<div></div>\n``` c\nint x = 33;\n```", &danger)?,
"<div></div>\n``` c\nint x = 33;\n```",
"should include everything ’till a blank line"
);
assert_eq!(
- micromark_with_options("> <div>\n> foo\n\nbar", &danger),
+ micromark_with_options("> <div>\n> foo\n\nbar", &danger)?,
"<blockquote>\n<div>\nfoo\n</blockquote>\n<p>bar</p>",
"should support basic tags w/o ending in containers (1)"
);
assert_eq!(
- micromark_with_options("- <div>\n- foo", &danger),
+ micromark_with_options("- <div>\n- foo", &danger)?,
"<ul>\n<li>\n<div>\n</li>\n<li>foo</li>\n</ul>",
"should support basic tags w/o ending in containers (2)"
);
assert_eq!(
- micromark_with_options(" <div>", &danger),
+ micromark_with_options(" <div>", &danger)?,
" <div>",
"should support basic tags w/ indent"
);
assert_eq!(
- micromark_with_options(" <div>", &danger),
+ micromark_with_options(" <div>", &danger)?,
"<pre><code>&lt;div&gt;\n</code></pre>",
"should not support basic tags w/ a 4 character indent"
);
assert_eq!(
- micromark_with_options("Foo\n<div>\nbar\n</div>", &danger),
+ micromark_with_options("Foo\n<div>\nbar\n</div>", &danger)?,
"<p>Foo</p>\n<div>\nbar\n</div>",
"should support interrupting paragraphs w/ basic tags"
);
assert_eq!(
- micromark_with_options("<div>\nbar\n</div>\n*foo*", &danger),
+ micromark_with_options("<div>\nbar\n</div>\n*foo*", &danger)?,
"<div>\nbar\n</div>\n*foo*",
"should require a blank line to end"
);
assert_eq!(
- micromark_with_options("<div>\n\n*Emphasized* text.\n\n</div>", &danger),
+ micromark_with_options("<div>\n\n*Emphasized* text.\n\n</div>", &danger)?,
"<div>\n<p><em>Emphasized</em> text.</p>\n</div>",
"should support interleaving w/ blank lines"
);
assert_eq!(
- micromark_with_options("<div>\n*Emphasized* text.\n</div>", &danger),
+ micromark_with_options("<div>\n*Emphasized* text.\n</div>", &danger)?,
"<div>\n*Emphasized* text.\n</div>",
"should not support interleaving w/o blank lines"
);
@@ -642,7 +654,7 @@ okay.",
micromark_with_options(
"<table>\n\n<tr>\n\n<td>\nHi\n</td>\n\n</tr>\n\n</table>",
&danger
- ),
+ )?,
"<table>\n<tr>\n<td>\nHi\n</td>\n</tr>\n</table>",
"should support blank lines between adjacent html"
);
@@ -661,7 +673,7 @@ okay.",
</table>",
&danger
- ),
+ )?,
"<table>
<tr>
<pre><code>&lt;td&gt;
@@ -674,395 +686,399 @@ okay.",
);
assert_eq!(
- micromark_with_options("</1>", &danger),
+ micromark_with_options("</1>", &danger)?,
"<p>&lt;/1&gt;</p>",
"should not support basic tags w/ an incorrect name start character"
);
assert_eq!(
- micromark_with_options("<div", &danger),
+ micromark_with_options("<div", &danger)?,
"<div",
"should support an eof directly after a basic tag name"
);
assert_eq!(
- micromark_with_options("<div\n", &danger),
+ micromark_with_options("<div\n", &danger)?,
"<div\n",
"should support a line ending directly after a tag name"
);
assert_eq!(
- micromark_with_options("<div ", &danger),
+ micromark_with_options("<div ", &danger)?,
"<div ",
"should support an eof after a space directly after a tag name"
);
assert_eq!(
- micromark_with_options("<div/", &danger),
+ micromark_with_options("<div/", &danger)?,
"<p>&lt;div/</p>",
"should not support an eof directly after a self-closing slash"
);
assert_eq!(
- micromark_with_options("<div/\n*asd*", &danger),
+ micromark_with_options("<div/\n*asd*", &danger)?,
"<p>&lt;div/\n<em>asd</em></p>",
"should not support a line ending after a self-closing slash"
);
assert_eq!(
- micromark_with_options("<div/>", &danger),
+ micromark_with_options("<div/>", &danger)?,
"<div/>",
"should support an eof after a self-closing tag"
);
assert_eq!(
- micromark_with_options("<div/>\na", &danger),
+ micromark_with_options("<div/>\na", &danger)?,
"<div/>\na",
"should support a line ending after a self-closing tag"
);
assert_eq!(
- micromark_with_options("<div/>a", &danger),
+ micromark_with_options("<div/>a", &danger)?,
"<div/>a",
"should support another character after a self-closing tag"
);
assert_eq!(
- micromark_with_options("<div>a", &danger),
+ micromark_with_options("<div>a", &danger)?,
"<div>a",
"should support another character after a basic opening tag"
);
// Extra.
assert_eq!(
- micromark_with_options("Foo\n<div/>", &danger),
+ micromark_with_options("Foo\n<div/>", &danger)?,
"<p>Foo</p>\n<div/>",
"should support interrupting paragraphs w/ self-closing basic tags"
);
assert_eq!(
- micromark_with_options("<div\n \n \n>", &danger),
+ micromark_with_options("<div\n \n \n>", &danger)?,
"<div\n<blockquote>\n</blockquote>",
"should not support blank lines in basic"
);
assert_eq!(
- micromark_with_options("> <div\na", &danger),
+ micromark_with_options("> <div\na", &danger)?,
"<blockquote>\n<div\n</blockquote>\n<p>a</p>",
"should not support lazyness (1)"
);
assert_eq!(
- micromark_with_options("> a\n<div", &danger),
+ micromark_with_options("> a\n<div", &danger)?,
"<blockquote>\n<p>a</p>\n</blockquote>\n<div",
"should not support lazyness (2)"
);
+
+ Ok(())
}
#[test]
-fn html_flow_7_complete() {
+fn html_flow_7_complete() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
..Options::default()
};
assert_eq!(
- micromark_with_options("<a href=\"foo\">\n*bar*\n</a>", &danger),
+ micromark_with_options("<a href=\"foo\">\n*bar*\n</a>", &danger)?,
"<a href=\"foo\">\n*bar*\n</a>",
"should support complete tags (type 7)"
);
assert_eq!(
- micromark_with_options("<Warning>\n*bar*\n</Warning>", &danger),
+ micromark_with_options("<Warning>\n*bar*\n</Warning>", &danger)?,
"<Warning>\n*bar*\n</Warning>",
"should support non-html tag names"
);
assert_eq!(
- micromark_with_options("<i class=\"foo\">\n*bar*\n</i>", &danger),
+ micromark_with_options("<i class=\"foo\">\n*bar*\n</i>", &danger)?,
"<i class=\"foo\">\n*bar*\n</i>",
"should support non-“block” html tag names (1)"
);
assert_eq!(
- micromark_with_options("<del>\n*foo*\n</del>", &danger),
+ micromark_with_options("<del>\n*foo*\n</del>", &danger)?,
"<del>\n*foo*\n</del>",
"should support non-“block” html tag names (2)"
);
assert_eq!(
- micromark_with_options("</ins>\n*bar*", &danger),
+ micromark_with_options("</ins>\n*bar*", &danger)?,
"</ins>\n*bar*",
"should support closing tags"
);
assert_eq!(
- micromark_with_options("<del>\n\n*foo*\n\n</del>", &danger),
+ micromark_with_options("<del>\n\n*foo*\n\n</del>", &danger)?,
"<del>\n<p><em>foo</em></p>\n</del>",
"should support interleaving"
);
assert_eq!(
- micromark_with_options("<del>*foo*</del>", &danger),
+ micromark_with_options("<del>*foo*</del>", &danger)?,
"<p><del><em>foo</em></del></p>",
"should not support interleaving w/o blank lines"
);
assert_eq!(
- micromark_with_options("<div>\n \nasd", &danger),
+ micromark_with_options("<div>\n \nasd", &danger)?,
"<div>\n<p>asd</p>",
"should support interleaving w/ whitespace-only blank lines"
);
assert_eq!(
- micromark_with_options("Foo\n<a href=\"bar\">\nbaz", &danger),
+ micromark_with_options("Foo\n<a href=\"bar\">\nbaz", &danger)?,
"<p>Foo\n<a href=\"bar\">\nbaz</p>",
"should not support interrupting paragraphs w/ complete tags"
);
assert_eq!(
- micromark_with_options("<x", &danger),
+ micromark_with_options("<x", &danger)?,
"<p>&lt;x</p>",
"should not support an eof directly after a tag name"
);
assert_eq!(
- micromark_with_options("<x/", &danger),
+ micromark_with_options("<x/", &danger)?,
"<p>&lt;x/</p>",
"should not support an eof directly after a self-closing slash"
);
assert_eq!(
- micromark_with_options("<x\n", &danger),
+ micromark_with_options("<x\n", &danger)?,
"<p>&lt;x</p>\n",
"should not support a line ending directly after a tag name"
);
assert_eq!(
- micromark_with_options("<x ", &danger),
+ micromark_with_options("<x ", &danger)?,
"<p>&lt;x</p>",
"should not support an eof after a space directly after a tag name"
);
assert_eq!(
- micromark_with_options("<x/", &danger),
+ micromark_with_options("<x/", &danger)?,
"<p>&lt;x/</p>",
"should not support an eof directly after a self-closing slash"
);
assert_eq!(
- micromark_with_options("<x/\n*asd*", &danger),
+ micromark_with_options("<x/\n*asd*", &danger)?,
"<p>&lt;x/\n<em>asd</em></p>",
"should not support a line ending after a self-closing slash"
);
assert_eq!(
- micromark_with_options("<x/>", &danger),
+ micromark_with_options("<x/>", &danger)?,
"<x/>",
"should support an eof after a self-closing tag"
);
assert_eq!(
- micromark_with_options("<x/>\na", &danger),
+ micromark_with_options("<x/>\na", &danger)?,
"<x/>\na",
"should support a line ending after a self-closing tag"
);
assert_eq!(
- micromark_with_options("<x/>a", &danger),
+ micromark_with_options("<x/>a", &danger)?,
"<p><x/>a</p>",
"should not support another character after a self-closing tag"
);
assert_eq!(
- micromark_with_options("<x>a", &danger),
+ micromark_with_options("<x>a", &danger)?,
"<p><x>a</p>",
"should not support another character after an opening tag"
);
assert_eq!(
- micromark_with_options("<x y>", &danger),
+ micromark_with_options("<x y>", &danger)?,
"<x y>",
"should support boolean attributes in a complete tag"
);
assert_eq!(
- micromark_with_options("<x\ny>", &danger),
+ micromark_with_options("<x\ny>", &danger)?,
"<p><x\ny></p>",
"should not support a line ending before an attribute name"
);
assert_eq!(
- micromark_with_options("<x\n y>", &danger),
+ micromark_with_options("<x\n y>", &danger)?,
"<p><x\ny></p>",
"should not support a line ending w/ whitespace before an attribute name"
);
assert_eq!(
- micromark_with_options("<x\n \ny>", &danger),
+ micromark_with_options("<x\n \ny>", &danger)?,
"<p>&lt;x</p>\n<p>y&gt;</p>",
"should not support a line ending w/ whitespace and another line ending before an attribute name"
);
assert_eq!(
- micromark_with_options("<x y\nz>", &danger),
+ micromark_with_options("<x y\nz>", &danger)?,
"<p><x y\nz></p>",
"should not support a line ending between attribute names"
);
assert_eq!(
- micromark_with_options("<x y z>", &danger),
+ micromark_with_options("<x y z>", &danger)?,
"<x y z>",
"should support whitespace between attribute names"
);
assert_eq!(
- micromark_with_options("<x:y>", &danger),
+ micromark_with_options("<x:y>", &danger)?,
"<p>&lt;x:y&gt;</p>",
"should not support a colon in a tag name"
);
assert_eq!(
- micromark_with_options("<x_y>", &danger),
+ micromark_with_options("<x_y>", &danger)?,
"<p>&lt;x_y&gt;</p>",
"should not support an underscore in a tag name"
);
assert_eq!(
- micromark_with_options("<x.y>", &danger),
+ micromark_with_options("<x.y>", &danger)?,
"<p>&lt;x.y&gt;</p>",
"should not support a dot in a tag name"
);
assert_eq!(
- micromark_with_options("<x :y>", &danger),
+ micromark_with_options("<x :y>", &danger)?,
"<x :y>",
"should support a colon to start an attribute name"
);
assert_eq!(
- micromark_with_options("<x _y>", &danger),
+ micromark_with_options("<x _y>", &danger)?,
"<x _y>",
"should support an underscore to start an attribute name"
);
assert_eq!(
- micromark_with_options("<x .y>", &danger),
+ micromark_with_options("<x .y>", &danger)?,
"<p>&lt;x .y&gt;</p>",
"should not support a dot to start an attribute name"
);
assert_eq!(
- micromark_with_options("<x y:>", &danger),
+ micromark_with_options("<x y:>", &danger)?,
"<x y:>",
"should support a colon to end an attribute name"
);
assert_eq!(
- micromark_with_options("<x y_>", &danger),
+ micromark_with_options("<x y_>", &danger)?,
"<x y_>",
"should support an underscore to end an attribute name"
);
assert_eq!(
- micromark_with_options("<x y.>", &danger),
+ micromark_with_options("<x y.>", &danger)?,
"<x y.>",
"should support a dot to end an attribute name"
);
assert_eq!(
- micromark_with_options("<x y123>", &danger),
+ micromark_with_options("<x y123>", &danger)?,
"<x y123>",
"should support numbers to end an attribute name"
);
assert_eq!(
- micromark_with_options("<x data->", &danger),
+ micromark_with_options("<x data->", &danger)?,
"<x data->",
"should support a dash to end an attribute name"
);
assert_eq!(
- micromark_with_options("<x y=>", &danger),
+ micromark_with_options("<x y=>", &danger)?,
"<p>&lt;x y=&gt;</p>",
"should not upport an initializer w/o a value"
);
assert_eq!(
- micromark_with_options("<x y==>", &danger),
+ micromark_with_options("<x y==>", &danger)?,
"<p>&lt;x y==&gt;</p>",
"should not support an equals to as an initializer"
);
assert_eq!(
- micromark_with_options("<x y=z>", &danger),
+ micromark_with_options("<x y=z>", &danger)?,
"<x y=z>",
"should support a single character as an unquoted attribute value"
);
assert_eq!(
- micromark_with_options("<x y=\"\">", &danger),
+ micromark_with_options("<x y=\"\">", &danger)?,
"<x y=\"\">",
"should support an empty double quoted attribute value"
);
assert_eq!(
- micromark_with_options("<x y=\"\">", &danger),
+ micromark_with_options("<x y=\"\">", &danger)?,
"<x y=\"\">",
"should support an empty single quoted attribute value"
);
assert_eq!(
- micromark_with_options("<x y=\"\n\">", &danger),
+ micromark_with_options("<x y=\"\n\">", &danger)?,
"<p><x y=\"\n\"></p>",
"should not support a line ending in a double quoted attribute value"
);
assert_eq!(
- micromark_with_options("<x y=\"\n\">", &danger),
+ micromark_with_options("<x y=\"\n\">", &danger)?,
"<p><x y=\"\n\"></p>",
"should not support a line ending in a single quoted attribute value"
);
assert_eq!(
- micromark_with_options("<w x=y\nz>", &danger),
+ micromark_with_options("<w x=y\nz>", &danger)?,
"<p><w x=y\nz></p>",
"should not support a line ending in/after an unquoted attribute value"
);
assert_eq!(
- micromark_with_options("<w x=y\"z>", &danger),
+ micromark_with_options("<w x=y\"z>", &danger)?,
"<p>&lt;w x=y&quot;z&gt;</p>",
"should not support a double quote in/after an unquoted attribute value"
);
assert_eq!(
- micromark_with_options("<w x=y'z>", &danger),
+ micromark_with_options("<w x=y'z>", &danger)?,
"<p>&lt;w x=y'z&gt;</p>",
"should not support a single quote in/after an unquoted attribute value"
);
assert_eq!(
- micromark_with_options("<x y=\"\"z>", &danger),
+ micromark_with_options("<x y=\"\"z>", &danger)?,
"<p>&lt;x y=&quot;&quot;z&gt;</p>",
"should not support an attribute after a double quoted attribute value"
);
assert_eq!(
- micromark_with_options("<x>\n \n \n>", &danger),
+ micromark_with_options("<x>\n \n \n>", &danger)?,
"<x>\n<blockquote>\n</blockquote>",
"should not support blank lines in complete"
);
assert_eq!(
- micromark_with_options("> <a>\n*bar*", &danger),
+ micromark_with_options("> <a>\n*bar*", &danger)?,
"<blockquote>\n<a>\n</blockquote>\n<p><em>bar</em></p>",
"should not support lazyness (1)"
);
assert_eq!(
- micromark_with_options("> a\n<a>", &danger),
+ micromark_with_options("> a\n<a>", &danger)?,
"<blockquote>\n<p>a</p>\n</blockquote>\n<a>",
"should not support lazyness (2)"
);
+
+ Ok(())
}
diff --git a/tests/html_text.rs b/tests/html_text.rs
index 988ebbc..8fdbbd2 100644
--- a/tests/html_text.rs
+++ b/tests/html_text.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn html_text() {
+fn html_text() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
..Options::default()
@@ -16,19 +16,19 @@ fn html_text() {
);
assert_eq!(
- micromark_with_options("<a><bab><c2c>", &danger),
+ micromark_with_options("<a><bab><c2c>", &danger)?,
"<p><a><bab><c2c></p>",
"should support opening tags"
);
assert_eq!(
- micromark_with_options("<a/><b2/>", &danger),
+ micromark_with_options("<a/><b2/>", &danger)?,
"<p><a/><b2/></p>",
"should support self-closing tags"
);
assert_eq!(
- micromark_with_options("<a /><b2\ndata=\"foo\" >", &danger),
+ micromark_with_options("<a /><b2\ndata=\"foo\" >", &danger)?,
"<p><a /><b2\ndata=\"foo\" ></p>",
"should support whitespace in tags"
);
@@ -37,170 +37,170 @@ fn html_text() {
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),
+ 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),
+ micromark_with_options("<33> <__>", &danger)?,
"<p>&lt;33&gt; &lt;__&gt;</p>",
"should not support nonconforming tag names"
);
assert_eq!(
- micromark_with_options("<a h*#ref=\"hi\">", &danger),
+ micromark_with_options("<a h*#ref=\"hi\">", &danger)?,
"<p>&lt;a h*#ref=&quot;hi&quot;&gt;</p>",
"should not support nonconforming attribute names"
);
assert_eq!(
- micromark_with_options("<a href=\"hi'> <a href=hi'>", &danger),
+ micromark_with_options("<a href=\"hi'> <a href=hi'>", &danger)?,
"<p>&lt;a href=&quot;hi'&gt; &lt;a href=hi'&gt;</p>",
"should not support nonconforming attribute values"
);
assert_eq!(
- micromark_with_options("< a><\nfoo><bar/ >\n<foo bar=baz\nbim!bop />", &danger),
+ micromark_with_options("< a><\nfoo><bar/ >\n<foo bar=baz\nbim!bop />", &danger)?,
"<p>&lt; a&gt;&lt;\nfoo&gt;&lt;bar/ &gt;\n&lt;foo bar=baz\nbim!bop /&gt;</p>",
"should not support nonconforming whitespace"
);
assert_eq!(
- micromark_with_options("<a href='bar'title=title>", &danger),
+ micromark_with_options("<a href='bar'title=title>", &danger)?,
"<p>&lt;a href='bar'title=title&gt;</p>",
"should not support missing whitespace"
);
assert_eq!(
- micromark_with_options("</a></foo >", &danger),
+ micromark_with_options("</a></foo >", &danger)?,
"<p></a></foo ></p>",
"should support closing tags"
);
assert_eq!(
- micromark_with_options("</a href=\"foo\">", &danger),
+ micromark_with_options("</a href=\"foo\">", &danger)?,
"<p>&lt;/a href=&quot;foo&quot;&gt;</p>",
"should not support closing tags w/ attributes"
);
assert_eq!(
- micromark_with_options("foo <!-- this is a\ncomment - with hyphen -->", &danger),
+ 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),
+ micromark_with_options("foo <!-- not a comment -- two hyphens -->", &danger)?,
"<p>foo &lt;!-- not a comment -- two hyphens --&gt;</p>",
"should not support comments w/ two dashes inside"
);
assert_eq!(
- micromark_with_options("foo <!--> foo -->", &danger),
+ micromark_with_options("foo <!--> foo -->", &danger)?,
"<p>foo &lt;!--&gt; foo --&gt;</p>",
"should not support nonconforming comments (1)"
);
assert_eq!(
- micromark_with_options("foo <!-- foo--->", &danger),
+ micromark_with_options("foo <!-- foo--->", &danger)?,
"<p>foo &lt;!-- foo---&gt;</p>",
"should not support nonconforming comments (2)"
);
assert_eq!(
- micromark_with_options("foo <?php echo $a; ?>", &danger),
+ 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),
+ 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),
+ micromark_with_options("foo <![CDATA[>&<]]>", &danger)?,
"<p>foo <![CDATA[>&<]]></p>",
"should support cdata"
);
assert_eq!(
- micromark_with_options("foo <a href=\"&ouml;\">", &danger),
+ micromark_with_options("foo <a href=\"&ouml;\">", &danger)?,
"<p>foo <a href=\"&ouml;\"></p>",
"should support (ignore) character references"
);
assert_eq!(
- micromark_with_options("foo <a href=\"\\*\">", &danger),
+ 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),
+ micromark_with_options("<a href=\"\\\"\">", &danger)?,
"<p>&lt;a href=&quot;&quot;&quot;&gt;</p>",
"should not support character escapes (2)"
);
// Extra:
assert_eq!(
- micromark_with_options("foo <!1>", &danger),
+ micromark_with_options("foo <!1>", &danger)?,
"<p>foo &lt;!1&gt;</p>",
"should not support non-comment, non-cdata, and non-named declaration"
);
assert_eq!(
- micromark_with_options("foo <!-not enough!-->", &danger),
+ micromark_with_options("foo <!-not enough!-->", &danger)?,
"<p>foo &lt;!-not enough!--&gt;</p>",
"should not support comments w/ not enough dashes"
);
assert_eq!(
- micromark_with_options("foo <!---ok-->", &danger),
+ 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),
+ micromark_with_options("foo <!--->", &danger)?,
"<p>foo &lt;!---&gt;</p>",
"should not support comments that start w/ `->`"
);
assert_eq!(
- micromark_with_options("foo <!-- -> -->", &danger),
+ micromark_with_options("foo <!-- -> -->", &danger)?,
"<p>foo <!-- -> --></p>",
"should support `->` in a comment"
);
assert_eq!(
- micromark_with_options("foo <!--", &danger),
+ micromark_with_options("foo <!--", &danger)?,
"<p>foo &lt;!--</p>",
"should not support eof in a comment (1)"
);
assert_eq!(
- micromark_with_options("foo <!--a", &danger),
+ micromark_with_options("foo <!--a", &danger)?,
"<p>foo &lt;!--a</p>",
"should not support eof in a comment (2)"
);
assert_eq!(
- micromark_with_options("foo <!--a-", &danger),
+ micromark_with_options("foo <!--a-", &danger)?,
"<p>foo &lt;!--a-</p>",
"should not support eof in a comment (3)"
);
assert_eq!(
- micromark_with_options("foo <!--a--", &danger),
+ micromark_with_options("foo <!--a--", &danger)?,
"<p>foo &lt;!--a--</p>",
"should not support eof in a comment (4)"
);
@@ -208,204 +208,204 @@ fn html_text() {
// Note: cmjs parses this differently.
// See: <https://github.com/commonmark/commonmark.js/issues/193>
assert_eq!(
- micromark_with_options("foo <![cdata[]]>", &danger),
+ micromark_with_options("foo <![cdata[]]>", &danger)?,
"<p>foo &lt;![cdata[]]&gt;</p>",
"should not support lowercase “cdata”"
);
assert_eq!(
- micromark_with_options("foo <![CDATA", &danger),
+ micromark_with_options("foo <![CDATA", &danger)?,
"<p>foo &lt;![CDATA</p>",
"should not support eof in a CDATA (1)"
);
assert_eq!(
- micromark_with_options("foo <![CDATA[", &danger),
+ micromark_with_options("foo <![CDATA[", &danger)?,
"<p>foo &lt;![CDATA[</p>",
"should not support eof in a CDATA (2)"
);
assert_eq!(
- micromark_with_options("foo <![CDATA[]", &danger),
+ micromark_with_options("foo <![CDATA[]", &danger)?,
"<p>foo &lt;![CDATA[]</p>",
"should not support eof in a CDATA (3)"
);
assert_eq!(
- micromark_with_options("foo <![CDATA[]]", &danger),
+ micromark_with_options("foo <![CDATA[]]", &danger)?,
"<p>foo &lt;![CDATA[]]</p>",
"should not support eof in a CDATA (4)"
);
assert_eq!(
- micromark_with_options("foo <![CDATA[asd", &danger),
+ micromark_with_options("foo <![CDATA[asd", &danger)?,
"<p>foo &lt;![CDATA[asd</p>",
"should not support eof in a CDATA (5)"
);
assert_eq!(
- micromark_with_options("foo <![CDATA[]]]]>", &danger),
+ 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),
+ micromark_with_options("foo <!doctype", &danger)?,
"<p>foo &lt;!doctype</p>",
"should not support eof in declarations"
);
assert_eq!(
- micromark_with_options("foo <?php", &danger),
+ micromark_with_options("foo <?php", &danger)?,
"<p>foo &lt;?php</p>",
"should not support eof in instructions (1)"
);
assert_eq!(
- micromark_with_options("foo <?php?", &danger),
+ micromark_with_options("foo <?php?", &danger)?,
"<p>foo &lt;?php?</p>",
"should not support eof in instructions (2)"
);
assert_eq!(
- micromark_with_options("foo <???>", &danger),
+ micromark_with_options("foo <???>", &danger)?,
"<p>foo <???></p>",
"should support question marks in instructions"
);
assert_eq!(
- micromark_with_options("foo </3>", &danger),
+ micromark_with_options("foo </3>", &danger)?,
"<p>foo &lt;/3&gt;</p>",
"should not support closing tags that don’t start w/ alphas"
);
assert_eq!(
- micromark_with_options("foo </a->", &danger),
+ micromark_with_options("foo </a->", &danger)?,
"<p>foo </a-></p>",
"should support dashes in closing tags"
);
assert_eq!(
- micromark_with_options("foo </a >", &danger),
+ 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),
+ micromark_with_options("foo </a!>", &danger)?,
"<p>foo &lt;/a!&gt;</p>",
"should not support other characters after closing tag names"
);
assert_eq!(
- micromark_with_options("foo <a->", &danger),
+ micromark_with_options("foo <a->", &danger)?,
"<p>foo <a-></p>",
"should support dashes in opening tags"
);
assert_eq!(
- micromark_with_options("foo <a >", &danger),
+ 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),
+ micromark_with_options("foo <a!>", &danger)?,
"<p>foo &lt;a!&gt;</p>",
"should not support other characters after opening tag names"
);
assert_eq!(
- micromark_with_options("foo <a !>", &danger),
+ micromark_with_options("foo <a !>", &danger)?,
"<p>foo &lt;a !&gt;</p>",
"should not support other characters in opening tags (1)"
);
assert_eq!(
- micromark_with_options("foo <a b!>", &danger),
+ micromark_with_options("foo <a b!>", &danger)?,
"<p>foo &lt;a b!&gt;</p>",
"should not support other characters in opening tags (2)"
);
assert_eq!(
- micromark_with_options("foo <a b/>", &danger),
+ 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),
+ 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),
+ micromark_with_options("foo <a b=<>", &danger)?,
"<p>foo &lt;a b=&lt;&gt;</p>",
"should not support less than to start an unquoted attribute value"
);
assert_eq!(
- micromark_with_options("foo <a b=>>", &danger),
+ micromark_with_options("foo <a b=>>", &danger)?,
"<p>foo &lt;a b=&gt;&gt;</p>",
"should not support greater than to start an unquoted attribute value"
);
assert_eq!(
- micromark_with_options("foo <a b==>", &danger),
+ micromark_with_options("foo <a b==>", &danger)?,
"<p>foo &lt;a b==&gt;</p>",
"should not support equals to to start an unquoted attribute value"
);
assert_eq!(
- micromark_with_options("foo <a b=`>", &danger),
+ micromark_with_options("foo <a b=`>", &danger)?,
"<p>foo &lt;a b=`&gt;</p>",
"should not support grave accent to start an unquoted attribute value"
);
assert_eq!(
- micromark_with_options("foo <a b=\"asd", &danger),
+ micromark_with_options("foo <a b=\"asd", &danger)?,
"<p>foo &lt;a b=&quot;asd</p>",
"should not support eof in double quoted attribute value"
);
assert_eq!(
- micromark_with_options("foo <a b='asd", &danger),
+ micromark_with_options("foo <a b='asd", &danger)?,
"<p>foo &lt;a b='asd</p>",
"should not support eof in single quoted attribute value"
);
assert_eq!(
- micromark_with_options("foo <a b=asd", &danger),
+ micromark_with_options("foo <a b=asd", &danger)?,
"<p>foo &lt;a b=asd</p>",
"should not support eof in unquoted attribute value"
);
assert_eq!(
- micromark_with_options("foo <a b=\nasd>", &danger),
+ 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),
+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),
+ micromark_with_options("<span foo=", &danger)?,
"<p>&lt;span foo=</p>",
"should support an EOF before an attribute value"
);
assert_eq!(
- micromark_with_options("a <!b\nc>", &danger),
+ micromark_with_options("a <!b\nc>", &danger)?,
"<p>a <!b\nc></p>",
"should support an EOL in a declaration"
);
assert_eq!(
- micromark_with_options("a <![CDATA[\n]]>", &danger),
+ micromark_with_options("a <![CDATA[\n]]>", &danger)?,
"<p>a <![CDATA[\n]]></p>",
"should support an EOL in cdata"
);
@@ -413,7 +413,7 @@ micromark_with_options("<x> a", &danger),
// Note: cmjs parses this differently.
// See: <https://github.com/commonmark/commonmark.js/issues/196>
assert_eq!(
- micromark_with_options("a <?\n?>", &danger),
+ micromark_with_options("a <?\n?>", &danger)?,
"<p>a <?\n?></p>",
"should support an EOL in an instruction"
);
@@ -428,8 +428,10 @@ micromark_with_options("<x> a", &danger),
},
..Options::default()
}
- ),
+ )?,
"<p>a &lt;x&gt;</p>",
"should support turning off html (text)"
);
+
+ Ok(())
}
diff --git a/tests/image.rs b/tests/image.rs
index e7865e6..966b653 100644
--- a/tests/image.rs
+++ b/tests/image.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn image() {
+fn image() -> Result<(), String> {
assert_eq!(
micromark("[link](/uri \"title\")"),
"<p><a href=\"/uri\" title=\"title\">link</a></p>",
@@ -202,7 +202,7 @@ fn image() {
},
..Options::default()
}
- ),
+ )?,
"<p>!<a href=\"\">x</a></p>",
"should support turning off label start (image)"
);
@@ -220,8 +220,10 @@ fn image() {
allow_dangerous_protocol: true,
..Options::default()
}
- ),
+ )?,
"<p><img src=\"javascript:alert(1)\" alt=\"\" /></p>",
"should allow non-http protocols w/ `allowDangerousProtocol`"
);
+
+ Ok(())
}
diff --git a/tests/link_reference.rs b/tests/link_reference.rs
index d4f5d87..9c853f7 100644
--- a/tests/link_reference.rs
+++ b/tests/link_reference.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn link_reference() {
+fn link_reference() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
allow_dangerous_protocol: true,
@@ -65,7 +65,7 @@ fn link_reference() {
);
assert_eq!(
- micromark_with_options("[ref]: /uri\n\n[foo <bar attr=\"][ref]\">", &danger),
+ micromark_with_options("[ref]: /uri\n\n[foo <bar attr=\"][ref]\">", &danger)?,
"<p>[foo <bar attr=\"][ref]\"></p>",
"should prefer HTML over link references"
);
@@ -394,7 +394,7 @@ fn link_reference() {
},
..Options::default()
}
- ),
+ )?,
"<p>[x]()</p>",
"should support turning off label start (link)"
);
@@ -409,8 +409,10 @@ fn link_reference() {
},
..Options::default()
}
- ),
+ )?,
"<p>[x]()</p>",
"should support turning off label end"
);
+
+ Ok(())
}
diff --git a/tests/link_resource.rs b/tests/link_resource.rs
index aaf4b8b..6bcbb8c 100644
--- a/tests/link_resource.rs
+++ b/tests/link_resource.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Options};
use pretty_assertions::assert_eq;
#[test]
-fn link_resource() {
+fn link_resource() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
allow_dangerous_protocol: true,
@@ -53,7 +53,7 @@ fn link_resource() {
);
assert_eq!(
- micromark_with_options("[link](<foo\nbar>)", &danger),
+ micromark_with_options("[link](<foo\nbar>)", &danger)?,
"<p>[link](<foo\nbar>)</p>",
"should not support links w/ line endings in enclosed destination"
);
@@ -71,7 +71,7 @@ fn link_resource() {
);
assert_eq!(
- micromark_with_options("[a](<b)c\n[a](<b)c>\n[a](<b>c)", &danger),
+ micromark_with_options("[a](<b)c\n[a](<b)c>\n[a](<b>c)", &danger)?,
"<p>[a](&lt;b)c\n[a](&lt;b)c&gt;\n[a](<b>c)</p>",
"should not support links w/ unmatched enclosed destinations"
);
@@ -101,7 +101,7 @@ fn link_resource() {
);
assert_eq!(
- micromark_with_options("[link](foo\\)\\:)", &danger),
+ micromark_with_options("[link](foo\\)\\:)", &danger)?,
"<p><a href=\"foo):\">link</a></p>",
"should support links w/ escapes in destinations"
);
@@ -275,7 +275,7 @@ fn link_resource() {
);
assert_eq!(
- micromark_with_options("[foo <bar attr=\"](baz)\">", &danger),
+ micromark_with_options("[foo <bar attr=\"](baz)\">", &danger)?,
"<p>[foo <bar attr=\"](baz)\"></p>",
"should prefer HTML over links"
);
@@ -313,7 +313,7 @@ fn link_resource() {
);
assert_eq!(
- micromark_with_options("[a](<b>\"c\")", &danger),
+ micromark_with_options("[a](<b>\"c\")", &danger)?,
"<p>[a](<b>&quot;c&quot;)</p>",
"should require whitespace between enclosed destination and title"
);
@@ -428,16 +428,14 @@ fn link_resource() {
assert_eq!(
micromark(
- "[a](1(2(3(4(5(6(7(8(9(10(11(12(13(14(15(16(17(18(19(20(21(22(23(24(25(26(27(28(29(30(31(32()))))))))))))))))))))))))))))))))"
- ),
+ "[a](1(2(3(4(5(6(7(8(9(10(11(12(13(14(15(16(17(18(19(20(21(22(23(24(25(26(27(28(29(30(31(32()))))))))))))))))))))))))))))))))"),
"<p><a href=\"1(2(3(4(5(6(7(8(9(10(11(12(13(14(15(16(17(18(19(20(21(22(23(24(25(26(27(28(29(30(31(32())))))))))))))))))))))))))))))))\">a</a></p>",
"should support 32 sets of parens"
);
assert_eq!(
micromark(
- "[a](1(2(3(4(5(6(7(8(9(10(11(12(13(14(15(16(17(18(19(20(21(22(23(24(25(26(27(28(29(30(31(32(33())))))))))))))))))))))))))))))))))"
- ),
+ "[a](1(2(3(4(5(6(7(8(9(10(11(12(13(14(15(16(17(18(19(20(21(22(23(24(25(26(27(28(29(30(31(32(33())))))))))))))))))))))))))))))))))"),
"<p>[a](1(2(3(4(5(6(7(8(9(10(11(12(13(14(15(16(17(18(19(20(21(22(23(24(25(26(27(28(29(30(31(32(33())))))))))))))))))))))))))))))))))</p>",
"should not support 33 or more sets of parens"
);
@@ -459,4 +457,6 @@ fn link_resource() {
"<p><a href=\"%EF%BF%BD\">a</a></p>",
"should support a single NUL character as a link resource"
);
+
+ Ok(())
}
diff --git a/tests/list.rs b/tests/list.rs
index bbba7cd..4007251 100644
--- a/tests/list.rs
+++ b/tests/list.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn list() {
+fn list() -> Result<(), String> {
let danger = Options {
allow_dangerous_html: true,
..Options::default()
@@ -11,8 +11,7 @@ fn list() {
assert_eq!(
micromark(
- "A paragraph\nwith two lines.\n\n indented code\n\n> A block quote."
- ),
+ "A paragraph\nwith two lines.\n\n indented code\n\n> A block quote."),
"<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>",
"should support documents"
);
@@ -205,40 +204,35 @@ fn list() {
assert_eq!(
micromark(
- " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote."
- ),
+ " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote."),
"<ol>\n<li>\n<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n</li>\n</ol>",
"should support indenting w/ 1 space"
);
assert_eq!(
micromark(
- " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote."
- ),
+ " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote."),
"<ol>\n<li>\n<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n</li>\n</ol>",
"should support indenting w/ 2 spaces"
);
assert_eq!(
micromark(
- " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote."
- ),
+ " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote."),
"<ol>\n<li>\n<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n</li>\n</ol>",
"should support indenting w/ 3 spaces"
);
assert_eq!(
micromark(
- " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote."
- ),
+ " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote."),
"<pre><code>1. A paragraph\n with two lines.\n\n indented code\n\n &gt; A block quote.\n</code></pre>",
"should not support indenting w/ 4 spaces"
);
assert_eq!(
micromark(
- " 1. A paragraph\nwith two lines.\n\n indented code\n\n > A block quote."
- ),
+ " 1. A paragraph\nwith two lines.\n\n indented code\n\n > A block quote."),
"<ol>\n<li>\n<p>A paragraph\nwith two lines.</p>\n<pre><code>indented code\n</code></pre>\n<blockquote>\n<p>A block quote.</p>\n</blockquote>\n</li>\n</ol>",
"should support lazy lines"
);
@@ -370,13 +364,13 @@ fn list() {
);
assert_eq!(
- micromark_with_options("- foo\n- bar\n\n<!-- -->\n\n- baz\n- bim", &danger),
+ micromark_with_options("- foo\n- bar\n\n<!-- -->\n\n- baz\n- bim", &danger)?,
"<ul>\n<li>foo</li>\n<li>bar</li>\n</ul>\n<!-- -->\n<ul>\n<li>baz</li>\n<li>bim</li>\n</ul>",
"should support HTML comments between lists"
);
assert_eq!(
- micromark_with_options("- foo\n\n notcode\n\n- foo\n\n<!-- -->\n\n code", &danger),
+ micromark_with_options("- foo\n\n notcode\n\n- foo\n\n<!-- -->\n\n code", &danger)?,
"<ul>\n<li>\n<p>foo</p>\n<p>notcode</p>\n</li>\n<li>\n<p>foo</p>\n</li>\n</ul>\n<!-- -->\n<pre><code>code\n</code></pre>",
"should support HTML comments between lists and indented code"
);
@@ -498,8 +492,7 @@ fn list() {
assert_eq!(
micromark(
- "* a tight item that ends with an html element: `x`\n\nParagraph"
- ),
+ "* a tight item that ends with an html element: `x`\n\nParagraph"),
"<ul>\n<li>a tight item that ends with an html element: <code>x</code></li>\n</ul>\n<p>Paragraph</p>",
"should ignore line endings after tight items ending in tags"
);
@@ -565,7 +558,7 @@ fn list() {
);
assert_eq!(
- micromark_with_options("* a\n\n<!---->\n\n* b", &danger),
+ micromark_with_options("* a\n\n<!---->\n\n* b", &danger)?,
"<ul>\n<li>a</li>\n</ul>\n<!---->\n<ul>\n<li>b</li>\n</ul>",
"should support the common list breaking comment method"
);
@@ -580,8 +573,10 @@ fn list() {
},
..Options::default()
}
- ),
+ )?,
"<p>- one</p>\n<p>two</p>",
"should support turning off lists"
);
+
+ Ok(())
}
diff --git a/tests/math_flow.rs b/tests/math_flow.rs
index 5d161f6..c277326 100644
--- a/tests/math_flow.rs
+++ b/tests/math_flow.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn math_flow() {
+fn math_flow() -> Result<(), String> {
let math = Options {
constructs: Constructs {
math_text: true,
@@ -20,231 +20,233 @@ fn math_flow() {
);
assert_eq!(
- micromark_with_options("$$\na\n$$", &math),
+ micromark_with_options("$$\na\n$$", &math)?,
"<pre><code class=\"language-math math-display\">a\n</code></pre>",
"should support math (flow) if enabled"
);
assert_eq!(
- micromark_with_options("$$\n<\n >\n$$", &math),
+ micromark_with_options("$$\n<\n >\n$$", &math)?,
"<pre><code class=\"language-math math-display\">&lt;\n &gt;\n</code></pre>",
"should support math (flow)"
);
assert_eq!(
- micromark_with_options("$\nfoo\n$", &math),
+ micromark_with_options("$\nfoo\n$", &math)?,
"<p><code class=\"language-math math-inline\">foo</code></p>",
"should not support math (flow) w/ less than two markers"
);
assert_eq!(
- micromark_with_options("$$$\naaa\n$$\n$$$$", &math),
+ micromark_with_options("$$$\naaa\n$$\n$$$$", &math)?,
"<pre><code class=\"language-math math-display\">aaa\n$$\n</code></pre>",
"should support a closing sequence longer, but not shorter than, the opening"
);
assert_eq!(
- micromark_with_options("$$", &math),
+ micromark_with_options("$$", &math)?,
"<pre><code class=\"language-math math-display\"></code></pre>\n",
"should support an eof right after an opening sequence"
);
assert_eq!(
- micromark_with_options("$$$\n\n$$\naaa\n", &math),
+ micromark_with_options("$$$\n\n$$\naaa\n", &math)?,
"<pre><code class=\"language-math math-display\">\n$$\naaa\n</code></pre>\n",
"should support an eof somewhere in content"
);
assert_eq!(
- micromark_with_options("> $$\n> aaa\n\nbbb", &math),
+ micromark_with_options("> $$\n> aaa\n\nbbb", &math)?,
"<blockquote>\n<pre><code class=\"language-math math-display\">aaa\n</code></pre>\n</blockquote>\n<p>bbb</p>",
"should support no closing sequence in a block quote"
);
assert_eq!(
- micromark_with_options("$$\n\n \n$$", &math),
+ micromark_with_options("$$\n\n \n$$", &math)?,
"<pre><code class=\"language-math math-display\">\n \n</code></pre>",
"should support blank lines in math (flow)"
);
assert_eq!(
- micromark_with_options("$$\n$$", &math),
+ micromark_with_options("$$\n$$", &math)?,
"<pre><code class=\"language-math math-display\"></code></pre>",
"should support empty math (flow)"
);
assert_eq!(
- micromark_with_options(" $$\n aaa\naaa\n$$", &math),
+ micromark_with_options(" $$\n aaa\naaa\n$$", &math)?,
"<pre><code class=\"language-math math-display\">aaa\naaa\n</code></pre>",
"should remove up to one space from the content if the opening sequence is indented w/ 1 space"
);
assert_eq!(
- micromark_with_options(" $$\naaa\n aaa\naaa\n $$", &math),
+ micromark_with_options(" $$\naaa\n aaa\naaa\n $$", &math)?,
"<pre><code class=\"language-math math-display\">aaa\naaa\naaa\n</code></pre>",
"should remove up to two space from the content if the opening sequence is indented w/ 2 spaces"
);
assert_eq!(
- micromark_with_options(" $$\n aaa\n aaa\n aaa\n $$", &math),
+ micromark_with_options(" $$\n aaa\n aaa\n aaa\n $$", &math)?,
"<pre><code class=\"language-math math-display\">aaa\n aaa\naaa\n</code></pre>",
"should remove up to three space from the content if the opening sequence is indented w/ 3 spaces"
);
assert_eq!(
- micromark_with_options(" $$\n aaa\n $$", &math),
+ micromark_with_options(" $$\n aaa\n $$", &math)?,
"<pre><code>$$\naaa\n$$\n</code></pre>",
"should not support indenteding the opening sequence w/ 4 spaces"
);
assert_eq!(
- micromark_with_options("$$\naaa\n $$", &math),
+ micromark_with_options("$$\naaa\n $$", &math)?,
"<pre><code class=\"language-math math-display\">aaa\n</code></pre>",
"should support an indented closing sequence"
);
assert_eq!(
- micromark_with_options(" $$\naaa\n $$", &math),
+ micromark_with_options(" $$\naaa\n $$", &math)?,
"<pre><code class=\"language-math math-display\">aaa\n</code></pre>",
"should support a differently indented closing sequence than the opening sequence"
);
assert_eq!(
- micromark_with_options("$$\naaa\n $$\n", &math),
+ micromark_with_options("$$\naaa\n $$\n", &math)?,
"<pre><code class=\"language-math math-display\">aaa\n $$\n</code></pre>\n",
"should not support an indented closing sequence w/ 4 spaces"
);
assert_eq!(
- micromark_with_options("$$ $$\naaa", &math),
+ micromark_with_options("$$ $$\naaa", &math)?,
"<p><code class=\"language-math math-inline\"> </code>\naaa</p>",
"should not support dollars in the opening fence after the opening sequence"
);
assert_eq!(
- micromark_with_options("$$$\naaa\n$$$ $$\n", &math),
+ micromark_with_options("$$$\naaa\n$$$ $$\n", &math)?,
"<pre><code class=\"language-math math-display\">aaa\n$$$ $$\n</code></pre>\n",
"should not support spaces in the closing sequence"
);
assert_eq!(
- micromark_with_options("foo\n$$\nbar\n$$\nbaz", &math),
+ micromark_with_options("foo\n$$\nbar\n$$\nbaz", &math)?,
"<p>foo</p>\n<pre><code class=\"language-math math-display\">bar\n</code></pre>\n<p>baz</p>",
"should support interrupting paragraphs"
);
assert_eq!(
- micromark_with_options("foo\n---\n$$\nbar\n$$\n# baz", &math),
+ micromark_with_options("foo\n---\n$$\nbar\n$$\n# baz", &math)?,
"<h2>foo</h2>\n<pre><code class=\"language-math math-display\">bar\n</code></pre>\n<h1>baz</h1>",
"should support interrupting other content"
);
assert_eq!(
- micromark_with_options("$$ruby\ndef foo(x)\n return 3\nend\n$$", &math),
+ micromark_with_options("$$ruby\ndef foo(x)\n return 3\nend\n$$", &math)?,
"<pre><code class=\"language-math math-display\">def foo(x)\n return 3\nend\n</code></pre>",
"should not support an “info” string (1)"
);
assert_eq!(
- micromark_with_options("$$$;\n$$$", &math),
+ micromark_with_options("$$$;\n$$$", &math)?,
"<pre><code class=\"language-math math-display\"></code></pre>",
"should not support an “info” string (2)"
);
assert_eq!(
- micromark_with_options("$$ ruby startline=3 `%@#`\ndef foo(x)\n return 3\nend\n$$$$", &math),
+ micromark_with_options("$$ ruby startline=3 `%@#`\ndef foo(x)\n return 3\nend\n$$$$", &math)?,
"<pre><code class=\"language-math math-display\">def foo(x)\n return 3\nend\n</code></pre>",
"should not support an “info” string (3)"
);
assert_eq!(
- micromark_with_options("$$ aa $$\nfoo", &math),
+ micromark_with_options("$$ aa $$\nfoo", &math)?,
"<p><code class=\"language-math math-inline\">aa</code>\nfoo</p>",
"should not support dollars in the meta string"
);
assert_eq!(
- micromark_with_options("$$\n$$ aaa\n$$", &math),
+ micromark_with_options("$$\n$$ aaa\n$$", &math)?,
"<pre><code class=\"language-math math-display\">$$ aaa\n</code></pre>",
"should not support meta string on closing sequences"
);
// Our own:
assert_eq!(
- micromark_with_options("$$ ", &math),
+ micromark_with_options("$$ ", &math)?,
"<pre><code class=\"language-math math-display\"></code></pre>\n",
"should support an eof after whitespace, after the start fence sequence"
);
assert_eq!(
- micromark_with_options("$$ js\nalert(1)\n$$", &math),
+ micromark_with_options("$$ js\nalert(1)\n$$", &math)?,
"<pre><code class=\"language-math math-display\">alert(1)\n</code></pre>",
"should support whitespace between the sequence and the meta string"
);
assert_eq!(
- micromark_with_options("$$js", &math),
+ micromark_with_options("$$js", &math)?,
"<pre><code class=\"language-math math-display\"></code></pre>\n",
"should support an eof after the meta string"
);
assert_eq!(
- micromark_with_options("$$ js \nalert(1)\n$$", &math),
+ micromark_with_options("$$ js \nalert(1)\n$$", &math)?,
"<pre><code class=\"language-math math-display\">alert(1)\n</code></pre>",
"should support whitespace after the meta string"
);
assert_eq!(
- micromark_with_options("$$\n ", &math),
+ micromark_with_options("$$\n ", &math)?,
"<pre><code class=\"language-math math-display\"> \n</code></pre>\n",
"should support an eof after whitespace in content"
);
assert_eq!(
- micromark_with_options(" $$\n ", &math),
+ micromark_with_options(" $$\n ", &math)?,
"<pre><code class=\"language-math math-display\"></code></pre>\n",
"should support an eof in the prefix, in content"
);
assert_eq!(
- micromark_with_options("$$j\\+s&copy;", &math),
+ micromark_with_options("$$j\\+s&copy;", &math)?,
"<pre><code class=\"language-math math-display\"></code></pre>\n",
"should support character escapes and character references in meta strings"
);
assert_eq!(
- micromark_with_options("$$a\\&b\0c", &math),
+ micromark_with_options("$$a\\&b\0c", &math)?,
"<pre><code class=\"language-math math-display\"></code></pre>\n",
"should support dangerous characters in meta strings"
);
assert_eq!(
- micromark_with_options(" $$\naaa\n $$", &math),
+ micromark_with_options(" $$\naaa\n $$", &math)?,
"<pre><code class=\"language-math math-display\">aaa\n $$\n</code></pre>\n",
"should not support a closing sequence w/ too much indent, regardless of opening sequence (1)"
);
assert_eq!(
- micromark_with_options("> $$\n>\n>\n>\n\na", &math),
+ micromark_with_options("> $$\n>\n>\n>\n\na", &math)?,
"<blockquote>\n<pre><code class=\"language-math math-display\">\n\n\n</code></pre>\n</blockquote>\n<p>a</p>",
"should not support a closing sequence w/ too much indent, regardless of opening sequence (2)"
);
assert_eq!(
- micromark_with_options("> $$a\nb", &math),
+ micromark_with_options("> $$a\nb", &math)?,
"<blockquote>\n<pre><code class=\"language-math math-display\"></code></pre>\n</blockquote>\n<p>b</p>",
"should not support lazyness (1)"
);
assert_eq!(
- micromark_with_options("> a\n$$b", &math),
+ micromark_with_options("> a\n$$b", &math)?,
"<blockquote>\n<p>a</p>\n</blockquote>\n<pre><code class=\"language-math math-display\"></code></pre>\n",
"should not support lazyness (2)"
);
assert_eq!(
- micromark_with_options("> $$a\n$$", &math),
+ micromark_with_options("> $$a\n$$", &math)?,
"<blockquote>\n<pre><code class=\"language-math math-display\"></code></pre>\n</blockquote>\n<pre><code class=\"language-math math-display\"></code></pre>\n",
"should not support lazyness (3)"
);
+
+ Ok(())
}
diff --git a/tests/math_text.rs b/tests/math_text.rs
index 4fe0288..dced393 100644
--- a/tests/math_text.rs
+++ b/tests/math_text.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn math_text() {
+fn math_text() -> Result<(), String> {
let math = Options {
constructs: Constructs {
math_text: true,
@@ -20,7 +20,7 @@ fn math_text() {
);
assert_eq!(
- micromark_with_options("$foo$ $$bar$$", &math),
+ micromark_with_options("$foo$ $$bar$$", &math)?,
"<p><code class=\"language-math math-inline\">foo</code> <code class=\"language-math math-inline\">bar</code></p>",
"should support math (text) if enabled"
);
@@ -32,97 +32,97 @@ fn math_text() {
math_text_single_dollar: false,
..math.clone()
}
- ),
+ )?,
"<p>$foo$ <code class=\"language-math math-inline\">bar</code></p>",
"should not support math (text) w/ a single dollar, w/ `math_text_single_dollar: false`"
);
assert_eq!(
- micromark_with_options("$$ foo $ bar $$", &math),
+ micromark_with_options("$$ foo $ bar $$", &math)?,
"<p><code class=\"language-math math-inline\">foo $ bar</code></p>",
"should support math (text) w/ more dollars"
);
assert_eq!(
- micromark_with_options("$ $$ $", &math),
+ micromark_with_options("$ $$ $", &math)?,
"<p><code class=\"language-math math-inline\">$$</code></p>",
"should support math (text) w/ fences inside, and padding"
);
assert_eq!(
- micromark_with_options("$ $$ $", &math),
+ micromark_with_options("$ $$ $", &math)?,
"<p><code class=\"language-math math-inline\"> $$ </code></p>",
"should support math (text) w/ extra padding"
);
assert_eq!(
- micromark_with_options("$ a$", &math),
+ micromark_with_options("$ a$", &math)?,
"<p><code class=\"language-math math-inline\"> a</code></p>",
"should support math (text) w/ unbalanced padding"
);
assert_eq!(
- micromark_with_options("$\u{a0}b\u{a0}$", &math),
+ micromark_with_options("$\u{a0}b\u{a0}$", &math)?,
"<p><code class=\"language-math math-inline\">\u{a0}b\u{a0}</code></p>",
"should support math (text) w/ non-padding whitespace"
);
assert_eq!(
- micromark_with_options("$ $\n$ $", &math),
+ micromark_with_options("$ $\n$ $", &math)?,
"<p><code class=\"language-math math-inline\"> </code>\n<code class=\"language-math math-inline\"> </code></p>",
"should support math (text) w/o data"
);
assert_eq!(
- micromark_with_options("$\nfoo\nbar \nbaz\n$", &math),
+ micromark_with_options("$\nfoo\nbar \nbaz\n$", &math)?,
"<p><code class=\"language-math math-inline\">foo bar baz</code></p>",
"should support math (text) w/o line endings (1)"
);
assert_eq!(
- micromark_with_options("$\nfoo \n$", &math),
+ micromark_with_options("$\nfoo \n$", &math)?,
"<p><code class=\"language-math math-inline\">foo </code></p>",
"should support math (text) w/o line endings (2)"
);
assert_eq!(
- micromark_with_options("$foo bar \nbaz$", &math),
+ micromark_with_options("$foo bar \nbaz$", &math)?,
"<p><code class=\"language-math math-inline\">foo bar baz</code></p>",
"should not support whitespace collapsing"
);
assert_eq!(
- micromark_with_options("$foo\\$bar$", &math),
+ micromark_with_options("$foo\\$bar$", &math)?,
"<p><code class=\"language-math math-inline\">foo\\</code>bar$</p>",
"should not support character escapes"
);
assert_eq!(
- micromark_with_options("$$foo$bar$$", &math),
+ micromark_with_options("$$foo$bar$$", &math)?,
"<p><code class=\"language-math math-inline\">foo$bar</code></p>",
"should support more dollars"
);
assert_eq!(
- micromark_with_options("$ foo $$ bar $", &math),
+ micromark_with_options("$ foo $$ bar $", &math)?,
"<p><code class=\"language-math math-inline\">foo $$ bar</code></p>",
"should support less dollars"
);
assert_eq!(
- micromark_with_options("*foo$*$", &math),
+ micromark_with_options("*foo$*$", &math)?,
"<p>*foo<code class=\"language-math math-inline\">*</code></p>",
"should precede over emphasis"
);
assert_eq!(
- micromark_with_options("[not a $link](/foo$)", &math),
+ micromark_with_options("[not a $link](/foo$)", &math)?,
"<p>[not a <code class=\"language-math math-inline\">link](/foo</code>)</p>",
"should precede over links"
);
assert_eq!(
- micromark_with_options("$<a href=\"$\">$", &math),
+ micromark_with_options("$<a href=\"$\">$", &math)?,
"<p><code class=\"language-math math-inline\">&lt;a href=&quot;</code>&quot;&gt;$</p>",
"should have same precedence as HTML (1)"
);
@@ -135,50 +135,52 @@ fn math_text() {
allow_dangerous_protocol: true,
..math.clone()
}
- ),
+ )?,
"<p><a href=\"$\">$</p>",
"should have same precedence as HTML (2)"
);
assert_eq!(
- micromark_with_options("$<http://foo.bar.$baz>$", &math),
+ micromark_with_options("$<http://foo.bar.$baz>$", &math)?,
"<p><code class=\"language-math math-inline\">&lt;http://foo.bar.</code>baz&gt;$</p>",
"should have same precedence as autolinks (1)"
);
assert_eq!(
- micromark_with_options("<http://foo.bar.$baz>$", &math),
+ micromark_with_options("<http://foo.bar.$baz>$", &math)?,
"<p><a href=\"http://foo.bar.$baz\">http://foo.bar.$baz</a>$</p>",
"should have same precedence as autolinks (2)"
);
assert_eq!(
- micromark_with_options("$$$foo$$", &math),
+ micromark_with_options("$$$foo$$", &math)?,
"<p>$$$foo$$</p>",
"should not support more dollars before a fence"
);
assert_eq!(
- micromark_with_options("$foo", &math),
+ micromark_with_options("$foo", &math)?,
"<p>$foo</p>",
"should not support no closing fence (1)"
);
assert_eq!(
- micromark_with_options("$foo$$bar$$", &math),
+ micromark_with_options("$foo$$bar$$", &math)?,
"<p>$foo<code class=\"language-math math-inline\">bar</code></p>",
"should not support no closing fence (2)"
);
assert_eq!(
- micromark_with_options("$foo\t\tbar$", &math),
+ micromark_with_options("$foo\t\tbar$", &math)?,
"<p><code class=\"language-math math-inline\">foo\t\tbar</code></p>",
"should support tabs in code"
);
assert_eq!(
- micromark_with_options("\\$$x$", &math),
+ micromark_with_options("\\$$x$", &math)?,
"<p>$<code class=\"language-math math-inline\">x</code></p>",
"should support an escaped initial dollar"
);
+
+ Ok(())
}
diff --git a/tests/misc_bom.rs b/tests/misc_bom.rs
index 47ce902..e26b407 100644
--- a/tests/misc_bom.rs
+++ b/tests/misc_bom.rs
@@ -3,7 +3,7 @@ use micromark::micromark;
use pretty_assertions::assert_eq;
#[test]
-fn bom() {
+fn bom() -> Result<(), String> {
assert_eq!(micromark("\u{FEFF}"), "", "should ignore just a bom");
assert_eq!(
@@ -11,4 +11,6 @@ fn bom() {
"<h1>hea\u{FEFF}ding</h1>",
"should ignore a bom"
);
+
+ Ok(())
}
diff --git a/tests/misc_dangerous_html.rs b/tests/misc_dangerous_html.rs
index 6bc73d8..8afa481 100644
--- a/tests/misc_dangerous_html.rs
+++ b/tests/misc_dangerous_html.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Options};
use pretty_assertions::assert_eq;
#[test]
-fn dangerous_html() {
+fn dangerous_html() -> Result<(), String> {
let danger = &Options {
allow_dangerous_html: true,
allow_dangerous_protocol: true,
@@ -23,8 +23,10 @@ fn dangerous_html() {
);
assert_eq!(
- micromark_with_options("<x>", danger),
+ micromark_with_options("<x>", danger)?,
"<x>",
"should be unsafe w/ `allowDangerousHtml`"
);
+
+ Ok(())
}
diff --git a/tests/misc_dangerous_protocol.rs b/tests/misc_dangerous_protocol.rs
index 0c25eba..88058f2 100644
--- a/tests/misc_dangerous_protocol.rs
+++ b/tests/misc_dangerous_protocol.rs
@@ -3,7 +3,7 @@ use micromark::micromark;
use pretty_assertions::assert_eq;
#[test]
-fn dangerous_protocol_autolink() {
+fn dangerous_protocol_autolink() -> Result<(), String> {
assert_eq!(
micromark("<javascript:alert(1)>"),
"<p><a href=\"\">javascript:alert(1)</a></p>",
@@ -33,10 +33,12 @@ fn dangerous_protocol_autolink() {
"<p><a href=\"mailto:a\">mailto:a</a></p>",
"should allow `mailto:`"
);
+
+ Ok(())
}
#[test]
-fn dangerous_protocol_image() {
+fn dangerous_protocol_image() -> Result<(), String> {
assert_eq!(
micromark("![](javascript:alert(1))"),
"<p><img src=\"\" alt=\"\" /></p>",
@@ -114,10 +116,12 @@ fn dangerous_protocol_image() {
"<p><img src=\"a/b:c\" alt=\"\" /></p>",
"should allow a colon in a path"
);
+
+ Ok(())
}
#[test]
-fn dangerous_protocol_link() {
+fn dangerous_protocol_link() -> Result<(), String> {
assert_eq!(
micromark("[](javascript:alert(1))"),
"<p><a href=\"\"></a></p>",
@@ -195,4 +199,6 @@ fn dangerous_protocol_link() {
"<p><a href=\"a/b:c\"></a></p>",
"should allow a colon in a path"
);
+
+ Ok(())
}
diff --git a/tests/misc_default_line_ending.rs b/tests/misc_default_line_ending.rs
index 531165c..b122c50 100644
--- a/tests/misc_default_line_ending.rs
+++ b/tests/misc_default_line_ending.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, LineEnding, Options};
use pretty_assertions::assert_eq;
#[test]
-fn default_line_ending() {
+fn default_line_ending() -> Result<(), String> {
assert_eq!(
micromark("> a"),
"<blockquote>\n<p>a</p>\n</blockquote>",
@@ -35,7 +35,7 @@ fn default_line_ending() {
default_line_ending: LineEnding::CarriageReturn,
..Options::default()
}
- ),
+ )?,
"<blockquote>\r<p>a</p>\r</blockquote>",
"should support the given line ending"
);
@@ -47,10 +47,12 @@ fn default_line_ending() {
default_line_ending: LineEnding::CarriageReturn,
..Options::default()
}
- ),
+ )?,
// To do: is this a bug in `micromark.js` that it uses `\r` for earlier line endings?
// "<blockquote>\r<p>a</p>\r</blockquote>\n",
"<blockquote>\n<p>a</p>\n</blockquote>\n",
"should support the given line ending, even if line endings exist"
);
+
+ Ok(())
}
diff --git a/tests/misc_line_ending.rs b/tests/misc_line_ending.rs
index d8334d8..6713b32 100644
--- a/tests/misc_line_ending.rs
+++ b/tests/misc_line_ending.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Options};
use pretty_assertions::assert_eq;
#[test]
-fn line_ending() {
+fn line_ending() -> Result<(), String> {
let danger = &Options {
allow_dangerous_html: true,
allow_dangerous_protocol: true,
@@ -131,56 +131,58 @@ fn line_ending() {
);
assert_eq!(
- micromark_with_options("<div\n", danger),
+ micromark_with_options("<div\n", danger)?,
"<div\n",
"should support a line feed after html"
);
assert_eq!(
- micromark_with_options("<div\r", danger),
+ micromark_with_options("<div\r", danger)?,
"<div\r",
"should support a carriage return after html"
);
assert_eq!(
- micromark_with_options("<div\r\n", danger),
+ micromark_with_options("<div\r\n", danger)?,
"<div\r\n",
"should support a carriage return + line feed after html"
);
assert_eq!(
- micromark_with_options("<div>\n\nx", danger),
+ micromark_with_options("<div>\n\nx", danger)?,
"<div>\n<p>x</p>",
"should support a blank line w/ line feeds after html"
);
assert_eq!(
- micromark_with_options("<div>\r\rx", danger),
+ micromark_with_options("<div>\r\rx", danger)?,
"<div>\r<p>x</p>",
"should support a blank line w/ carriage returns after html"
);
assert_eq!(
- micromark_with_options("<div>\r\n\r\nx", danger),
+ micromark_with_options("<div>\r\n\r\nx", danger)?,
"<div>\r\n<p>x</p>",
"should support a blank line w/ carriage return + line feeds after html"
);
assert_eq!(
- micromark_with_options("<div>\nx", danger),
+ micromark_with_options("<div>\nx", danger)?,
"<div>\nx",
"should support a non-blank line w/ line feed in html"
);
assert_eq!(
- micromark_with_options("<div>\rx", danger),
+ micromark_with_options("<div>\rx", danger)?,
"<div>\rx",
"should support a non-blank line w/ carriage return in html"
);
assert_eq!(
- micromark_with_options("<div>\r\nx", danger),
+ micromark_with_options("<div>\r\nx", danger)?,
"<div>\r\nx",
"should support a non-blank line w/ carriage return + line feed in html"
);
+
+ Ok(())
}
diff --git a/tests/misc_soft_break.rs b/tests/misc_soft_break.rs
index 43e2f3d..746b41d 100644
--- a/tests/misc_soft_break.rs
+++ b/tests/misc_soft_break.rs
@@ -3,7 +3,7 @@ use micromark::micromark;
use pretty_assertions::assert_eq;
#[test]
-fn soft_break() {
+fn soft_break() -> Result<(), String> {
assert_eq!(
micromark("foo\nbaz"),
"<p>foo\nbaz</p>",
@@ -15,4 +15,6 @@ fn soft_break() {
"<p>foo\nbaz</p>",
"should trim spaces around line endings"
);
+
+ Ok(())
}
diff --git a/tests/misc_tabs.rs b/tests/misc_tabs.rs
index 138aa7b..feb8177 100644
--- a/tests/misc_tabs.rs
+++ b/tests/misc_tabs.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Options};
use pretty_assertions::assert_eq;
#[test]
-fn tabs_flow() {
+fn tabs_flow() -> Result<(), String> {
let danger = &Options {
allow_dangerous_html: true,
..Options::default()
@@ -112,7 +112,7 @@ fn tabs_flow() {
);
assert_eq!(
- micromark_with_options("<x\ty\tz\t=\t\"\tx\t\">", danger),
+ micromark_with_options("<x\ty\tz\t=\t\"\tx\t\">", danger)?,
"<x\ty\tz\t=\t\"\tx\t\">",
"should support tabs in HTML (if whitespace is allowed)"
);
@@ -128,10 +128,12 @@ fn tabs_flow() {
"<hr />",
"should support arbitrary tabs in thematic breaks"
);
+
+ Ok(())
}
#[test]
-fn tabs_text() {
+fn tabs_text() -> Result<(), String> {
assert_eq!(
micromark("<http:\t>"),
"<p>&lt;http:\t&gt;</p>",
@@ -249,10 +251,12 @@ fn tabs_text() {
"<p><a href=\"y\" title=\"z\">x</a></p>",
"should support a tab between a link destination and title"
);
+
+ Ok(())
}
#[test]
-fn tabs_virtual_spaces() {
+fn tabs_virtual_spaces() -> Result<(), String> {
assert_eq!(
micromark("```\n\tx"),
"<pre><code>\tx\n</code></pre>\n",
@@ -284,4 +288,6 @@ fn tabs_virtual_spaces() {
// "<ul>\n<li>\n<p>a</p>\n<p>b</p>\n</li>\n</ul>",
"should support a part of a tab as a container, and the rest of a tab as flow"
);
+
+ Ok(())
}
diff --git a/tests/misc_url.rs b/tests/misc_url.rs
index 4fff26d..fd9ae05 100644
--- a/tests/misc_url.rs
+++ b/tests/misc_url.rs
@@ -3,7 +3,7 @@ use micromark::micromark;
use pretty_assertions::assert_eq;
#[test]
-fn url() {
+fn url() -> Result<(), String> {
assert_eq!(
micromark("<https://%>"),
"<p><a href=\"https://%25\">https://%</a></p>",
@@ -145,4 +145,6 @@ fn url() {
format!("<p><a href=\"{}\"></a></p>", ascii_out),
"should support ascii characters"
);
+
+ Ok(())
}
diff --git a/tests/misc_zero.rs b/tests/misc_zero.rs
index 0b54d50..f8d0c56 100644
--- a/tests/misc_zero.rs
+++ b/tests/misc_zero.rs
@@ -3,7 +3,7 @@ use micromark::micromark;
use pretty_assertions::assert_eq;
#[test]
-fn zero() {
+fn zero() -> Result<(), String> {
assert_eq!(micromark(""), "", "should support no markdown");
assert_eq!(
@@ -25,4 +25,6 @@ fn zero() {
"<p>\\0</p>",
"should not support NUL in a character escape"
);
+
+ Ok(())
}
diff --git a/tests/text.rs b/tests/text.rs
index 584f463..a2ef1fb 100644
--- a/tests/text.rs
+++ b/tests/text.rs
@@ -3,7 +3,7 @@ use micromark::micromark;
use pretty_assertions::assert_eq;
#[test]
-fn text() {
+fn text() -> Result<(), String> {
assert_eq!(
micromark("hello $.;'there"),
"<p>hello $.;'there</p>",
@@ -21,4 +21,6 @@ fn text() {
"<p>Multiple spaces</p>",
"should preserve internal spaces verbatim"
);
+
+ Ok(())
}
diff --git a/tests/thematic_break.rs b/tests/thematic_break.rs
index fd90236..f4cb376 100644
--- a/tests/thematic_break.rs
+++ b/tests/thematic_break.rs
@@ -3,7 +3,7 @@ use micromark::{micromark, micromark_with_options, Constructs, Options};
use pretty_assertions::assert_eq;
#[test]
-fn thematic_break() {
+fn thematic_break() -> Result<(), String> {
assert_eq!(
micromark("***\n---\n___"),
"<hr />\n<hr />\n<hr />",
@@ -176,8 +176,10 @@ fn thematic_break() {
},
..Options::default()
}
- ),
+ )?,
"<p>***</p>",
"should support turning off thematic breaks"
);
+
+ Ok(())
}