import { describe, it, expect } from 'vitest';
import { parseAdvancedmarkup } from '../../src/lib/utils/markup/advancedMarkupParser';
function stripWS(str: string) {
return str.replace(/\s+/g, ' ').trim();
}
describe('Advanced Markup Parser', () => {
it('parses headers (ATX and Setext)', async () => {
const input = '# H1\nText\n\nH2\n====\n';
const output = await parseAdvancedmarkup(input);
expect(stripWS(output)).toContain('H1');
expect(stripWS(output)).toContain('H2');
});
it('parses bold, italic, and strikethrough', async () => {
const input = '*bold* **bold** _italic_ __italic__ ~strikethrough~ ~~strikethrough~~';
const output = await parseAdvancedmarkup(input);
expect(output).toContain('bold');
expect(output).toContain('italic');
expect(output).toContain('strikethrough');
});
it('parses blockquotes', async () => {
const input = '> quote';
const output = await parseAdvancedmarkup(input);
expect(output).toContain('
{ const input = '> quote\n> quote'; const output = await parseAdvancedmarkup(input); expect(output).toContain('{ const input = '* a\n* b'; const output = await parseAdvancedmarkup(input); expect(output).toContain('{ const input = '1. one\n2. two'; const output = await parseAdvancedmarkup(input); expect(output).toContain('
{ const input = '[link](https://example.com) '; const output = await parseAdvancedmarkup(input); expect(output).toContain(' { const input = '#hashtag'; const output = await parseAdvancedmarkup(input); expect(output).toContain('text-primary-600'); expect(output).toContain('#hashtag'); }); it('parses nostr identifiers', async () => { const input = 'npub1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'; const output = await parseAdvancedmarkup(input); expect(output).toContain('https://njump.me/npub1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'); }); it('parses emoji shortcodes', async () => { const input = 'hello :smile:'; const output = await parseAdvancedmarkup(input); expect(output).toMatch(/😄|:smile:/); }); it('parses wikilinks', async () => { const input = '[[Test Page|display]]'; const output = await parseAdvancedmarkup(input); expect(output).toContain('wikilink'); expect(output).toContain('display'); }); it('parses tables (with and without headers)', async () => { const input = `| Syntax | Description |\n|--------|-------------|\n| Header | Title |\n| Paragraph | Text |\n\n| a | b |\n| c | d |`; const output = await parseAdvancedmarkup(input); expect(output).toContain('
{ const input = '```js\nconsole.log(1);\n```\n```\nno lang\n```'; const output = await parseAdvancedmarkup(input); const textOnly = output.replace(/<[^>]+>/g, ''); expect(output).toContain('
{ const input = '---'; const output = await parseAdvancedmarkup(input); expect(output).toContain('
{ const input = 'Here is a footnote[^1].\n\n[^1]: This is the footnote.'; const output = await parseAdvancedmarkup(input); expect(output).toContain('Footnotes'); expect(output).toContain('This is the footnote'); expect(output).toContain('fn-1'); }); });