auto-git:
[change] tests/unit/viewport-canvas.test.tsx
This commit is contained in:
@@ -7,6 +7,7 @@ import {
|
|||||||
type ActiveTransformSession,
|
type ActiveTransformSession,
|
||||||
type TransformSessionState
|
type TransformSessionState
|
||||||
} from "../../src/core/transform-session";
|
} from "../../src/core/transform-session";
|
||||||
|
import type { ArmedTerrainBrushState } from "../../src/core/terrain-brush";
|
||||||
import { createBoxBrush } from "../../src/document/brushes";
|
import { createBoxBrush } from "../../src/document/brushes";
|
||||||
import { createEmptySceneDocument } from "../../src/document/scene-document";
|
import { createEmptySceneDocument } from "../../src/document/scene-document";
|
||||||
import { createRuntimeClockState } from "../../src/runtime-three/runtime-project-time";
|
import { createRuntimeClockState } from "../../src/runtime-three/runtime-project-time";
|
||||||
@@ -40,11 +41,13 @@ const { MockViewportHost, viewportHostInstances } = vi.hoisted(() => {
|
|||||||
setTransformSessionChangeHandler: ReturnType<typeof vi.fn>;
|
setTransformSessionChangeHandler: ReturnType<typeof vi.fn>;
|
||||||
setTransformCommitHandler: ReturnType<typeof vi.fn>;
|
setTransformCommitHandler: ReturnType<typeof vi.fn>;
|
||||||
setTransformCancelHandler: ReturnType<typeof vi.fn>;
|
setTransformCancelHandler: ReturnType<typeof vi.fn>;
|
||||||
|
setTerrainBrushCommitHandler: ReturnType<typeof vi.fn>;
|
||||||
setWhiteboxHoverLabelChangeHandler: ReturnType<typeof vi.fn>;
|
setWhiteboxHoverLabelChangeHandler: ReturnType<typeof vi.fn>;
|
||||||
setWhiteboxSelectionMode: ReturnType<typeof vi.fn>;
|
setWhiteboxSelectionMode: ReturnType<typeof vi.fn>;
|
||||||
setWhiteboxSnapSettings: ReturnType<typeof vi.fn>;
|
setWhiteboxSnapSettings: ReturnType<typeof vi.fn>;
|
||||||
setGridVisible: ReturnType<typeof vi.fn>;
|
setGridVisible: ReturnType<typeof vi.fn>;
|
||||||
setToolMode: ReturnType<typeof vi.fn>;
|
setToolMode: ReturnType<typeof vi.fn>;
|
||||||
|
setTerrainBrushState: ReturnType<typeof vi.fn>;
|
||||||
setCreationPreview: ReturnType<typeof vi.fn>;
|
setCreationPreview: ReturnType<typeof vi.fn>;
|
||||||
setTransformSession: ReturnType<typeof vi.fn>;
|
setTransformSession: ReturnType<typeof vi.fn>;
|
||||||
setPanelId: ReturnType<typeof vi.fn>;
|
setPanelId: ReturnType<typeof vi.fn>;
|
||||||
@@ -69,11 +72,13 @@ const { MockViewportHost, viewportHostInstances } = vi.hoisted(() => {
|
|||||||
setTransformSessionChangeHandler = vi.fn();
|
setTransformSessionChangeHandler = vi.fn();
|
||||||
setTransformCommitHandler = vi.fn();
|
setTransformCommitHandler = vi.fn();
|
||||||
setTransformCancelHandler = vi.fn();
|
setTransformCancelHandler = vi.fn();
|
||||||
|
setTerrainBrushCommitHandler = vi.fn();
|
||||||
setWhiteboxHoverLabelChangeHandler = vi.fn();
|
setWhiteboxHoverLabelChangeHandler = vi.fn();
|
||||||
setWhiteboxSelectionMode = vi.fn();
|
setWhiteboxSelectionMode = vi.fn();
|
||||||
setWhiteboxSnapSettings = vi.fn();
|
setWhiteboxSnapSettings = vi.fn();
|
||||||
setGridVisible = vi.fn();
|
setGridVisible = vi.fn();
|
||||||
setToolMode = vi.fn();
|
setToolMode = vi.fn();
|
||||||
|
setTerrainBrushState = vi.fn();
|
||||||
setCreationPreview = vi.fn();
|
setCreationPreview = vi.fn();
|
||||||
setTransformSession = vi.fn();
|
setTransformSession = vi.fn();
|
||||||
setPanelId = vi.fn();
|
setPanelId = vi.fn();
|
||||||
@@ -149,6 +154,7 @@ describe("ViewportCanvas", () => {
|
|||||||
viewportGridVisible={true}
|
viewportGridVisible={true}
|
||||||
selection={{ kind: "none" }}
|
selection={{ kind: "none" }}
|
||||||
activeSelectionId={null}
|
activeSelectionId={null}
|
||||||
|
terrainBrushState={null}
|
||||||
toolMode="create"
|
toolMode="create"
|
||||||
toolPreview={toolPreview}
|
toolPreview={toolPreview}
|
||||||
transformSession={createInactiveTransformSession()}
|
transformSession={createInactiveTransformSession()}
|
||||||
@@ -160,6 +166,7 @@ describe("ViewportCanvas", () => {
|
|||||||
focusRequestId={0}
|
focusRequestId={0}
|
||||||
focusSelection={{ kind: "none" }}
|
focusSelection={{ kind: "none" }}
|
||||||
onSelectionChange={onSelectionChange}
|
onSelectionChange={onSelectionChange}
|
||||||
|
onTerrainBrushCommit={vi.fn(() => true)}
|
||||||
onCommitCreation={onCommitCreation}
|
onCommitCreation={onCommitCreation}
|
||||||
onCameraStateChange={onCameraStateChange}
|
onCameraStateChange={onCameraStateChange}
|
||||||
onToolPreviewChange={onToolPreviewChange}
|
onToolPreviewChange={onToolPreviewChange}
|
||||||
@@ -208,6 +215,7 @@ describe("ViewportCanvas", () => {
|
|||||||
viewportGridVisible={true}
|
viewportGridVisible={true}
|
||||||
selection={{ kind: "none" }}
|
selection={{ kind: "none" }}
|
||||||
activeSelectionId={null}
|
activeSelectionId={null}
|
||||||
|
terrainBrushState={null}
|
||||||
toolMode="select"
|
toolMode="select"
|
||||||
toolPreview={{ kind: "none" }}
|
toolPreview={{ kind: "none" }}
|
||||||
transformSession={createInactiveTransformSession()}
|
transformSession={createInactiveTransformSession()}
|
||||||
@@ -219,6 +227,7 @@ describe("ViewportCanvas", () => {
|
|||||||
focusRequestId={0}
|
focusRequestId={0}
|
||||||
focusSelection={{ kind: "none" }}
|
focusSelection={{ kind: "none" }}
|
||||||
onSelectionChange={vi.fn()}
|
onSelectionChange={vi.fn()}
|
||||||
|
onTerrainBrushCommit={vi.fn(() => true)}
|
||||||
onCommitCreation={vi.fn(() => true)}
|
onCommitCreation={vi.fn(() => true)}
|
||||||
onCameraStateChange={onCameraStateChange}
|
onCameraStateChange={onCameraStateChange}
|
||||||
onToolPreviewChange={vi.fn()}
|
onToolPreviewChange={vi.fn()}
|
||||||
@@ -260,6 +269,7 @@ describe("ViewportCanvas", () => {
|
|||||||
viewportGridVisible={true}
|
viewportGridVisible={true}
|
||||||
selection={{ kind: "none" }}
|
selection={{ kind: "none" }}
|
||||||
activeSelectionId={null}
|
activeSelectionId={null}
|
||||||
|
terrainBrushState={null}
|
||||||
toolMode="select"
|
toolMode="select"
|
||||||
toolPreview={{ kind: "none" }}
|
toolPreview={{ kind: "none" }}
|
||||||
transformSession={createInactiveTransformSession()}
|
transformSession={createInactiveTransformSession()}
|
||||||
@@ -271,6 +281,7 @@ describe("ViewportCanvas", () => {
|
|||||||
focusRequestId={0}
|
focusRequestId={0}
|
||||||
focusSelection={{ kind: "none" }}
|
focusSelection={{ kind: "none" }}
|
||||||
onSelectionChange={vi.fn()}
|
onSelectionChange={vi.fn()}
|
||||||
|
onTerrainBrushCommit={vi.fn(() => true)}
|
||||||
onCommitCreation={vi.fn(() => true)}
|
onCommitCreation={vi.fn(() => true)}
|
||||||
onCameraStateChange={vi.fn()}
|
onCameraStateChange={vi.fn()}
|
||||||
onToolPreviewChange={vi.fn()}
|
onToolPreviewChange={vi.fn()}
|
||||||
@@ -312,6 +323,7 @@ describe("ViewportCanvas", () => {
|
|||||||
viewportGridVisible={true}
|
viewportGridVisible={true}
|
||||||
selection={{ kind: "brushes", ids: [brush.id] }}
|
selection={{ kind: "brushes", ids: [brush.id] }}
|
||||||
activeSelectionId={brush.id}
|
activeSelectionId={brush.id}
|
||||||
|
terrainBrushState={null}
|
||||||
toolMode="select"
|
toolMode="select"
|
||||||
toolPreview={{ kind: "none" }}
|
toolPreview={{ kind: "none" }}
|
||||||
transformSession={createTransformSession({
|
transformSession={createTransformSession({
|
||||||
@@ -339,6 +351,7 @@ describe("ViewportCanvas", () => {
|
|||||||
focusRequestId={0}
|
focusRequestId={0}
|
||||||
focusSelection={{ kind: "none" }}
|
focusSelection={{ kind: "none" }}
|
||||||
onSelectionChange={vi.fn()}
|
onSelectionChange={vi.fn()}
|
||||||
|
onTerrainBrushCommit={vi.fn(() => true)}
|
||||||
onCommitCreation={vi.fn(() => true)}
|
onCommitCreation={vi.fn(() => true)}
|
||||||
onCameraStateChange={vi.fn()}
|
onCameraStateChange={vi.fn()}
|
||||||
onToolPreviewChange={vi.fn()}
|
onToolPreviewChange={vi.fn()}
|
||||||
@@ -352,4 +365,67 @@ describe("ViewportCanvas", () => {
|
|||||||
"translate · surface snap · Local X"
|
"translate · surface snap · Local X"
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("shows the terrain brush overlay and pushes brush state into the viewport host", async () => {
|
||||||
|
const sceneDocument = createEmptySceneDocument();
|
||||||
|
const terrainBrushState: ArmedTerrainBrushState = {
|
||||||
|
terrainId: "terrain-selected",
|
||||||
|
tool: "smooth",
|
||||||
|
radius: 2.5,
|
||||||
|
strength: 0.4,
|
||||||
|
falloff: 0.7
|
||||||
|
};
|
||||||
|
|
||||||
|
render(
|
||||||
|
<ViewportCanvas
|
||||||
|
panelId="topLeft"
|
||||||
|
world={sceneDocument.world}
|
||||||
|
sceneDocument={sceneDocument}
|
||||||
|
editorSimulationScene={null}
|
||||||
|
editorSimulationClock={null}
|
||||||
|
projectAssets={sceneDocument.assets}
|
||||||
|
loadedModelAssets={{}}
|
||||||
|
loadedImageAssets={{}}
|
||||||
|
whiteboxSelectionMode="object"
|
||||||
|
whiteboxSnapEnabled
|
||||||
|
whiteboxSnapStep={1}
|
||||||
|
viewportGridVisible={true}
|
||||||
|
selection={{ kind: "terrains", ids: [terrainBrushState.terrainId] }}
|
||||||
|
activeSelectionId={terrainBrushState.terrainId}
|
||||||
|
terrainBrushState={terrainBrushState}
|
||||||
|
toolMode="select"
|
||||||
|
toolPreview={{ kind: "none" }}
|
||||||
|
transformSession={createInactiveTransformSession()}
|
||||||
|
cameraState={createDefaultViewportPanelCameraState()}
|
||||||
|
viewMode="perspective"
|
||||||
|
displayMode="normal"
|
||||||
|
layoutMode="single"
|
||||||
|
isActivePanel
|
||||||
|
focusRequestId={0}
|
||||||
|
focusSelection={{ kind: "none" }}
|
||||||
|
onSelectionChange={vi.fn()}
|
||||||
|
onTerrainBrushCommit={vi.fn(() => true)}
|
||||||
|
onCommitCreation={vi.fn(() => true)}
|
||||||
|
onCameraStateChange={vi.fn()}
|
||||||
|
onToolPreviewChange={vi.fn()}
|
||||||
|
onTransformSessionChange={vi.fn()}
|
||||||
|
onTransformCommit={vi.fn()}
|
||||||
|
onTransformCancel={vi.fn()}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
await waitFor(() => {
|
||||||
|
expect(viewportHostInstances).toHaveLength(1);
|
||||||
|
expect(viewportHostInstances[0].setTerrainBrushState).toHaveBeenCalledWith(
|
||||||
|
terrainBrushState
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
viewportHostInstances[0].setTerrainBrushCommitHandler
|
||||||
|
).toHaveBeenCalledTimes(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(
|
||||||
|
screen.getByTestId("viewport-terrain-brush-preview-topLeft")
|
||||||
|
).toHaveTextContent("terrain · smooth");
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user