aboutsummaryrefslogtreecommitdiffstats
path: root/tests/xxx_mdx.rs
diff options
context:
space:
mode:
authorLibravatar Titus Wormer <tituswormer@gmail.com>2022-10-12 17:40:01 +0200
committerLibravatar Titus Wormer <tituswormer@gmail.com>2022-10-12 17:40:01 +0200
commit54d84a4fd326dcfae871e203d673d55cbf40a279 (patch)
tree977bc7e7acc017e86d06aa6ee07bda93ba58631f /tests/xxx_mdx.rs
parentae9382b7f9466c8df421f0f64850a69a4c658581 (diff)
downloadmarkdown-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.rs154
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(())
+}