diff options
author | Titus Wormer <tituswormer@gmail.com> | 2022-10-12 17:40:01 +0200 |
---|---|---|
committer | Titus Wormer <tituswormer@gmail.com> | 2022-10-12 17:40:01 +0200 |
commit | 54d84a4fd326dcfae871e203d673d55cbf40a279 (patch) | |
tree | 977bc7e7acc017e86d06aa6ee07bda93ba58631f /tests/xxx_mdx.rs | |
parent | ae9382b7f9466c8df421f0f64850a69a4c658581 (diff) | |
download | markdown-rs-54d84a4fd326dcfae871e203d673d55cbf40a279.tar.gz markdown-rs-54d84a4fd326dcfae871e203d673d55cbf40a279.tar.bz2 markdown-rs-54d84a4fd326dcfae871e203d673d55cbf40a279.zip |
Add internals to compile JSX away (wip)
Diffstat (limited to '')
-rw-r--r-- | tests/xxx_mdx.rs | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/tests/xxx_mdx.rs b/tests/xxx_mdx.rs new file mode 100644 index 0000000..59125b3 --- /dev/null +++ b/tests/xxx_mdx.rs @@ -0,0 +1,154 @@ +extern crate micromark; +extern crate swc_common; +extern crate swc_ecma_ast; +extern crate swc_ecma_codegen; +mod test_utils; +use pretty_assertions::assert_eq; +use test_utils::mdx::{mdx, JsxRuntime, Options}; + +#[test] +fn mdx_test() -> Result<(), String> { + // To do: JSX should be compiled away. + assert_eq!( + mdx("", Some("example.mdx".into()), &Options::default())?, + "function _createMdxContent(props) { + return <></>; +} +function MDXContent(props = {}) { + const { wrapper: MDXLayout } = props.components || {}; + return MDXLayout ? <MDXLayout {...props}><_createMdxContent {...props}/></MDXLayout> : _createMdxContent(props); +} +export default MDXContent; +", + "should work", + ); + + // To do: JSX should be compiled away. + assert_eq!( + mdx("<A />", Some("example.mdx".into()), &Options { + development: true, + ..Default::default() + })?, + "function _createMdxContent(props) { + const { A } = props.components || {}; + if (!A) _missingMdxReference(\"A\", true, \"1:1-1:6\"); + return <A />; +} +function MDXContent(props = {}) { + const { wrapper: MDXLayout } = props.components || {}; + return MDXLayout ? <MDXLayout {...props}><_createMdxContent {...props}/></MDXLayout> : _createMdxContent(props); +} +export default MDXContent; +function _missingMdxReference(id, component, place) { + throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\" + (place ? \"\\nIt’s referenced in your code at `\" + place + \"` in `example.mdx`\" : \"\")); +} +", + "should support `options.development: true`", + ); + + // To do: JSX should be compiled away. + assert_eq!( + mdx("<A />", Some("example.mdx".into()), &Options { + provider_import_source: Some("@mdx-js/react".into()), + ..Default::default() + })?, + "import { useMDXComponents as _provideComponents } from \"@mdx-js/react\"; +function _createMdxContent(props) { + const { A } = Object.assign({}, _provideComponents(), props.components); + if (!A) _missingMdxReference(\"A\", true); + return <A />; +} +function MDXContent(props = {}) { + const { wrapper: MDXLayout } = Object.assign({}, _provideComponents(), props.components); + return MDXLayout ? <MDXLayout {...props}><_createMdxContent {...props}/></MDXLayout> : _createMdxContent(props); +} +export default MDXContent; +function _missingMdxReference(id, component) { + throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\"); +} +", + "should support `options.provider_import_source`", + ); + + assert_eq!( + mdx("", Some("example.mdx".into()), &Options { + jsx: true, + ..Default::default() + })?, + "function _createMdxContent(props) { + return <></>; +} +function MDXContent(props = {}) { + const { wrapper: MDXLayout } = props.components || {}; + return MDXLayout ? <MDXLayout {...props}><_createMdxContent {...props}/></MDXLayout> : _createMdxContent(props); +} +export default MDXContent; +", + "should support `options.jsx: true`", + ); + + // To do: JSX should be compiled away. + // To do: should use calls of `React.createElement` / `React.Fragment`. + assert_eq!( + mdx("", Some("example.mdx".into()), &Options { + jsx_runtime: Some(JsxRuntime::Classic), + ..Default::default() + })?, + "import { React } from \"react\"; +function _createMdxContent(props) { + return <></>; +} +function MDXContent(props = {}) { + const { wrapper: MDXLayout } = props.components || {}; + return MDXLayout ? <MDXLayout {...props}><_createMdxContent {...props}/></MDXLayout> : _createMdxContent(props); +} +export default MDXContent; +", + "should support `options.jsx_runtime: JsxRuntime::Classic`", + ); + + // To do: JSX should be compiled away. + // To do: should import `_jsx` and such. + // To do: should use calls of `_jsx`, etc. + assert_eq!( + mdx("", Some("example.mdx".into()), &Options { + jsx_import_source: Some("preact".into()), + ..Default::default() + })?, + "function _createMdxContent(props) { + return <></>; +} +function MDXContent(props = {}) { + const { wrapper: MDXLayout } = props.components || {}; + return MDXLayout ? <MDXLayout {...props}><_createMdxContent {...props}/></MDXLayout> : _createMdxContent(props); +} +export default MDXContent; +", + "should support `options.jsx_import_source: Some(\"preact\".into())`", + ); + + // To do: JSX should be compiled away. + // To do: should use calls of `a.b`, symbol of `a.c`. + assert_eq!( + mdx("", Some("example.mdx".into()), &Options { + jsx_runtime: Some(JsxRuntime::Classic), + pragma: Some("a.b".into()), + pragma_frag: Some("a.c".into()), + pragma_import_source: Some("d".into()), + ..Default::default() + })?, + "import { a } from \"d\"; +function _createMdxContent(props) { + return <></>; +} +function MDXContent(props = {}) { + const { wrapper: MDXLayout } = props.components || {}; + return MDXLayout ? <MDXLayout {...props}><_createMdxContent {...props}/></MDXLayout> : _createMdxContent(props); +} +export default MDXContent; +", + "should support `options.pragma`, `options.pragma_frag`, `options.pragma_import_source`", + ); + + Ok(()) +} |