From d07304d6bcf16e786e7e15f98f41da9f3dc0089d Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Thu, 2 Apr 2026 22:14:07 +0200 Subject: [PATCH] Add unit tests for viewport view modes --- tests/unit/viewport-view-modes.test.ts | 71 ++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 tests/unit/viewport-view-modes.test.ts diff --git a/tests/unit/viewport-view-modes.test.ts b/tests/unit/viewport-view-modes.test.ts new file mode 100644 index 00000000..fbe7f42d --- /dev/null +++ b/tests/unit/viewport-view-modes.test.ts @@ -0,0 +1,71 @@ +import { describe, expect, it } from "vitest"; + +import { + getViewportViewModeControlHint, + getViewportViewModeDefinition, + getViewportViewModeGridPlaneLabel, + getViewportViewModeLabel +} from "../../src/viewport-three/viewport-view-modes"; + +describe("viewport view modes", () => { + it("defines the orthographic axes and grid planes explicitly", () => { + expect(getViewportViewModeDefinition("top")).toMatchObject({ + label: "Top", + cameraType: "orthographic", + cameraDirection: { + x: 0, + y: 1, + z: 0 + }, + cameraUp: { + x: 0, + y: 0, + z: -1 + }, + gridPlane: "xz", + snapAxis: "y" + }); + + expect(getViewportViewModeDefinition("front")).toMatchObject({ + label: "Front", + cameraType: "orthographic", + cameraDirection: { + x: 0, + y: 0, + z: 1 + }, + cameraUp: { + x: 0, + y: 1, + z: 0 + }, + gridPlane: "xy", + snapAxis: "z" + }); + + expect(getViewportViewModeDefinition("side")).toMatchObject({ + label: "Side", + cameraType: "orthographic", + cameraDirection: { + x: -1, + y: 0, + z: 0 + }, + cameraUp: { + x: 0, + y: 1, + z: 0 + }, + gridPlane: "yz", + snapAxis: "x" + }); + }); + + it("exposes readable labels and grid hints for the UI", () => { + expect(getViewportViewModeLabel("perspective")).toBe("Perspective"); + expect(getViewportViewModeLabel("top")).toBe("Top"); + expect(getViewportViewModeGridPlaneLabel("front")).toBe("XY"); + expect(getViewportViewModeControlHint("perspective")).toContain("orbits"); + expect(getViewportViewModeControlHint("side")).toContain("pans"); + }); +});