// The SpellGrid command line, played from a script (the reference's own check; not a course test). import { readFileSync } from "node:fs"; import { expect, test } from "vitest"; import { run } from "../src/cli"; function play(level: string, input: string[]): { outcome: string; out: string } { let out = ""; const outcome = run(readFileSync(`levels/${level}.json`, "utf8"), () => input.shift(), (s) => (out += s)); return { outcome, out }; } test("cli_wins_level_1", () => { const { outcome, out } = play("l1-double-tap", ["w", "w", "c Whirlwind", "s", "s", "a", "s", "s", "d", "d"]); expect(outcome).toBe("won"); expect(out).toContain("DEA IS DOU"); expect(out).toContain("You win!"); }); test("cli_wins_level_2_with_choices_and_play", () => { const input = ["c Graft", "Ember Moth", "Rune Scribe", "bottom", "c Ember Moth (Assembled) 4 3", "a", "a"]; const { outcome, out } = play("l2-spliced-corpse", input); expect(outcome).toBe("won"); expect(out).toContain("Choose the base"); expect(out).toContain("Hand: Ember Moth (Assembled)"); }); test("cli_reports_errors_and_quits", () => { const { outcome, out } = play("l3-simultaneous-paradox", ["c Spark", "x", "q"]); expect(outcome).toBe("quit"); expect(out).toContain('"Spark" is not in the hand'); expect(out).toContain("Commands:"); });