From 118cc91fd56a9b4c93bec5b1cb4c5f25924d353e Mon Sep 17 00:00:00 2001 From: Titus Wormer Date: Fri, 9 Sep 2022 13:17:59 +0200 Subject: Add mdx expression (flow, text) --- tests/mdx_expression_flow.rs | 234 +++++++++++++++++++++++++++++++++++++ tests/mdx_expression_text.rs | 273 +++++++++++++++++++++++++++++++++++++++++++ tests/mdx_jsx_flow.rs | 10 +- 3 files changed, 512 insertions(+), 5 deletions(-) create mode 100644 tests/mdx_expression_flow.rs create mode 100644 tests/mdx_expression_text.rs (limited to 'tests') 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)?, + "

a

", + "should support a line ending in an expression" + ); + + assert_eq!( + micromark_with_options("{ a } \t\nb", &mdx)?, + "

b

", + "should support expressions followed by spaces" + ); + + assert_eq!( + micromark_with_options(" { a }\nb", &mdx)?, + "

b

", + "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)?, + "
\n

a

\n
\n", + "should not support lazyness (2)" + ); + + assert_eq!( + micromark_with_options("> {a}\nb", &mdx)?, + "
\n
\n

b

", + "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)?, +// "

a

", +// "should support a line ending in an expression" +// ); + +// assert_eq!( +// micromark_with_options("{ a } \t\nb", &swc)?, +// "

b

", +// "should support expressions followed by spaces" +// ); + +// assert_eq!( +// micromark_with_options(" { a }\nb", &swc)?, +// "

b

", +// "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)?, +// "

ac

", +// "should support expressions padded w/ parens" +// ); + +// assert_eq!( +// micromark_with_options("a{/* b */ ( (c) /* d */ + (e) )}f", &swc)?, +// "

af

", +// "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)?, +// "

a b

", +// "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)?, +// "

a c

", +// "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)?, +// "

a c

", +// "should support a spread" +// ); + +// Ok(()) +// } diff --git a/tests/mdx_expression_text.rs b/tests/mdx_expression_text.rs new file mode 100644 index 0000000..b42faf2 --- /dev/null +++ b/tests/mdx_expression_text.rs @@ -0,0 +1,273 @@ +extern crate micromark; +use micromark::{micromark_with_options, Constructs, Options}; +use pretty_assertions::assert_eq; + +// To do: swc. +// #[test] +// fn mdx_expression_text_gnostic_core() -> Result<(), String> { +// assert_eq!( +// micromark_with_options("a {} b", &swc)?, +// "

a b

", +// "should support an empty expression (1)" +// ); + +// assert_eq!( +// micromark_with_options("a { \t\r\n} b", &swc)?, +// "

a b

", +// "should support an empty expression (2)" +// ); + +// assert_eq!( +// micromark_with_options("a {/**/} b", &swc)?, +// "

a b

", +// "should support a multiline comment (1)" +// ); + +// assert_eq!( +// micromark_with_options("a { /*\n*/\t} b", &swc)?, +// "

a b

", +// "should support a multiline comment (2)" +// ); + +// assert_eq!( +// micromark_with_options("a {/*b*//*c*/} d", &swc)?, +// "

a d

", +// "should support a multiline comment (3)" +// ); + +// assert_eq!( +// micromark_with_options("a {b/*c*/} d", &swc)?, +// "

a d

", +// "should support a multiline comment (4)" +// ); + +// assert_eq!( +// micromark_with_options("a {/*b*/c} d", &swc)?, +// "

a d

