import { describe, it, expect } from "vitest"; import markdownExportService from "./markdown.js"; import { trimIndentation } from "../../../spec/support/utils.js"; describe("Markdown export", () => { it("exports correct language tag for known languages", () => { const conversionTable = { "language-text-x-nginx-conf": "nginx", "language-text-x-diff": "diff", "language-application-javascript-env-frontend": "javascript", "language-application-javascript-env-backend": "javascript", "language-text-x-asm-mips": "mips" }; for (const [ input, output ] of Object.entries(conversionTable)) { const html = trimIndentation`\

A diff:

Hello
                -world
                +worldy
                
`; const expected = trimIndentation`\ A diff: \`\`\`${output} Hello -world +worldy \`\`\``; expect(markdownExportService.toMarkdown(html)).toBe(expected); } }); it("removes auto tag for code blocks", () => { const html = trimIndentation`\
Hello
            -world
            +worldy
            
`; const expected = trimIndentation`\ \`\`\` Hello -world +worldy \`\`\``; expect(markdownExportService.toMarkdown(html)).toBe(expected); }); it("supports code block with no language tag", () => { const html = trimIndentation`\
Hello
`; const expected = trimIndentation`\ \`\`\` Hello \`\`\``; expect(markdownExportService.toMarkdown(html)).toBe(expected); }); it("exports strikethrough text correctly", () => { const html = "helloHello world"; const expected = "~~hello~~Hello ~~world~~"; expect(markdownExportService.toMarkdown(html)).toBe(expected); }); it("exports headings properly", () => { const html = trimIndentation`\

Heading 1

Heading 2

Heading 3

Heading 4

Heading 5
Heading 6
`; const expected = trimIndentation`\ # Heading 1 ## Heading 2 ### Heading 3 #### Heading 4 ##### Heading 5 ###### Heading 6`; expect(markdownExportService.toMarkdown(html)).toBe(expected); }); it("rewrites image URL with spaces", () => { const html = ``; const expected = `![](Hello%20world%20%20.png)`; expect(markdownExportService.toMarkdown(html)).toBe(expected); }); it("supports keyboard shortcuts", () => { const html = "Ctrl + Alt + Delete"; expect(markdownExportService.toMarkdown(html)).toBe(html); }); it("exports admonitions properly", () => { const html = trimIndentation`\

Before

After

`; const space = " "; // editor config trimming space. const expected = trimIndentation`\ Before > [!NOTE] > This is a note. > [!TIP] > This is a tip. > [!IMPORTANT] > This is a very important information. >${space} > | | | > | --- | --- | > | 1 | 2 | > | 3 | 4 | > [!CAUTION] > This is a caution. > [!WARNING] > ## Title goes here >${space} > This is a warning. After`; expect(markdownExportService.toMarkdown(html)).toBe(expected); }); });