96 lines
1.8 KiB
TypeScript
96 lines
1.8 KiB
TypeScript
import MarkdownIt from "markdown-it";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
import { component } from "../../src/node/markdown-it/component.js";
|
|
|
|
describe("component", () => {
|
|
const markdownIt = MarkdownIt({ linkify: true }).use(component);
|
|
|
|
it("Should resolve component fence", () => {
|
|
const result1 = markdownIt.render(
|
|
`
|
|
\`\`\`component VPCard
|
|
title: A card
|
|
desc: A card desc
|
|
logo: https://example.com/logo.png
|
|
link: https://example.com
|
|
color: "#000"
|
|
\`\`\`
|
|
`,
|
|
{},
|
|
);
|
|
|
|
const result2 = markdownIt.render(
|
|
`
|
|
\`\`\`component VPCard
|
|
{
|
|
"title": "A card",
|
|
"desc": "A card desc",
|
|
"logo": "https://example.com/logo.png",
|
|
"link": "https://example.com",
|
|
"color": "#000"
|
|
}
|
|
\`\`\`
|
|
`,
|
|
{},
|
|
);
|
|
|
|
expect(result1).toContain("VPCard");
|
|
expect(result1).toMatchSnapshot();
|
|
expect(result2).toContain("VPCard");
|
|
expect(result2).toMatchSnapshot();
|
|
});
|
|
|
|
it("Should not throw with invalid syntax", () => {
|
|
const result1 = markdownIt.render(
|
|
`
|
|
\`\`\`component VPCard
|
|
title: a
|
|
title: b
|
|
\`\`\`
|
|
`,
|
|
{},
|
|
);
|
|
|
|
const result2 = markdownIt.render(
|
|
`
|
|
\`\`\`component VPCard
|
|
title: a
|
|
title: b
|
|
\`\`\`
|
|
`,
|
|
{},
|
|
);
|
|
|
|
expect(result1).toEqual("");
|
|
expect(result2).toEqual("");
|
|
});
|
|
|
|
it("Should drop when receiving a invalid syntax", () => {
|
|
const result = markdownIt.render(
|
|
`
|
|
\`\`\`component VPCard
|
|
{a:1}
|
|
\`\`\`
|
|
`,
|
|
{},
|
|
);
|
|
|
|
expect(result).toMatch("");
|
|
});
|
|
|
|
it("Should not break markdown fence", () => {
|
|
const result = markdownIt.render(
|
|
`
|
|
\`\`\`js
|
|
const a = 1;
|
|
\`\`\`
|
|
`,
|
|
{},
|
|
);
|
|
|
|
expect(result).toMatch(/<pre.*>[\s\S]*<\/pre>/);
|
|
expect(result).toMatchSnapshot();
|
|
});
|
|
});
|