From 89a9c8ddcab3e895f1118956d6f74f811a1dc32c Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 2 May 2026 11:34:52 +0200 Subject: [PATCH] Add validation test for invalid terrain foliage blocker masks --- .../domain/scene-document-validation.test.ts | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/domain/scene-document-validation.test.ts b/tests/domain/scene-document-validation.test.ts index 1b8a0739..7ffb7b41 100644 --- a/tests/domain/scene-document-validation.test.ts +++ b/tests/domain/scene-document-validation.test.ts @@ -79,6 +79,43 @@ describe("validateSceneDocument", () => { expect(validation.warnings).toEqual([]); }); + it("detects invalid terrain foliage blocker masks", () => { + const terrain = createTerrain({ + id: "terrain-invalid-blocker-mask", + sampleCountX: 2, + sampleCountZ: 2 + }); + const document = createEmptySceneDocument({ + name: "Invalid Terrain Blocker Mask" + }); + + terrain.foliageBlockerMask = { + resolutionX: 3, + resolutionZ: 2, + values: [0, 1, Number.NaN] + } as any; + document.terrains[terrain.id] = terrain; + + const validation = validateSceneDocument(document); + + expect(validation.errors).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + code: "invalid-terrain-foliage-blocker-mask-resolution-x", + path: `terrains.${terrain.id}.foliageBlockerMask.resolutionX` + }), + expect.objectContaining({ + code: "invalid-terrain-foliage-blocker-mask-value-count", + path: `terrains.${terrain.id}.foliageBlockerMask.values` + }), + expect.objectContaining({ + code: "invalid-terrain-foliage-blocker-mask-value", + path: `terrains.${terrain.id}.foliageBlockerMask.values.2` + }) + ]) + ); + }); + it("validates project-global actor schedule targets against all project scenes", () => { const sceneA = createEmptyProjectScene({ id: "scene-a",