import { describe, it, expect, vi } from "vitest"; import { markdownToHtml } from "../../lib/content"; describe("Markdown Processing", () => { describe("markdownToHtml", () => { it("converts basic markdown to HTML", () => { const markdown = "# Heading\n\nThis is a paragraph."; const result = markdownToHtml(markdown); expect(result).toContain("
This is a paragraph.
"); }); it("converts bold text", () => { const markdown = "This is **bold** text."; const result = markdownToHtml(markdown); expect(result).toContain("bold"); }); it("converts italic text", () => { const markdown = "This is *italic* text."; const result = markdownToHtml(markdown); expect(result).toContain("italic"); }); it("converts links", () => { const markdown = "Visit [Google](https://google.com) for search."; const result = markdownToHtml(markdown); expect(result).toContain('Google'); }); it("converts line breaks toParagraph 1
"); expect(result).toContain("Paragraph 2
"); expect(result).toContain("Paragraph 3
"); }); it("adds md-gap class to paragraphs", () => { const markdown = "Paragraph 1\n\nParagraph 2"; const result = markdownToHtml(markdown); expect(result).toContain('Paragraph 1
'); expect(result).toContain('Paragraph 2
'); }); it("converts unordered lists", () => { const markdown = "- Item 1\n- Item 2\n- Item 3"; const result = markdownToHtml(markdown); expect(result).toContain("");
expect(result).toContain("");
expect(result).toContain("const x = 1;");
});
it("converts inline code", () => {
const markdown = "Use `console.log()` to debug.";
const result = markdownToHtml(markdown);
expect(result).toContain("console.log()");
});
it("converts blockquotes", () => {
const markdown = "> This is a quote\n> with multiple lines";
const result = markdownToHtml(markdown);
expect(result).toContain("");
expect(result).toContain("This is a quote");
expect(result).toContain("with multiple lines");
expect(result).toContain("
");
});
it("converts horizontal rules", () => {
const markdown = "Text above\n\n---\n\nText below";
const result = markdownToHtml(markdown);
expect(result).toContain("
");
});
it("handles mixed content", () => {
const markdown =
"# Title\n\nThis is a **bold** paragraph with a [link](https://example.com).\n\n- List item 1\n- List item 2\n\nAnother paragraph with `code`.";
const result = markdownToHtml(markdown);
expect(result).toContain("Title
");
expect(result).toContain("bold");
expect(result).toContain('link');
expect(result).toContain("");
expect(result).toContain("- List item 1
");
expect(result).toContain("- List item 2
");
expect(result).toContain("code");
});
it("handles empty input", () => {
const result = markdownToHtml("");
expect(result).toBe("");
});
it("handles whitespace-only input", () => {
const result = markdownToHtml(" \n\n ");
expect(result).toBe("");
});
it("preserves HTML entities", () => {
const markdown = "Use < and > for HTML tags.";
const result = markdownToHtml(markdown);
expect(result).toContain("<");
expect(result).toContain(">");
});
it("handles complex nested structures", () => {
const markdown =
"# Main Title\n\n## Subtitle\n\nThis is a paragraph with **bold** and *italic* text.\n\n1. First item with `code`\n2. Second item with [link](https://example.com)\n\n> This is a quote\n> with **bold** text\n\n```javascript\nconst example = 'test';\n```";
const result = markdownToHtml(markdown);
expect(result).toContain("Main Title
");
expect(result).toContain("Subtitle
");
expect(result).toContain("bold");
expect(result).toContain("italic");
expect(result).toContain("");
expect(result).toContain("code");
expect(result).toContain('link');
expect(result).toContain("");
expect(result).toContain("");
});
it("handles malformed markdown gracefully", () => {
const markdown = "**Unclosed bold\n\n*Unclosed italic\n\n[Unclosed link";
const result = markdownToHtml(markdown);
// Should not throw an error and should handle gracefully
expect(typeof result).toBe("string");
expect(result.length).toBeGreaterThan(0);
});
it("converts headings of different levels", () => {
const markdown = "# H1\n## H2\n### H3\n#### H4\n##### H5\n###### H6";
const result = markdownToHtml(markdown);
expect(result).toContain("H1
");
expect(result).toContain("H2
");
expect(result).toContain("H3
");
expect(result).toContain("H4
");
expect(result).toContain("H5
");
expect(result).toContain("H6
");
});
it("handles tables", () => {
const markdown =
"| Header 1 | Header 2 |\n|----------|----------|\n| Cell 1 | Cell 2 |";
const result = markdownToHtml(markdown);
expect(result).toContain("");
expect(result).toContain("");
expect(result).toContain("Header 1 ");
expect(result).toContain("Header 2 ");
expect(result).toContain("");
expect(result).toContain("Cell 1 ");
expect(result).toContain("Cell 2 ");
});
});
});