import { describe, it, expect } from 'vitest'; import { renderAsciiDocLite } from '../utils/asciidoc-lite'; describe('renderAsciiDocLite', () => { it('returns empty string for empty input', () => { expect(renderAsciiDocLite('')).toBe(''); }); it('wraps plain text in
', () => { expect(renderAsciiDocLite('Hello world')).toBe('
Hello world
'); }); it('creates separate paragraphs on blank lines', () => { const result = renderAsciiDocLite('First\n\nSecond'); expect(result).toContain('First
'); expect(result).toContain('Second
'); }); it('renders headings (level + 1, h1 reserved)', () => { expect(renderAsciiDocLite('== Heading 2')).toContain('code');
});
it('renders AsciiDoc links with label', () => {
const result = renderAsciiDocLite('see https://example.com[label] here');
expect(result).toContain('label');
});
it('renders bare URLs as links', () => {
const result = renderAsciiDocLite('visit https://example.com now');
expect(result).toContain(' {
const result = renderAsciiDocLite('* item one\n* item two');
expect(result).toContain('');
expect(result).toContain('let x = 1;');
});
it('renders source blocks with .... delimiter', () => {
const result = renderAsciiDocLite('....\nsome text\n....');
expect(result).toContain('');
expect(result).toContain('some text');
});
it('escapes HTML in source blocks', () => {
const result = renderAsciiDocLite('----\n\n----');
expect(result).toContain('<a href="evil">');
expect(result).not.toContain('');
});
it('handles multi-line paragraphs', () => {
const result = renderAsciiDocLite('line one\nline two\n\nnew paragraph');
expect(result).toContain('line one line two
');
expect(result).toContain('new paragraph
');
});
it('handles nested list levels', () => {
const result = renderAsciiDocLite('* top\n** nested');
expect(result).toContain('list-level-1');
expect(result).toContain('list-level-2');
});
});