recipe/packages/md-enhance/__tests__/unit/flowchart.spec.ts

91 lines
2.1 KiB
TypeScript
Raw Permalink Normal View History

2024-08-18 19:16:25 +08:00
import MarkdownIt from "markdown-it";
import { describe, expect, it } from "vitest";
import { flowchart } from "../../src/node/markdown-it/flowchart.js";
const demo = `st=>start: Start|past:>http://www.google.com[blank]
e=>end: End|future:>http://www.google.com
op1=>operation: My Operation|past
op2=>operation: Stuff|current
sub1=>subroutine: My Subroutine|invalid
cond=>condition: Yes
or No?|approved:>http://www.google.com
c2=>condition: Good idea|rejected
io=>inputoutput: catch something...|future
st->op1(right)->cond
cond(yes, right)->c2
cond(no)->sub1(left)->op1
c2(yes)->io->e
c2(no)->op2->e`;
describe("flowchart", () => {
const markdownIt = MarkdownIt({ linkify: true }).use(flowchart);
it("Should render ```flow", () => {
const flowRenderResult = markdownIt.render(`
\`\`\`flow
${demo}
\`\`\`
`);
expect(flowRenderResult).toMatch(
/<FlowChart id="flowchart-.*?" code=".*?" preset="vue"><\/FlowChart>/,
);
expect(flowRenderResult).toMatchSnapshot();
});
it("Should render ```flowchart", () => {
const flowChartRenderResult = markdownIt.render(`
\`\`\`flowchart
${demo}
\`\`\`
`);
expect(flowChartRenderResult).toMatch(
/<FlowChart id="flowchart-.*?" code=".*?" preset="vue"><\/FlowChart>/,
);
expect(flowChartRenderResult).toMatchSnapshot();
});
it("Should not render", () => {
expect(
markdownIt.render(`
${demo}
`),
).toMatchSnapshot();
expect(
markdownIt.render(`
\`\`\`md
${demo}
\`\`\`
`),
).toMatchSnapshot();
});
it("Should handle preset", () => {
const flowRenderResult = markdownIt.render(`
\`\`\`flow:ant
${demo}
\`\`\`
`);
expect(flowRenderResult).toMatch(
/<FlowChart id="flowchart-.*?" code=".*?" preset="ant"><\/FlowChart>/,
);
expect(flowRenderResult).toMatchSnapshot();
const flowChartRenderResult = markdownIt.render(`
\`\`\`flowchart:ant
${demo}
\`\`\`
`);
expect(flowChartRenderResult).toMatch(
/<FlowChart id="flowchart-.*?" code=".*?" preset="ant"><\/FlowChart>/,
);
expect(flowChartRenderResult).toMatchSnapshot();
});
});