diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/mdx_jsx_flow.rs | 130 | ||||
| -rw-r--r-- | tests/mdx_jsx_text.rs | 24 | 
2 files changed, 154 insertions, 0 deletions
diff --git a/tests/mdx_jsx_flow.rs b/tests/mdx_jsx_flow.rs new file mode 100644 index 0000000..c9cd18d --- /dev/null +++ b/tests/mdx_jsx_flow.rs @@ -0,0 +1,130 @@ +extern crate micromark; +use micromark::{micromark_with_options, Constructs, Options}; +use pretty_assertions::assert_eq; + +#[test] +fn mdx_jsx_flow_agnostic() -> Result<(), String> { +    let mdx = Options { +        constructs: Constructs::mdx(), +        ..Options::default() +    }; + +    assert_eq!( +        micromark_with_options("<a />", &mdx)?, +        "", +        "should support a self-closing element" +    ); + +    assert_eq!( +        micromark_with_options("<a></a>", &mdx)?, +        "", +        "should support a closed element" +    ); + +    assert_eq!( +        micromark_with_options("<a>\nb\n</a>", &mdx)?, +        "<p>b</p>\n", +        "should support an element w/ content" +    ); + +    assert_eq!( +        micromark_with_options("<a>\n- b\n</a>", &mdx)?, +        "<ul>\n<li>b</li>\n</ul>\n", +        "should support an element w/ containers as content" +    ); + +    // To do: expressions. +    // assert_eq!( +    //     micromark_with_options("<a b c:d e=\"\" f={/* g */} {...h} />", &mdx)?, +    //     "", +    //     "should support attributes" +    // ); + +    Ok(()) +} + +// Flow is mostly the same as `text`, so we only test the relevant +// differences. +#[test] +fn mdx_jsx_flow_essence() -> Result<(), String> { +    let mdx = Options { +        constructs: Constructs::mdx(), +        ..Options::default() +    }; + +    assert_eq!( +        micromark_with_options("<a />", &mdx)?, +        "", +        "should support an element" +    ); + +    assert_eq!( +        micromark_with_options("<a>\n- b\n</a>", &mdx)?, +        "<ul>\n<li>b</li>\n</ul>\n", +        "should support an element around a container" +    ); + +    assert_eq!( +        micromark_with_options("<x\n  y\n>  \nb\n  </x>", &mdx)?, +        "<p>b</p>\n", +        "should support a dangling `>` in a tag (not a block quote)" +    ); + +    assert_eq!( +        micromark_with_options("<a>  \nb\n  </a>", &mdx)?, +        "<p>b</p>\n", +        "should support trailing initial and final whitespace around tags" +    ); + +    assert_eq!( +        micromark_with_options("<a> <b>\t\nc\n  </b> </a>", &mdx)?, +        "<p>c</p>\n", +        "should support tags after tags" +    ); + +    assert_eq!( +        micromark_with_options("> <X\n/>", &mdx).err().unwrap(), +        "2:1: Unexpected lazy line in container, expected line to be prefixed with `>` when in a block quote, whitespace when in a list, etc", +        "should not support lazy flow (1)" +    ); + +    assert_eq!( +        micromark_with_options("> a\n> <X\n/>", &mdx) +            .err() +            .unwrap(), +        "3:1: Unexpected lazy line in container, expected line to be prefixed with `>` when in a block quote, whitespace when in a list, etc", +        "should not support lazy flow (2)" +    ); + +    assert_eq!( +        micromark_with_options("> <a b='\nc'/> d", &mdx) +            .err() +            .unwrap(), +        "2:1: Unexpected lazy line in container, expected line to be prefixed with `>` when in a block quote, whitespace when in a list, etc", +        "should not support lazy flow (3)" +    ); + +    assert_eq!( +        micromark_with_options("> <a b='c\n'/> d", &mdx) +            .err() +            .unwrap(), +        "2:1: Unexpected lazy line in container, expected line to be prefixed with `>` when in a block quote, whitespace when in a list, etc", +        "should not support lazy flow (4)" +    ); + +    assert_eq!( +        micromark_with_options("> <a b='c\nd'/> e", &mdx) +            .err() +            .unwrap(), +        "2:1: Unexpected lazy line in container, expected line to be prefixed with `>` when in a block quote, whitespace when in a list, etc", +        "should not support lazy flow (4)" +    ); + +    assert_eq!( +        micromark_with_options("> a\n<X />", &mdx)?, +        "<blockquote>\n<p>a</p>\n</blockquote>\n", +        "should not support lazy flow (5)" +    ); + +    Ok(()) +} diff --git a/tests/mdx_jsx_text.rs b/tests/mdx_jsx_text.rs index 1890aad..782fb6a 100644 --- a/tests/mdx_jsx_text.rs +++ b/tests/mdx_jsx_text.rs @@ -812,6 +812,30 @@ fn mdx_jsx_text_complete() -> Result<(), String> {      // );      assert_eq!( +        micromark_with_options("> a <b\n/> c", &mdx)?, +        "<blockquote>\n<p>a  c</p>\n</blockquote>", +        "should support lazy text (1)" +    ); + +    assert_eq!( +        micromark_with_options("> a <b c='\nd'/> e", &mdx)?, +        "<blockquote>\n<p>a  e</p>\n</blockquote>", +        "should support lazy text (2)" +    ); + +    assert_eq!( +        micromark_with_options("> a <b c='d\n'/> e", &mdx)?, +        "<blockquote>\n<p>a  e</p>\n</blockquote>", +        "should support lazy text (3)" +    ); + +    assert_eq!( +        micromark_with_options("> a <b c='d\ne'/> f", &mdx)?, +        "<blockquote>\n<p>a  f</p>\n</blockquote>", +        "should support lazy text (4)" +    ); + +    assert_eq!(          micromark_with_options("1 < 3", &mdx)?,          "<p>1 < 3</p>",          "should allow `<` followed by markdown whitespace as text in markdown"  | 
