From 3ef18ef9229349a41cbd10dbe89099bd7df3e5dd Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 2 May 2026 04:21:48 +0200 Subject: [PATCH] Add tests for foliage mask patch application and undo/redo functionality --- tests/domain/terrain.command.test.ts | 67 ++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/tests/domain/terrain.command.test.ts b/tests/domain/terrain.command.test.ts index 705d9026..62da1db1 100644 --- a/tests/domain/terrain.command.test.ts +++ b/tests/domain/terrain.command.test.ts @@ -7,8 +7,10 @@ import { createUpsertTerrainCommand } from "../../src/commands/upsert-terrain-co import { createEmptySceneDocument } from "../../src/document/scene-document"; import { createTerrain, + getTerrainFoliageMask, getTerrainRenderDirtyBoundsSince } from "../../src/document/terrains"; +import { createFoliageLayer } from "../../src/foliage/foliage"; describe("terrain commands", () => { it("creates a terrain and restores it through undo and redo", () => { @@ -224,4 +226,69 @@ describe("terrain commands", () => { 0.5 ); }); + + it("applies foliage mask brush patches with undo and redo", () => { + const foliageLayer = createFoliageLayer({ + id: "foliage-layer-mask-command", + name: "Mask Command Layer" + }); + const terrain = createTerrain({ + id: "terrain-foliage-mask-command", + sampleCountX: 3, + sampleCountZ: 3 + }); + const store = createEditorStore({ + initialDocument: { + ...createEmptySceneDocument({ name: "Terrain Foliage Mask Scene" }), + terrains: { + [terrain.id]: terrain + }, + foliageLayers: { + [foliageLayer.id]: foliageLayer + } + } + }); + + store.executeCommand( + createApplyTerrainBrushPatchCommand({ + label: "Patch foliage mask fixture", + patch: { + terrainId: terrain.id, + heightSamples: [], + paintWeights: [], + foliageMaskValues: [ + { + layerId: foliageLayer.id, + index: 4, + before: 0, + after: 0.75 + } + ] + } + }) + ); + + expect( + getTerrainFoliageMask( + store.getState().document.terrains[terrain.id]!, + foliageLayer.id + )?.values[4] + ).toBe(0.75); + + expect(store.undo()).toBe(true); + expect( + getTerrainFoliageMask( + store.getState().document.terrains[terrain.id]!, + foliageLayer.id + ) + ).toBeNull(); + + expect(store.redo()).toBe(true); + expect( + getTerrainFoliageMask( + store.getState().document.terrains[terrain.id]!, + foliageLayer.id + )?.values[4] + ).toBe(0.75); + }); });