You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.2 KiB
39 lines
1.2 KiB
import { describe, expect, it } from "vitest";
|
|
import { SceneStateMachine } from "@/scene/SceneStateMachine";
|
|
|
|
describe("SceneStateMachine", () => {
|
|
it("starts in idle state for every new instance", () => {
|
|
const machine = new SceneStateMachine();
|
|
const anotherMachine = new SceneStateMachine();
|
|
|
|
expect(machine.getState()).toBe("idle");
|
|
expect(anotherMachine.getState()).toBe("idle");
|
|
});
|
|
|
|
it("allows legal transitions defined by the state machine", () => {
|
|
const machine = new SceneStateMachine();
|
|
|
|
machine.transitionTo("loading");
|
|
expect(machine.getState()).toBe("loading");
|
|
|
|
machine.transitionTo("idle");
|
|
expect(machine.getState()).toBe("idle");
|
|
});
|
|
|
|
it("throws on illegal transitions and keeps current state", () => {
|
|
const machine = new SceneStateMachine();
|
|
|
|
expect(() => machine.transitionTo("idle")).toThrowError(
|
|
'Invalid scene transition: "idle" -> "idle"'
|
|
);
|
|
expect(machine.getState()).toBe("idle");
|
|
|
|
machine.transitionTo("loading");
|
|
expect(machine.getState()).toBe("loading");
|
|
|
|
expect(() => machine.transitionTo("loading")).toThrowError(
|
|
'Invalid scene transition: "loading" -> "loading"'
|
|
);
|
|
expect(machine.getState()).toBe("loading");
|
|
});
|
|
});
|
|
|