@@ -4,6 +4,7 @@ import {fromMarkdown} from 'mdast-util-from-markdown'
4
4
import { toMarkdown } from 'mdast-util-to-markdown'
5
5
import { removePosition } from 'unist-util-remove-position'
6
6
import { mdxJsx } from 'micromark-extension-mdx-jsx'
7
+ import { mdxMd } from 'micromark-extension-mdx-md'
7
8
import { mdxJsxFromMarkdown , mdxJsxToMarkdown } from './index.js'
8
9
9
10
test ( 'markdown -> mdast' , ( t ) => {
@@ -1989,3 +1990,82 @@ test('mdast -> markdown', (t) => {
1989
1990
1990
1991
t . end ( )
1991
1992
} )
1993
+
1994
+ test ( 'roundtrip' , ( t ) => {
1995
+ equal ( '<a x="a\nb\nc" />' , '<a\n x="a\n b\n c"\n/>\n' , 'attribute' )
1996
+
1997
+ equal (
1998
+ '<a>\n<b x="a\nb\nc" />\n</a>' ,
1999
+ '<a>\n <b\n x="a\n b\n c"\n />\n</a>\n' ,
2000
+ 'attribute in nested element'
2001
+ )
2002
+
2003
+ equal (
2004
+ '<a>\n <b>\n <c x="a\nb\nc" />\n </b>\n</a>' ,
2005
+ '<a>\n <b>\n <c\n x="a\n b\n c"\n />\n </b>\n</a>\n' ,
2006
+ 'attribute in nested elements'
2007
+ )
2008
+
2009
+ equal (
2010
+ '<a x={`a\nb\nc`} />' ,
2011
+ '<a\n x={`a\n b\n c`}\n/>\n' ,
2012
+ 'attribute expression'
2013
+ )
2014
+
2015
+ equal (
2016
+ '<a>\n<b x={`a\nb\nc`} />\n</a>' ,
2017
+ '<a>\n <b\n x={`a\n b\n c`}\n />\n</a>\n' ,
2018
+ 'attribute expression in nested element'
2019
+ )
2020
+
2021
+ equal (
2022
+ '<a>\n <b>\n <c x={`a\nb\nc`} />\n </b>\n</a>' ,
2023
+ '<a>\n <b>\n <c\n x={`a\n b\n c`}\n />\n </b>\n</a>\n' ,
2024
+ 'attribute expression in nested elements'
2025
+ )
2026
+
2027
+ equal ( '<a {\n...a\n} />' , '<a\n {\n ...a\n }\n/>\n' , 'expression' )
2028
+
2029
+ equal (
2030
+ '<a>\n<b {\n...a\n} />\n</a>' ,
2031
+ '<a>\n <b\n {\n ...a\n }\n />\n</a>\n' ,
2032
+ 'expression in nested element'
2033
+ )
2034
+
2035
+ equal (
2036
+ '<a>\n <b>\n <c {\n...a\n} />\n </b>\n</a>' ,
2037
+ '<a>\n <b>\n <c\n {\n ...a\n }\n />\n </b>\n</a>\n' ,
2038
+ 'expression in nested elements'
2039
+ )
2040
+
2041
+ /**
2042
+ * @param {string } input
2043
+ * @param {string } output
2044
+ * @param {string } message
2045
+ */
2046
+ function equal ( input , output , message ) {
2047
+ const intermediate1 = process ( input )
2048
+ t . equal ( intermediate1 , output , message + ' (#1)' )
2049
+ const intermediate2 = process ( intermediate1 )
2050
+ t . equal ( intermediate2 , output , message + ' (#2)' )
2051
+ const intermediate3 = process ( intermediate2 )
2052
+ t . equal ( intermediate3 , output , message + ' (#3)' )
2053
+ const intermediate4 = process ( intermediate3 )
2054
+ t . equal ( intermediate4 , output , message + ' (#4)' )
2055
+ }
2056
+
2057
+ /**
2058
+ * @param {string } input
2059
+ */
2060
+ function process ( input ) {
2061
+ return toMarkdown (
2062
+ fromMarkdown ( input , {
2063
+ extensions : [ mdxMd , mdxJsx ( ) ] ,
2064
+ mdastExtensions : [ mdxJsxFromMarkdown ( ) ]
2065
+ } ) ,
2066
+ { extensions : [ mdxJsxToMarkdown ( ) ] }
2067
+ )
2068
+ }
2069
+
2070
+ t . end ( )
2071
+ } )
0 commit comments