1
0
Files
DiAL/tests/server/checker/runner/shared/text.test.ts
lanyuanxiaoyao e983e5d75d refactor: 重命名 command checker 为 cmd checker 并适配跨平台测试
将 type/configKey 从 "command" 统一为 "cmd",源码目录 runner/command/ → runner/cmd/,
spec 目录 command-checker/ → cmd-checker/,测试全部改用 bun -e 替代 Unix 系统命令,
归档 cmd-checker-enhancement 变更并同步 delta spec 到主 spec。
2026-05-14 09:23:10 +08:00

51 lines
1.7 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { checkTextRules } from "../../../../../src/server/checker/runner/cmd/text";
describe("checkTextRules", () => {
test("无规则返回匹配成功", () => {
const r = checkTextRules("hello", [], "stdout");
expect(r.matched).toBe(true);
expect(r.failure).toBeNull();
});
test("单条 contains 规则匹配成功", () => {
const r = checkTextRules("build completed successfully", [{ contains: "completed" }], "stdout");
expect(r.matched).toBe(true);
});
test("单条 contains 规则匹配失败", () => {
const r = checkTextRules("build completed successfully", [{ contains: "failed" }], "stdout");
expect(r.matched).toBe(false);
expect(r.failure!.phase).toBe("stdout");
expect(r.failure!.path).toBe("stdout[0]");
});
test("多条规则全部通过", () => {
const r = checkTextRules(
"version: 3.2.1, build: ok",
[{ contains: "version" }, { match: "\\d+\\.\\d+\\.\\d+" }],
"stdout",
);
expect(r.matched).toBe(true);
});
test("第一条规则失败立即返回", () => {
const r = checkTextRules("error occurred", [{ contains: "success" }, { contains: "error" }], "stdout");
expect(r.matched).toBe(false);
expect(r.failure!.phase).toBe("stdout");
expect(r.failure!.path).toBe("stdout[0]");
});
test("stderr phase", () => {
const r = checkTextRules("warning: deprecated", [{ contains: "warning" }], "stderr");
expect(r.matched).toBe(true);
expect(r.failure).toBeNull();
});
test("empty 操作符", () => {
const r = checkTextRules("", [{ empty: true }], "stderr");
expect(r.matched).toBe(true);
});
});