diff --git a/tests/domain/foliage.test.ts b/tests/domain/foliage.test.ts index 01826459..5d7d42fd 100644 --- a/tests/domain/foliage.test.ts +++ b/tests/domain/foliage.test.ts @@ -9,6 +9,7 @@ import { createSceneDocumentFromProject, createEmptyProjectDocument } from "../../src/document/scene-document"; +import { createTerrain, createTerrainFoliageMask } from "../../src/document/terrains"; import { validateSceneDocument } from "../../src/document/scene-document-validation"; import { BUNDLED_FOLIAGE_PROTOTYPES } from "../../src/foliage/bundled-foliage-manifest"; import { @@ -116,6 +117,40 @@ describe("foliage document foundations", () => { ); }); + it("validates terrain foliage mask layer references and ranges", () => { + const document = createEmptySceneDocument(); + const terrain = createTerrain({ + id: "terrain-invalid-foliage-mask", + sampleCountX: 2, + sampleCountZ: 2, + foliageMasks: { + "missing-foliage-layer": createTerrainFoliageMask({ + layerId: "missing-foliage-layer", + resolutionX: 2, + resolutionZ: 2, + values: [0, 0.25, 0.5, 1] + }) + } + }); + + document.terrains[terrain.id] = { + ...terrain, + foliageMasks: { + "missing-foliage-layer": { + ...terrain.foliageMasks["missing-foliage-layer"]!, + values: [0, 2, 0.5, 1] + } + } + }; + + expect(validateSceneDocument(document).errors).toEqual( + expect.arrayContaining([ + expect.objectContaining({ code: "missing-terrain-foliage-mask-layer" }), + expect.objectContaining({ code: "invalid-terrain-foliage-mask-value" }) + ]) + ); + }); + it("validates custom project-asset LOD references", () => { const document = createEmptySceneDocument(); const prototype = createFoliagePrototype({