import { mdxToMarkdown } from 'mdast-util-mdx'
import { toMarkdown } from 'mdast-util-to-markdown'
import { describe, expect, it } from 'vitest'
import { codeTabsRemark } from './CodeTabs'
import { fromDocsMarkdown } from './utils.server'
describe('CodeTabs', () => {
it('should wrap code blocks in Tabs and TabPanel', () => {
const mdx = `
<$CodeTabs>
\`\`\`js name=a.js
console.log('Hello, world!');
\`\`\`
\`\`\`js name=b.js
console.log('Hello, world!');
\`\`\`
$CodeTabs>
`.trim()
const mdast = fromDocsMarkdown(mdx)
const transformed = codeTabsRemark()(mdast)
const output = toMarkdown(transformed, { extensions: [mdxToMarkdown()] })
expect(output).toEqual(
`
\`\`\`js name=a.js
console.log('Hello, world!');
\`\`\`
\`\`\`js name=b.js
console.log('Hello, world!');
\`\`\`
`.trimStart()
)
})
it('should throw if non-code blocks are present', () => {
const mdx = `
<$CodeTabs>
\`\`\`js name=a.js
console.log('Hello, world!');
\`\`\`
Ladeeda this is forbidden
\`\`\`js name=b.js
console.log('Hello, world!');
\`\`\`
$CodeTabs>
`.trim()
const mdast = fromDocsMarkdown(mdx)
expect(() => codeTabsRemark()(mdast)).toThrowError()
})
it('should add a name to a code block outside of CodeTabs if meta present', () => {
const mdx = `
\`\`\`js name=a.js
console.log('Hello, world!');
\`\`\`
\`\`\`js
console.log('Hello, world!');
\`\`\`
`.trim()
const mdast = fromDocsMarkdown(mdx)
const transformed = codeTabsRemark()(mdast)
const output = toMarkdown(transformed, { extensions: [mdxToMarkdown()] })
expect(output).toEqual(
`
\`\`\`js name=a.js
console.log('Hello, world!');
\`\`\`
\`\`\`js
console.log('Hello, world!');
\`\`\`
`.trimStart()
)
})
})