diff --git a/src/engine/engine.test.ts b/src/engine/engine.test.ts index e8d8454..72d0f50 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 { describe, it, expect, beforeAll, vi } from "vitest"; import { SumEngine } from "./index"; import { qty, EvalError, XRefError } from "./types"; import type { XRefResolution, EvalCtx } from "./evaluator"; import { evaluate } from "./evaluator"; +import * as evaluator from "./evaluator"; import { formatValue } from "./formatter"; let eng: SumEngine; @@ -451,4 +452,17 @@ describe("evaluation errors", () => { } as unknown as EvalCtx; expect(() => evaluate({ k: "xref", sheet: "Sheet", key: "key" }, ctx)).toThrowError(XRefError); }); + + it("catches and handles arbitrary errors in evaluateDocument", () => { + // Spy on evaluator.evaluate and force an arbitrary error + const spy = vi.spyOn(evaluator, "evaluate").mockImplementation(() => { + throw new Error("Forced execution anomaly"); + }); + + const results = eng.evaluateDocument("1 + 1"); + expect(results).toHaveLength(1); + expect(results[0].error).toBe("Forced execution anomaly"); + + spy.mockRestore(); + }); });