Files
MorphDoc/apps/web/tests/markdown-editor-commands.test.ts
T

88 lines
2.5 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
createMarkdownTable,
setMarkdownHeading,
toggleMarkdownLinePrefix,
wrapMarkdownSelection
} from "../src/markdown-editor-commands";
describe("Markdown 编辑器命令", () => {
it("包装、取消包装文本并保持内容选区", () => {
expect(wrapMarkdownSelection("正文", "**")).toEqual({
insert: "**正文**",
selectionFrom: 2,
selectionTo: 4
});
expect(wrapMarkdownSelection("**正文**", "**")).toEqual({
insert: "正文",
selectionFrom: 0,
selectionTo: 2
});
expect(
wrapMarkdownSelection("", "`", "`", "code")
).toEqual({
insert: "`code`",
selectionFrom: 1,
selectionTo: 5
});
});
it("切换引用和无序列表前缀", () => {
expect(toggleMarkdownLinePrefix("甲\n乙", "quote")).toBe(
"> 甲\n> 乙"
);
expect(
toggleMarkdownLinePrefix("> 甲\n> 乙", "quote")
).toBe("甲\n乙");
expect(
toggleMarkdownLinePrefix("1. 甲\n2. 乙", "unordered-list")
).toBe("- 甲\n- 乙");
});
it("为选中的多行生成连续有序列表并保留空行", () => {
expect(
toggleMarkdownLinePrefix(
"第一项\n\n第二项\n第三项",
"ordered-list"
)
).toBe("1. 第一项\n\n2. 第二项\n3. 第三项");
});
it("为选中的多行生成无序列表和任务列表", () => {
expect(
toggleMarkdownLinePrefix(
"第一项\n第二项\n第三项",
"unordered-list"
)
).toBe("- 第一项\n- 第二项\n- 第三项");
expect(
toggleMarkdownLinePrefix(
"第一项\n第二项\n第三项",
"task-list"
)
).toBe("- [ ] 第一项\n- [ ] 第二项\n- [ ] 第三项");
});
it("设置标题时替换现有标题级别", () => {
expect(setMarkdownHeading("## 标题\n正文", 3)).toBe(
"### 标题\n### 正文"
);
expect(setMarkdownHeading("### 标题", 1)).toBe("# 标题");
});
it("生成指定列数和总行数的 Markdown 表格", () => {
expect(createMarkdownTable(3, 4)).toEqual({
insert:
"| 列 1 | 列 2 | 列 3 |\n" +
"| --- | --- | --- |\n" +
"| 内容 | 内容 | 内容 |\n" +
"| 内容 | 内容 | 内容 |\n" +
"| 内容 | 内容 | 内容 |",
selectionFrom: 2,
selectionTo: 5
});
expect(() => createMarkdownTable(0, 2)).toThrow(RangeError);
expect(() => createMarkdownTable(3, 11)).toThrow(RangeError);
});
});