import { describe, it, expect } from 'vitest'; import { renderMarkdown, stripMarkdown } from './markdown.js'; describe('renderMarkdown', () => { it('should render bold text', () => { const html = renderMarkdown('**bold**'); expect(html).toContain('bold'); }); it('should render italic text', () => { const html = renderMarkdown('*italic*'); expect(html).toContain('italic'); }); it('should render headings', () => { const html = renderMarkdown('# Heading 1'); expect(html).toContain('
');
expect(html).toContain('const x = 1;');
});
it('should render inline code', () => {
const html = renderMarkdown('Use `npm install`');
expect(html).toContain('npm install');
});
it('should render links', () => {
const html = renderMarkdown('[Google](https://google.com)');
expect(html).toContain('href="https://google.com"');
expect(html).toContain('Google');
});
it('should render tables', () => {
const md = '| A | B |\n|---|---|\n| 1 | 2 |';
const html = renderMarkdown(md);
expect(html).toContain('');
expect(html).toContain('1 ');
});
it('should auto-linkify URLs', () => {
const html = renderMarkdown('Visit https://example.com');
expect(html).toContain('href="https://example.com"');
});
it('should convert line breaks', () => {
const html = renderMarkdown('line 1\nline 2');
expect(html).toContain('
');
});
});
describe('stripMarkdown', () => {
it('should remove markdown formatting', () => {
expect(stripMarkdown('**bold** and *italic*')).toBe('bold and italic');
});
it('should remove code blocks', () => {
expect(stripMarkdown('```\ncode\n```')).toBe('');
});
it('should remove inline code backticks', () => {
expect(stripMarkdown('Use `command`')).toBe('Use');
});
it('should extract link text', () => {
expect(stripMarkdown('[Click here](https://example.com)')).toBe('Click here');
});
it('should return empty for empty input', () => {
expect(stripMarkdown('')).toBe('');
});
});