diff options
Diffstat (limited to 'tests/mdx_expression_flow.rs')
-rw-r--r-- | tests/mdx_expression_flow.rs | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/tests/mdx_expression_flow.rs b/tests/mdx_expression_flow.rs new file mode 100644 index 0000000..2a66a9d --- /dev/null +++ b/tests/mdx_expression_flow.rs @@ -0,0 +1,234 @@ +extern crate micromark; +use micromark::{micromark_with_options, Constructs, Options}; +use pretty_assertions::assert_eq; + +#[test] +fn mdx_expression_flow_agnostic() -> Result<(), String> { + let mdx = Options { + constructs: Constructs::mdx(), + ..Options::default() + }; + + assert_eq!( + micromark_with_options("{a}", &mdx)?, + "", + "should support an expression" + ); + + assert_eq!( + micromark_with_options("{}", &mdx)?, + "", + "should support an empty expression" + ); + + assert_eq!( + micromark_with_options("{a", &mdx).err().unwrap(), + "1:3: Unexpected end of file in expression, expected a corresponding closing brace for `{`", + "should crash if no closing brace is found (1)" + ); + + assert_eq!( + micromark_with_options("{b { c }", &mdx).err().unwrap(), + "1:9: Unexpected end of file in expression, expected a corresponding closing brace for `{`", + "should crash if no closing brace is found (2)" + ); + + assert_eq!( + micromark_with_options("{\n}\na", &mdx)?, + "<p>a</p>", + "should support a line ending in an expression" + ); + + assert_eq!( + micromark_with_options("{ a } \t\nb", &mdx)?, + "<p>b</p>", + "should support expressions followed by spaces" + ); + + assert_eq!( + micromark_with_options(" { a }\nb", &mdx)?, + "<p>b</p>", + "should support expressions preceded by spaces" + ); + + assert_eq!( + micromark_with_options("> {a\nb}", &mdx) + .err() + .unwrap(), + "2:1: Unexpected lazy line in expression in container, expected line to be prefixed with `>` when in a block quote, whitespace when in a list, etc", + "should not support lazyness (1)" + ); + + assert_eq!( + micromark_with_options("> a\n{b}", &mdx)?, + "<blockquote>\n<p>a</p>\n</blockquote>\n", + "should not support lazyness (2)" + ); + + assert_eq!( + micromark_with_options("> {a}\nb", &mdx)?, + "<blockquote>\n</blockquote>\n<p>b</p>", + "should not support lazyness (3)" + ); + + assert_eq!( + micromark_with_options("> {\n> a\nb}", &mdx) + .err() + .unwrap(), + "3:1: Unexpected lazy line in expression in container, expected line to be prefixed with `>` when in a block quote, whitespace when in a list, etc", + "should not support lazyness (4)" + ); + + Ok(()) +} + +// To do: swc. +// #[test] +// fn mdx_expression_flow_gnostic() -> Result<(), String> { +// assert_eq!( +// micromark_with_options("{a}", &swc), +// "", +// "should support an expression" +// ); + +// assert_eq!( +// micromark_with_options("{}", &swc)?, +// "", +// "should support an empty expression" +// ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("{a", &swc); +// // }, +// // /Unexpected end of file in expression, expected a corresponding closing brace for `{`/, +// // "should crash if no closing brace is found (1)" +// // ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("{b { c }", &swc); +// // }, +// // /Could not parse expression with swc: Unexpected content after expression/, +// // "should crash if no closing brace is found (2)" +// // ); + +// assert_eq!( +// micromark_with_options("{\n}\na", &swc)?, +// "<p>a</p>", +// "should support a line ending in an expression" +// ); + +// assert_eq!( +// micromark_with_options("{ a } \t\nb", &swc)?, +// "<p>b</p>", +// "should support expressions followed by spaces" +// ); + +// assert_eq!( +// micromark_with_options(" { a }\nb", &swc)?, +// "<p>b</p>", +// "should support expressions preceded by spaces" +// ); + +// assert_eq!( +// micromark_with_options(" {`\n a\n `}", &swc)?, +// "", +// "should support indented expressions" +// ); + +// assert_eq!( +// micromark_with_options("a{(b)}c", &swc)?, +// "<p>ac</p>", +// "should support expressions padded w/ parens" +// ); + +// assert_eq!( +// micromark_with_options("a{/* b */ ( (c) /* d */ + (e) )}f", &swc)?, +// "<p>af</p>", +// "should support expressions padded w/ parens and comments" +// ); + +// Ok(()) +// } + +// To do: move to JSX, actually test spread in expressions? +// To do: swc. +// #[test] +// fn mdx_expression_spread() -> Result<(), String> { +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("a {b} c", &swc); +// // }, +// // /Unexpected `Property` in code: only spread elements are supported/, +// // "should crash if not a spread" +// // ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("a {...?} c", &swc); +// // }, +// // /Could not parse expression with swc: Unexpected token/, +// // "should crash on an incorrect spread" +// // ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("a {...b,c} d", &swc); +// // }, +// // /Unexpected extra content in spread: only a single spread is supported/, +// // "should crash if a spread and other things" +// // ); + +// assert_eq!( +// micromark_with_options("a {} b", &swc)?, +// "<p>a b</p>", +// "should support an empty spread" +// ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("a {} b", &swc); +// // }, +// // /Unexpected empty expression/, +// // "should crash on an empty spread w/ `allowEmpty: false`" +// // ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("{a=b}", &swc); +// // }, +// // /Could not parse expression with swc: Shorthand property assignments are valid only in destructuring patterns/, +// // "should crash if not a spread w/ `allowEmpty`" +// // ); + +// assert_eq!( +// micromark_with_options("a {/* b */} c", &swc)?, +// "<p>a c</p>", +// "should support a comment spread" +// ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("a {/* b */} c", &swc); +// // }, +// // /Unexpected empty expression/, +// // "should crash on a comment spread w/ `allowEmpty: false`" +// // ); + +// assert_eq!( +// micromark_with_options("a {...b} c", &swc)?, +// "<p>a c</p>", +// "should support a spread" +// ); + +// Ok(()) +// } |