Test: Ensure foliage layer deletion removes associated terrain masks and restores them on undo
This commit is contained in:
@@ -5,6 +5,10 @@ import { createCreateFoliageLayerCommand } from "../../src/commands/create-folia
|
|||||||
import { createDeleteFoliageLayerCommand } from "../../src/commands/delete-foliage-layer-command";
|
import { createDeleteFoliageLayerCommand } from "../../src/commands/delete-foliage-layer-command";
|
||||||
import { createUpdateFoliageLayerCommand } from "../../src/commands/update-foliage-layer-command";
|
import { createUpdateFoliageLayerCommand } from "../../src/commands/update-foliage-layer-command";
|
||||||
import { createEmptySceneDocument } from "../../src/document/scene-document";
|
import { createEmptySceneDocument } from "../../src/document/scene-document";
|
||||||
|
import {
|
||||||
|
createTerrain,
|
||||||
|
createTerrainFoliageMask
|
||||||
|
} from "../../src/document/terrains";
|
||||||
import { BUNDLED_FOLIAGE_PROTOTYPES } from "../../src/foliage/bundled-foliage-manifest";
|
import { BUNDLED_FOLIAGE_PROTOTYPES } from "../../src/foliage/bundled-foliage-manifest";
|
||||||
import { createFoliageLayer } from "../../src/foliage/foliage";
|
import { createFoliageLayer } from "../../src/foliage/foliage";
|
||||||
|
|
||||||
@@ -119,4 +123,49 @@ describe("foliage layer commands", () => {
|
|||||||
expect(store.redo()).toBe(true);
|
expect(store.redo()).toBe(true);
|
||||||
expect(store.getState().document.foliageLayers[layer.id]).toBeUndefined();
|
expect(store.getState().document.foliageLayers[layer.id]).toBeUndefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("removes terrain foliage masks for the deleted layer and restores them on undo", () => {
|
||||||
|
const layer = createFoliageLayer({
|
||||||
|
id: "foliage-layer-delete-mask-command",
|
||||||
|
name: "Delete Mask Command Layer",
|
||||||
|
prototypeIds: [BUNDLED_FOLIAGE_PROTOTYPES[0]!.id]
|
||||||
|
});
|
||||||
|
const terrain = createTerrain({
|
||||||
|
id: "terrain-delete-foliage-mask-command",
|
||||||
|
sampleCountX: 2,
|
||||||
|
sampleCountZ: 2,
|
||||||
|
foliageMasks: {
|
||||||
|
[layer.id]: createTerrainFoliageMask({
|
||||||
|
layerId: layer.id,
|
||||||
|
resolutionX: 2,
|
||||||
|
resolutionZ: 2,
|
||||||
|
values: [0, 0.5, 0, 1]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const store = createEditorStore({
|
||||||
|
initialDocument: {
|
||||||
|
...createEmptySceneDocument({ name: "Foliage Delete Mask Scene" }),
|
||||||
|
terrains: {
|
||||||
|
[terrain.id]: terrain
|
||||||
|
},
|
||||||
|
foliageLayers: {
|
||||||
|
[layer.id]: layer
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
store.executeCommand(createDeleteFoliageLayerCommand(layer.id));
|
||||||
|
|
||||||
|
expect(store.getState().document.foliageLayers[layer.id]).toBeUndefined();
|
||||||
|
expect(
|
||||||
|
store.getState().document.terrains[terrain.id]?.foliageMasks[layer.id]
|
||||||
|
).toBeUndefined();
|
||||||
|
|
||||||
|
expect(store.undo()).toBe(true);
|
||||||
|
expect(store.getState().document.foliageLayers[layer.id]).toEqual(layer);
|
||||||
|
expect(
|
||||||
|
store.getState().document.terrains[terrain.id]?.foliageMasks[layer.id]
|
||||||
|
).toEqual(terrain.foliageMasks[layer.id]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user