mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
Test appstate delta stability, remove console.log
This commit is contained in:
parent
1ed4590c69
commit
9cce9b572e
3 changed files with 144 additions and 7 deletions
|
@ -807,9 +807,6 @@ const ExcalidrawWrapper = () => {
|
||||||
<Excalidraw
|
<Excalidraw
|
||||||
excalidrawAPI={excalidrawRefCallback}
|
excalidrawAPI={excalidrawRefCallback}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
onIncrement={(increment) => {
|
|
||||||
console.log(increment);
|
|
||||||
}}
|
|
||||||
initialData={initialStatePromiseRef.current.promise}
|
initialData={initialStatePromiseRef.current.promise}
|
||||||
isCollaborating={isCollaborating}
|
isCollaborating={isCollaborating}
|
||||||
onPointerUpdate={collabAPI?.onPointerUpdate}
|
onPointerUpdate={collabAPI?.onPointerUpdate}
|
||||||
|
|
143
packages/element/tests/delta.test.tsx
Normal file
143
packages/element/tests/delta.test.tsx
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
import type { ObservedAppState } from "@excalidraw/excalidraw/types";
|
||||||
|
import type { LinearElementEditor } from "@excalidraw/element/linearElementEditor";
|
||||||
|
|
||||||
|
import { AppStateDelta } from "../src/delta";
|
||||||
|
|
||||||
|
describe("AppStateDelta", () => {
|
||||||
|
describe("ensure stable delta properties order", () => {
|
||||||
|
it("should maintain stable order for root properties", () => {
|
||||||
|
const name = "untitled scene";
|
||||||
|
const selectedLinearElementId = "id1" as LinearElementEditor["elementId"];
|
||||||
|
|
||||||
|
const commonAppState = {
|
||||||
|
viewBackgroundColor: "#ffffff",
|
||||||
|
selectedElementIds: {},
|
||||||
|
selectedGroupIds: {},
|
||||||
|
editingGroupId: null,
|
||||||
|
croppingElementId: null,
|
||||||
|
editingLinearElementId: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
const prevAppState1: ObservedAppState = {
|
||||||
|
...commonAppState,
|
||||||
|
name: "",
|
||||||
|
selectedLinearElementId: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
const nextAppState1: ObservedAppState = {
|
||||||
|
...commonAppState,
|
||||||
|
name,
|
||||||
|
selectedLinearElementId,
|
||||||
|
};
|
||||||
|
|
||||||
|
const prevAppState2: ObservedAppState = {
|
||||||
|
selectedLinearElementId: null,
|
||||||
|
name: "",
|
||||||
|
...commonAppState,
|
||||||
|
};
|
||||||
|
|
||||||
|
const nextAppState2: ObservedAppState = {
|
||||||
|
selectedLinearElementId,
|
||||||
|
name,
|
||||||
|
...commonAppState,
|
||||||
|
};
|
||||||
|
|
||||||
|
const delta1 = AppStateDelta.calculate(prevAppState1, nextAppState1);
|
||||||
|
const delta2 = AppStateDelta.calculate(prevAppState2, nextAppState2);
|
||||||
|
|
||||||
|
expect(JSON.stringify(delta1)).toBe(JSON.stringify(delta2));
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should maintain stable order for selectedElementIds", () => {
|
||||||
|
const commonAppState = {
|
||||||
|
name: "",
|
||||||
|
viewBackgroundColor: "#ffffff",
|
||||||
|
selectedGroupIds: {},
|
||||||
|
editingGroupId: null,
|
||||||
|
croppingElementId: null,
|
||||||
|
selectedLinearElementId: null,
|
||||||
|
editingLinearElementId: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
const prevAppState1: ObservedAppState = {
|
||||||
|
...commonAppState,
|
||||||
|
selectedElementIds: { id5: true, id2: true, id4: true },
|
||||||
|
};
|
||||||
|
|
||||||
|
const nextAppState1: ObservedAppState = {
|
||||||
|
...commonAppState,
|
||||||
|
selectedElementIds: {
|
||||||
|
id1: true,
|
||||||
|
id2: true,
|
||||||
|
id3: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const prevAppState2: ObservedAppState = {
|
||||||
|
...commonAppState,
|
||||||
|
selectedElementIds: { id4: true, id2: true, id5: true },
|
||||||
|
};
|
||||||
|
|
||||||
|
const nextAppState2: ObservedAppState = {
|
||||||
|
...commonAppState,
|
||||||
|
selectedElementIds: {
|
||||||
|
id3: true,
|
||||||
|
id2: true,
|
||||||
|
id1: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const delta1 = AppStateDelta.calculate(prevAppState1, nextAppState1);
|
||||||
|
const delta2 = AppStateDelta.calculate(prevAppState2, nextAppState2);
|
||||||
|
|
||||||
|
expect(JSON.stringify(delta1)).toBe(JSON.stringify(delta2));
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should maintain stable order for selectedGroupIds", () => {
|
||||||
|
const commonAppState = {
|
||||||
|
name: "",
|
||||||
|
viewBackgroundColor: "#ffffff",
|
||||||
|
selectedElementIds: {},
|
||||||
|
editingGroupId: null,
|
||||||
|
croppingElementId: null,
|
||||||
|
selectedLinearElementId: null,
|
||||||
|
editingLinearElementId: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
const prevAppState1: ObservedAppState = {
|
||||||
|
...commonAppState,
|
||||||
|
selectedGroupIds: { id5: false, id2: true, id4: true, id0: true },
|
||||||
|
};
|
||||||
|
|
||||||
|
const nextAppState1: ObservedAppState = {
|
||||||
|
...commonAppState,
|
||||||
|
selectedGroupIds: {
|
||||||
|
id0: true,
|
||||||
|
id1: true,
|
||||||
|
id2: false,
|
||||||
|
id3: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const prevAppState2: ObservedAppState = {
|
||||||
|
...commonAppState,
|
||||||
|
selectedGroupIds: { id0: true, id4: true, id2: true, id5: false },
|
||||||
|
};
|
||||||
|
|
||||||
|
const nextAppState2: ObservedAppState = {
|
||||||
|
...commonAppState,
|
||||||
|
selectedGroupIds: {
|
||||||
|
id3: true,
|
||||||
|
id2: false,
|
||||||
|
id1: true,
|
||||||
|
id0: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const delta1 = AppStateDelta.calculate(prevAppState1, nextAppState1);
|
||||||
|
const delta2 = AppStateDelta.calculate(prevAppState2, nextAppState2);
|
||||||
|
|
||||||
|
expect(JSON.stringify(delta1)).toBe(JSON.stringify(delta2));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -304,10 +304,7 @@ import { isNonDeletedElement } from "@excalidraw/element";
|
||||||
|
|
||||||
import Scene from "@excalidraw/element/Scene";
|
import Scene from "@excalidraw/element/Scene";
|
||||||
|
|
||||||
import {
|
import { Store, CaptureUpdateAction } from "@excalidraw/element/store";
|
||||||
Store,
|
|
||||||
CaptureUpdateAction,
|
|
||||||
} from "@excalidraw/element/store";
|
|
||||||
|
|
||||||
import type { ElementUpdate } from "@excalidraw/element/mutateElement";
|
import type { ElementUpdate } from "@excalidraw/element/mutateElement";
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue