import { describe, it, expect } from 'vitest'; import { parseBasicmarkup } from '../../src/lib/utils/markup/basicMarkupParser'; // Helper to strip whitespace for easier comparison function stripWS(str: string) { return str.replace(/\s+/g, ' ').trim(); } describe('Basic Markup Parser', () => { it('parses ATX and Setext headers', async () => { const input = '# H1\nText\n\nH2\n====\n'; const output = await parseBasicmarkup(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 parseBasicmarkup(input); expect(output).toContain('bold'); expect(output).toContain('italic'); expect(output).toContain('strikethrough'); }); it('parses blockquotes', async () => { const input = '> quote'; const output = await parseBasicmarkup(input); expect(output).toContain(' { const input = '> quote\n> quote'; const output = await parseBasicmarkup(input); expect(output).toContain(' { const input = '* a\n* b'; const output = await parseBasicmarkup(input); expect(output).toContain(' { const input = '1. one\n2. two'; const output = await parseBasicmarkup(input); expect(output).toContain(' { const input = '[link](https://example.com) ![alt](https://img.com/x.png)'; const output = await parseBasicmarkup(input); expect(output).toContain(' { const input = '#hashtag'; const output = await parseBasicmarkup(input); expect(output).toContain('text-primary-600'); expect(output).toContain('#hashtag'); }); it('parses nostr identifiers', async () => { const input = 'npub1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'; const output = await parseBasicmarkup(input); expect(output).toContain('https://njump.me/npub1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'); }); it('parses emoji shortcodes', async () => { const input = 'hello :smile:'; const output = await parseBasicmarkup(input); expect(output).toMatch(/😄|:smile:/); }); it('parses wikilinks', async () => { const input = '[[Test Page|display]]'; const output = await parseBasicmarkup(input); expect(output).toContain('wikilink'); expect(output).toContain('display'); }); });