", +// "should support a multiline comment (4)" +// ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("a {//} b", &swc); +// // }, +// // /Could not parse expression with swc: Unexpected token/, +// // "should crash on an incorrect line comment (1)" +// // ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("a { // b } c", &swc); +// // }, +// // /Could not parse expression with swc: Unexpected token/, +// // "should crash on an incorrect line comment (2)" +// // ); + +// assert_eq!( +// micromark_with_options("a {//\n} b", &swc)?, +// "

a b

", +// "should support a line comment followed by a line ending" +// ); + +// assert_eq!( +// micromark_with_options("a {// b\nd} d", &swc)?, +// "

a d

", +// "should support a line comment followed by a line ending and an expression" +// ); + +// assert_eq!( +// micromark_with_options("a {b// c\n} d", &swc)?, +// "

a d

", +// "should support an expression followed by a line comment and a line ending" +// ); + +// assert_eq!( +// micromark_with_options("a {/*b*/ // c\n} d", &swc)?, +// "

a d

", +// "should support comments (1)" +// ); + +// assert_eq!( +// micromark_with_options("a {b.c} d", &swc)?, +// "

a d

", +// "should support expression statements (1)" +// ); + +// assert_eq!( +// micromark_with_options("a {1 + 1} b", &swc)?, +// "

a b

", +// "should support expression statements (2)" +// ); + +// assert_eq!( +// micromark_with_options("a {function () {}} b", &swc)?, +// "

a b

", +// "should support expression statements (3)" +// ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("a {var b = \"c\"} d", &swc); +// // }, +// // /Could not parse expression with swc: Unexpected token/, +// // "should crash on non-expressions" +// // ); + +// assert_eq!( +// micromark_with_options("> a {\n> b} c", &swc)?, +// "
\n

a c

\n
", +// "should support expressions in containers" +// ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("> a {\n> b<} c", &swc); +// // }, +// // /Could not parse expression with swc: Unexpected token/, +// // "should crash on incorrect expressions in containers (1)" +// // ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("> a {\n> b\n> c} d", &swc); +// // }, +// // /Could not parse expression with swc: Unexpected content after expression/, +// // "should crash on incorrect expressions in containers (2)" +// // ); + +// Ok(()) +// } + +#[test] +fn mdx_expression_text_agnostic() -> Result<(), String> { + let mdx = Options { + constructs: Constructs::mdx(), + ..Options::default() + }; + + assert_eq!( + micromark_with_options("a {b} c", &mdx)?, + "

a c

", + "should support an expression" + ); + + assert_eq!( + micromark_with_options("a {} b", &mdx)?, + "

a b

", + "should support an empty expression" + ); + + assert_eq!( + micromark_with_options("a {b c", &mdx).err().unwrap(), + "1:7: 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("a {b { c } d", &mdx) + .err() + .unwrap(), + "1:13: 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("a {\n} b", &mdx)?, + "

a b

", + "should support a line ending in an expression" + ); + + assert_eq!( + micromark_with_options("a } b", &mdx)?, + "

a } b

", + "should support just a closing brace" + ); + + assert_eq!( + micromark_with_options("{ a } b", &mdx)?, + "

b

", + "should support expressions as the first thing when following by other things" + ); + + Ok(()) +} + +// // To do: swc. +// #[test] +// fn mdx_expression_text_gnostic() -> Result<(), String> { +// assert_eq!( +// micromark_with_options("a {b} c", &swc)?, +// "

a c

", +// "should support an expression" +// ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("a {??} b", &swc); +// // }, +// // /Could not parse expression with swc: Unexpected token/, +// // "should crash on an incorrect expression" +// // ); + +// assert_eq!( +// micromark_with_options("a {} b", &swc)?, +// "

a b

", +// "should support an empty expression" +// ); + +// // To do: errors. +// // t.throws( +// // () => { +// // micromark_with_options("a {b c", &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("a {b { c } d", &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("a {\n} b", &swc)?, +// "

a b

", +// "should support a line ending in an expression" +// ); + +// assert_eq!( +// micromark_with_options("a } b", &swc)?, +// "

a } b

", +// "should support just a closing brace" +// ); + +// assert_eq!( +// micromark_with_options("{ a } b", &swc)?, +// "

b

", +// "should support expressions as the first thing when following by other things" +// ); + +// assert_eq!( +// micromark_with_options("a { /* { */ } b", &swc)?, +// "

a b

", +// "should support an unbalanced opening brace (if JS permits)" +// ); + +// assert_eq!( +// micromark_with_options("a { /* } */ } b", &swc)?, +// "

a b

", +// "should support an unbalanced closing brace (if JS permits)" +// ); + +// Ok(()) +// } diff --git a/tests/mdx_jsx_flow.rs b/tests/mdx_jsx_flow.rs index c9cd18d..ff53dcb 100644 --- a/tests/mdx_jsx_flow.rs +++ b/tests/mdx_jsx_flow.rs @@ -84,7 +84,7 @@ fn mdx_jsx_flow_essence() -> Result<(), String> { assert_eq!( micromark_with_options("> ", &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", + "2:1: Unexpected lazy line in jsx 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)" ); @@ -92,7 +92,7 @@ fn mdx_jsx_flow_essence() -> Result<(), String> { micromark_with_options("> a\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", + "3:1: Unexpected lazy line in jsx 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)" ); @@ -100,7 +100,7 @@ fn mdx_jsx_flow_essence() -> Result<(), String> { micromark_with_options("> 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", + "2:1: Unexpected lazy line in jsx 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)" ); @@ -108,7 +108,7 @@ fn mdx_jsx_flow_essence() -> Result<(), String> { micromark_with_options("> 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", + "2:1: Unexpected lazy line in jsx 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)" ); @@ -116,7 +116,7 @@ fn mdx_jsx_flow_essence() -> Result<(), String> { micromark_with_options("> 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", + "2:1: Unexpected lazy line in jsx 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)" ); -- cgit