diff --git a/src/engine/engine.test.ts b/src/engine/engine.test.ts index 90ea41d..29f15e1 100644 --- a/src/engine/engine.test.ts +++ b/src/engine/engine.test.ts @@ -1,8 +1,9 @@ import { describe, it, expect, beforeAll } from "vitest"; import { SumEngine } from "./index"; -import { qty } from "./types"; -import type { XRefResolution } from "./evaluator"; -import { formatValue } from "./index"; +import { qty, EvalError, XRefError } from "./types"; +import type { XRefResolution, EvalCtx } from "./evaluator"; +import { evaluate } from "./evaluator"; +import { formatValue } from "./formatter"; let eng: SumEngine; @@ -423,3 +424,24 @@ describe("cross-sheet references", () => { expect(r[0].assign).toBe("rent"); }); }); + +describe("evaluation errors", () => { + it("throws EvalError for unknown variable", () => { + const ctx = { + vars: new Map(), + reg: eng.reg, + historicalRates: {}, + } as unknown as EvalCtx; + expect(() => evaluate({ k: "var", name: "unknown" }, ctx)).toThrowError(EvalError); + }); + + it("throws XRefError for unresolved xref", () => { + const ctx = { + vars: new Map(), + reg: eng.reg, + historicalRates: {}, + resolveXRef: () => ({ ok: false, reason: "xref error" }), + } as unknown as EvalCtx; + expect(() => evaluate({ k: "xref", sheet: "Sheet", key: "key" }, ctx)).toThrowError(XRefError); + }); +});