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( "./events?id=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"); }); it("parses unordered lists with '-' as bullet", async () => { const input = "- item one\n- item two\n - nested item\n- item three"; const output = await parseAdvancedmarkup(input); expect(output).toContain("