feat: 新增 validateTaskFormat 校验函数
This commit is contained in:
@@ -14,3 +14,22 @@ export function parseTasks(content: string): TaskItem[] {
|
|||||||
}
|
}
|
||||||
return tasks;
|
return tasks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class TaskFormatError extends Error {
|
||||||
|
constructor(message: string) {
|
||||||
|
super(message);
|
||||||
|
this.name = this.constructor.name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function validateTaskFormat(content: string): void {
|
||||||
|
const tasks = parseTasks(content);
|
||||||
|
if (tasks.length === 0) {
|
||||||
|
throw new TaskFormatError("task.md 必须包含至少一个 checkbox 项");
|
||||||
|
}
|
||||||
|
for (const task of tasks) {
|
||||||
|
if (task.text.trim() === "") {
|
||||||
|
throw new TaskFormatError("task.md 中每个 checkbox 项必须有非空描述");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { describe, it, expect } from "bun:test";
|
import { describe, it, expect } from "bun:test";
|
||||||
import { parseTasks } from "../../src/core/task-parser.ts";
|
import { parseTasks, validateTaskFormat, TaskFormatError } from "../../src/core/task-parser.ts";
|
||||||
|
|
||||||
describe("parseTasks", () => {
|
describe("parseTasks", () => {
|
||||||
it("解析标准 checkbox 格式", () => {
|
it("解析标准 checkbox 格式", () => {
|
||||||
@@ -52,3 +52,29 @@ describe("parseTasks", () => {
|
|||||||
expect(tasks.length).toBe(3);
|
expect(tasks.length).toBe(3);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("validateTaskFormat", () => {
|
||||||
|
it("合法 task 内容通过校验", () => {
|
||||||
|
expect(() => validateTaskFormat("- [x] 已完成\n- [ ] 未完成")).not.toThrow();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("无 checkbox 项时抛错", () => {
|
||||||
|
expect(() => validateTaskFormat("# 标题\n一些描述")).toThrow(TaskFormatError);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("空内容抛错", () => {
|
||||||
|
expect(() => validateTaskFormat("")).toThrow(TaskFormatError);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("checkbox 文本为空时抛错", () => {
|
||||||
|
expect(() => validateTaskFormat("- [ ] \n- [x] 有内容")).toThrow(TaskFormatError);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("checkbox 文本仅空格时抛错", () => {
|
||||||
|
expect(() => validateTaskFormat("- [ ] ")).toThrow(TaskFormatError);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("有 checkbox 且文本非空时通过", () => {
|
||||||
|
expect(() => validateTaskFormat("- [ ] 实现功能A")).not.toThrow();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user