import { describe, expect, it } from "vitest"; import { encounterWorldIsReady, encounterWorldKey, rendererCanvasKey, sceneFrameLoop, } from "./sceneLifecycle"; describe("R3F scene lifecycle", () => { it("keeps the WebGL renderer stable while encounter worlds change", () => { expect(rendererCanvasKey(0)).toBe(rendererCanvasKey(0)); expect(rendererCanvasKey(0)).not.toBe(rendererCanvasKey(1)); expect(encounterWorldKey("wailing-caverns", 1)) .not.toBe(encounterWorldKey("wailing-caverns", 2)); }); it("only accepts collision readiness from the current encounter world", () => { expect(encounterWorldIsReady(null, 4)).toBe(false); expect(encounterWorldIsReady(4, 4)).toBe(true); expect(encounterWorldIsReady(4, 5)).toBe(false); }); it("renders local paused worlds on demand without stalling loading or online worlds", () => { const readyWorld = { worldReady: true, graphicsRecovering: false, sharedOnline: false, paused: false, mapOpen: false, companionOpen: false, documentVisible: true, frameRateLimit: 60 as const, }; expect(sceneFrameLoop({ ...readyWorld, paused: true })).toBe("demand"); expect(sceneFrameLoop({ ...readyWorld, mapOpen: true })).toBe("demand"); expect(sceneFrameLoop({ ...readyWorld, companionOpen: true })).toBe("demand"); expect(sceneFrameLoop({ ...readyWorld, paused: true, sharedOnline: true })).toBe("never"); expect(sceneFrameLoop({ ...readyWorld, paused: true, worldReady: false })).toBe("never"); expect(sceneFrameLoop({ ...readyWorld, paused: true, graphicsRecovering: true })).toBe("never"); expect(sceneFrameLoop(readyWorld)).toBe("never"); expect(sceneFrameLoop({ ...readyWorld, frameRateLimit: "display" })).toBe("always"); expect(sceneFrameLoop({ ...readyWorld, documentVisible: false })).toBe("demand"); expect(sceneFrameLoop({ ...readyWorld, documentVisible: false, sharedOnline: true })).toBe("never"); }); });