Files
webeditor3d/tests/unit/terrain-grid-resize-controls.test.ts
Victor Giers 7e0e78b511 auto-git:
[add] tests/unit/terrain-grid-resize-controls.test.ts
2026-05-13 14:20:46 +02:00

69 lines
2.3 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { createTerrain } from "../../src/document/terrains";
import {
resizeTerrainGridFromBorderDrag,
resolveTerrainGridResizeSideFromLocalPosition
} from "../../src/viewport-three/terrain-grid-resize-controls";
describe("terrain grid resize viewport controls", () => {
it("resolves cardinal sides from local border hover positions", () => {
const terrain = createTerrain({
id: "terrain-grid-hover-sides",
sampleCountX: 5,
sampleCountZ: 5,
cellSize: 1
});
expect(resolveTerrainGridResizeSideFromLocalPosition(terrain, 0.1, 2, 0.25)).toBe(
"west"
);
expect(resolveTerrainGridResizeSideFromLocalPosition(terrain, 3.9, 2, 0.25)).toBe(
"east"
);
expect(resolveTerrainGridResizeSideFromLocalPosition(terrain, 2, 0.1, 0.25)).toBe(
"south"
);
expect(resolveTerrainGridResizeSideFromLocalPosition(terrain, 2, 3.9, 0.25)).toBe(
"north"
);
expect(resolveTerrainGridResizeSideFromLocalPosition(terrain, 2, 2, 0.25)).toBeNull();
});
it("drags east and north borders by rounded cell deltas", () => {
const terrain = createTerrain({
id: "terrain-grid-drag-east-north",
sampleCountX: 5,
sampleCountZ: 5,
cellSize: 1
});
const eastResized = resizeTerrainGridFromBorderDrag(terrain, "east", 1.6);
const northResized = resizeTerrainGridFromBorderDrag(terrain, "north", -1.2);
expect(eastResized.sampleCountX).toBe(7);
expect(eastResized.sampleCountZ).toBe(5);
expect(eastResized.position).toEqual(terrain.position);
expect(northResized.sampleCountX).toBe(5);
expect(northResized.sampleCountZ).toBe(4);
expect(northResized.position).toEqual(terrain.position);
});
it("drags west and south borders by moving the terrain origin", () => {
const terrain = createTerrain({
id: "terrain-grid-drag-west-south",
sampleCountX: 5,
sampleCountZ: 5,
cellSize: 1
});
const westResized = resizeTerrainGridFromBorderDrag(terrain, "west", 2);
const southResized = resizeTerrainGridFromBorderDrag(terrain, "south", -2);
expect(westResized.sampleCountX).toBe(7);
expect(westResized.position.x).toBe(terrain.position.x - 2);
expect(southResized.sampleCountZ).toBe(3);
expect(southResized.position.z).toBe(terrain.position.z + 2);
});
});