import { describe, it, expect } from "bun:test"; import { CliError, UsageError, ConfigError, CommandError, InternalError, } from "../../src/cli/errors.ts"; describe("CliError 类层次", () => { it("UsageError 携带 message 和可选 hint", () => { const err = new UsageError("缺少参数", { hint: "请提供参数" }); expect(err).toBeInstanceOf(CliError); expect(err).toBeInstanceOf(UsageError); expect(err.message).toBe("缺少参数"); expect(err.hint).toBe("请提供参数"); expect(err.usage).toBeUndefined(); }); it("UsageError 携带 message、hint、usage", () => { const err = new UsageError("缺少参数", { hint: "请提供参数", usage: "rune plan ", }); expect(err.usage).toBe("rune plan "); }); it("ConfigError 只带 message", () => { const err = new ConfigError("未初始化"); expect(err).toBeInstanceOf(CliError); expect(err).toBeInstanceOf(ConfigError); expect(err.message).toBe("未初始化"); expect(err.hint).toBeUndefined(); }); it("CommandError 带 message 和 hint", () => { const err = new CommandError("变更不存在", { hint: "请先运行 rune plan" }); expect(err).toBeInstanceOf(CliError); expect(err.message).toBe("变更不存在"); expect(err.hint).toBe("请先运行 rune plan"); }); it("InternalError 用默认 message", () => { const err = new InternalError(); expect(err).toBeInstanceOf(CliError); expect(err.message).toBe("发生了未预期的错误"); }); it("可以用 name 区分错误类型", () => { expect(new UsageError("a").name).toBe("UsageError"); expect(new ConfigError("b").name).toBe("ConfigError"); expect(new CommandError("c").name).toBe("CommandError"); expect(new InternalError().name).toBe("InternalError"); }); });