55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
import { describe, it, expect } from "bun:test";
|
|
import { parseTasks } from "../../src/core/task-parser.ts";
|
|
|
|
describe("parseTasks", () => {
|
|
it("解析标准 checkbox 格式", () => {
|
|
const content = `- [ ] 任务一
|
|
- [ ] 任务二
|
|
- [x] 任务三`;
|
|
const tasks = parseTasks(content);
|
|
expect(tasks).toHaveLength(3);
|
|
expect(tasks[0]).toEqual({ checked: false, text: "任务一" });
|
|
expect(tasks[1]).toEqual({ checked: false, text: "任务二" });
|
|
expect(tasks[2]).toEqual({ checked: true, text: "任务三" });
|
|
});
|
|
|
|
it("跳过非 checkbox 行", () => {
|
|
const content = `# 标题
|
|
一些描述
|
|
- [ ] 任务一
|
|
普通文本
|
|
- [x] 任务二`;
|
|
const tasks = parseTasks(content);
|
|
expect(tasks).toHaveLength(2);
|
|
});
|
|
|
|
it("空内容返回空数组", () => {
|
|
expect(parseTasks("")).toEqual([]);
|
|
expect(parseTasks("# 只有标题")).toEqual([]);
|
|
});
|
|
|
|
it("支持大写 X 标记", () => {
|
|
const content = `- [X] 大写标记`;
|
|
const tasks = parseTasks(content);
|
|
expect(tasks).toHaveLength(1);
|
|
expect(tasks[0].checked).toBe(true);
|
|
});
|
|
|
|
it("支持缩进的 checkbox", () => {
|
|
const content = ` - [ ] 缩进任务`;
|
|
const tasks = parseTasks(content);
|
|
expect(tasks).toHaveLength(1);
|
|
expect(tasks[0].text).toBe("缩进任务");
|
|
});
|
|
|
|
it("计算已完成和总数", () => {
|
|
const content = `- [x] 已完成
|
|
- [ ] 未完成
|
|
- [x] 另一个完成`;
|
|
const tasks = parseTasks(content);
|
|
const completed = tasks.filter((t) => t.checked).length;
|
|
expect(completed).toBe(2);
|
|
expect(tasks.length).toBe(3);
|
|
});
|
|
});
|