import { renderMarkdown } from '../dist/index.js'; import chai, { expect } from 'chai'; describe('expressions', () => { it('should be able to serialize bare expression', async () => { const { code } = await renderMarkdown(`{a}`, {}); chai.expect(code).to.equal(`{a}`); }); it('should be able to serialize expression inside component', async () => { const { code } = await renderMarkdown(`{a}`, {}); chai.expect(code).to.equal(`{a}`); }); it('should be able to serialize expression inside markdown', async () => { const { code } = await renderMarkdown(`# {frontmatter.title}`, {}); chai .expect(code) .to.equal(`

{frontmatter.title}

`); }); it('should be able to serialize complex expression inside markdown', async () => { const { code } = await renderMarkdown(`# Hello {frontmatter.name}`, {}); chai .expect(code) .to.equal(`

Hello {frontmatter.name}

`); }); it('should be able to serialize complex expression with markup inside markdown', async () => { const { code } = await renderMarkdown(`# Hello {frontmatter.name}`, {}); chai .expect(code) .to.equal( `

Hello {frontmatter.name}

` ); }); it('should be able to avoid evaluating JSX-like expressions in an inline code & generate a slug for id', async () => { const { code } = await renderMarkdown(`# \`{frontmatter.title}\``, {}); chai .expect(code) .to.equal('

{frontmatter.title}

'); }); it('should be able to avoid evaluating JSX-like expressions in inline codes', async () => { const { code } = await renderMarkdown(`# \`{ foo }\` is a shorthand for \`{ foo: foo }\``, {}); chai .expect(code) .to.equal( '

{ foo } is a shorthand for { foo: foo }

' ); }); it('should be able to avoid evaluating JSX-like expressions & escape HTML tag characters in inline codes', async () => { const { code } = await renderMarkdown( `###### \`{}\` is equivalent to \`Record\` (at TypeScript v{frontmatter.version})`, {} ); chai .expect(code) .to.equal( `
{} is equivalent to Record<never, never> (at TypeScript v{frontmatter.version})
` ); }); it('should be able to encode ampersand characters in code blocks', async () => { const { code } = await renderMarkdown( 'The ampersand in ` ` must be encoded in code blocks.', {} ); chai .expect(code) .to.equal( '

The ampersand in &nbsp; must be encoded in code blocks.

' ) }); it('should be able to encode ampersand characters in fenced code blocks', async () => { const { code } = await renderMarkdown(` \`\`\`md The ampersand in \` \` must be encoded in code blocks. \`\`\` `); chai .expect(code) .to.match( /^
.*The ampersand in `&nbsp;`/
			);
	})

	it('should be able to serialize function expression', async () => {
		const { code } = await renderMarkdown(
			`{frontmatter.list.map(item => 

{item}

)}`, {} ); chai.expect(code).to.equal(`{frontmatter.list.map(item =>

{item}

)}`); }); it('should unwrap HTML comments in inline code blocks', async () => { const { code } = await renderMarkdown(`\`{/**/}\``); chai.expect(code).to.equal('

<!-- HTML comment -->

'); }); it('should unwrap HTML comments in code fences', async () => { const { code } = await renderMarkdown( ` \`\`\` \`\`\` ` ); chai.expect(code).to.match(/(?