From d17c29358b89d8a975b2c3a801e36c29a5c337df Mon Sep 17 00:00:00 2001 From: Marcel Mraz Date: Wed, 16 Apr 2025 16:26:40 +0200 Subject: [PATCH] Fixing most tests for now --- packages/element/src/Scene.ts | 38 +++++--- packages/element/src/fractionalIndex.ts | 7 +- packages/element/tests/duplicate.test.tsx | 4 +- packages/element/tests/sortElements.test.ts | 4 +- packages/excalidraw/change.ts | 14 ++- .../__snapshots__/contextmenu.test.tsx.snap | 96 +++++++++---------- .../__snapshots__/dragCreate.test.tsx.snap | 4 +- .../tests/__snapshots__/history.test.tsx.snap | 6 +- .../tests/__snapshots__/move.test.tsx.snap | 6 +- .../regressionTests.test.tsx.snap | 8 +- .../__snapshots__/selection.test.tsx.snap | 4 +- packages/excalidraw/tests/dragCreate.test.tsx | 4 +- .../tests/linearElementEditor.test.tsx | 2 +- packages/excalidraw/tests/move.test.tsx | 2 - .../tests/multiPointCreate.test.tsx | 4 +- packages/excalidraw/tests/selection.test.tsx | 4 +- 16 files changed, 111 insertions(+), 96 deletions(-) diff --git a/packages/element/src/Scene.ts b/packages/element/src/Scene.ts index 73fba0b39..b6fdb787c 100644 --- a/packages/element/src/Scene.ts +++ b/packages/element/src/Scene.ts @@ -12,6 +12,7 @@ import { isFrameLikeElement } from "@excalidraw/element/typeChecks"; import { getElementsInGroup } from "@excalidraw/element/groups"; import { + orderByFractionalIndex, syncInvalidIndices, syncMovedIndices, validateFractionalIndices, @@ -34,7 +35,6 @@ import type { NonDeletedSceneElementsMap, OrderedExcalidrawElement, Ordered, - ElementsMap, } from "@excalidraw/element/types"; import type { @@ -167,9 +167,9 @@ class Scene { return this.frames; } - constructor(elementsMap: ElementsMap | null = null) { - if (elementsMap) { - this.replaceAllElements(elementsMap); + constructor(elements: ElementsMapOrArray | null = null) { + if (elements) { + this.replaceAllElements(elements); } } @@ -267,16 +267,19 @@ class Scene { } replaceAllElements(nextElements: ElementsMapOrArray) { - const _nextElements = - // ts doesn't like `Array.isArray` of `instanceof Map` - nextElements instanceof Array - ? nextElements - : Array.from(nextElements.values()); + // ts doesn't like `Array.isArray` of `instanceof Map` + if (!(nextElements instanceof Array)) { + // need to order by fractional indices to get the correct order + nextElements = orderByFractionalIndex( + Array.from(nextElements.values()) as OrderedExcalidrawElement[], + ); + } + const nextFrameLikes: ExcalidrawFrameLikeElement[] = []; - validateIndicesThrottled(_nextElements); + validateIndicesThrottled(nextElements); - this.elements = syncInvalidIndices(_nextElements); + this.elements = syncInvalidIndices(nextElements); this.elementsMap.clear(); this.elements.forEach((element) => { if (isFrameLikeElement(element)) { @@ -439,7 +442,18 @@ class Scene { ) { const elementsMap = this.getNonDeletedElementsMap(); - mutateElement(element, elementsMap, updates, options); + const { version: prevVersion } = element; + const { version: nextVersion } = mutateElement( + element, + elementsMap, + updates, + options, + ); + + // skip triggerUpdate if the element version hasn't changed + if (prevVersion === nextVersion) { + return element; + } if (options.informMutation) { this.triggerUpdate(); diff --git a/packages/element/src/fractionalIndex.ts b/packages/element/src/fractionalIndex.ts index ccf35d627..84505365e 100644 --- a/packages/element/src/fractionalIndex.ts +++ b/packages/element/src/fractionalIndex.ts @@ -156,6 +156,7 @@ export const syncMovedIndices = ( movedElements: ElementsMap, ): OrderedExcalidrawElement[] => { try { + const elementsMap = arrayToMap(elements); const indicesGroups = getMovedIndicesGroups(elements, movedElements); // try generatating indices, throws on invalid movedElements @@ -177,7 +178,7 @@ export const syncMovedIndices = ( // split mutation so we don't end up in an incosistent state for (const [element, update] of elementsUpdates) { - mutateElement(element, arrayToMap(elements), update); + mutateElement(element, elementsMap, update); } } catch (e) { // fallback to default sync @@ -195,10 +196,12 @@ export const syncMovedIndices = ( export const syncInvalidIndices = ( elements: readonly ExcalidrawElement[], ): OrderedExcalidrawElement[] => { + const elementsMap = arrayToMap(elements); const indicesGroups = getInvalidIndicesGroups(elements); const elementsUpdates = generateIndices(elements, indicesGroups); + for (const [element, update] of elementsUpdates) { - mutateElement(element, arrayToMap(elements), update); + mutateElement(element, elementsMap, update); } return elements as OrderedExcalidrawElement[]; diff --git a/packages/element/tests/duplicate.test.tsx b/packages/element/tests/duplicate.test.tsx index 2be501043..d38135607 100644 --- a/packages/element/tests/duplicate.test.tsx +++ b/packages/element/tests/duplicate.test.tsx @@ -8,7 +8,7 @@ import { isPrimitive, } from "@excalidraw/common"; -import { Excalidraw } from "@excalidraw/excalidraw"; +import { Excalidraw, mutateElement } from "@excalidraw/excalidraw"; import { actionDuplicateSelection } from "@excalidraw/excalidraw/actions"; @@ -62,7 +62,7 @@ describe("duplicating single elements", () => { // @ts-ignore element.__proto__ = { hello: "world" }; - h.app.scene.mutateElement(element, { + mutateElement(element, new Map(), { points: [pointFrom(1, 2), pointFrom(3, 4)], }); diff --git a/packages/element/tests/sortElements.test.ts b/packages/element/tests/sortElements.test.ts index 486d110db..1735a6bec 100644 --- a/packages/element/tests/sortElements.test.ts +++ b/packages/element/tests/sortElements.test.ts @@ -1,5 +1,7 @@ import { API } from "@excalidraw/excalidraw/tests/helpers/api"; +import { mutateElement } from "@excalidraw/element/mutateElement"; + import { normalizeElementOrder } from "../src/sortElements"; import type { ExcalidrawElement } from "../src/types"; @@ -35,7 +37,7 @@ describe("normalizeElementsOrder", () => { boundElements: [], }); - h.app.scene.mutateElement(container, { + mutateElement(container, new Map(), { boundElements: [{ type: "text", id: boundText.id }], }); diff --git a/packages/excalidraw/change.ts b/packages/excalidraw/change.ts index 20610661c..e7ba76f60 100644 --- a/packages/excalidraw/change.ts +++ b/packages/excalidraw/change.ts @@ -1136,14 +1136,6 @@ export class ElementsChange implements Change { } try { - // we don't have an up-to-date scene, as we can be just in the middle of applying history entry - // we also don't have a scene on the server - // so we are creating a temp scene just to query and mutate elements - const tempScene = new Scene(nextElements); - - // TODO: #7348 refactor away mutations below, so that we couldn't end up in an incosistent state - ElementsChange.redrawTextBoundingBoxes(tempScene, changedElements); - // the following reorder performs also mutations, but only on new instances of changed elements // (unless something goes really bad and it fallbacks to fixing all invalid indices) nextElements = ElementsChange.reorderElements( @@ -1152,6 +1144,12 @@ export class ElementsChange implements Change { flags, ); + // we don't have an up-to-date scene, as we can be just in the middle of applying history entry + // we also don't have a scene on the server + // so we are creating a temp scene just to query and mutate elements + const tempScene = new Scene(nextElements); + + ElementsChange.redrawTextBoundingBoxes(tempScene, changedElements); // Need ordered nextElements to avoid z-index binding issues ElementsChange.redrawBoundArrows(tempScene, changedElements); } catch (e) { diff --git a/packages/excalidraw/tests/__snapshots__/contextmenu.test.tsx.snap b/packages/excalidraw/tests/__snapshots__/contextmenu.test.tsx.snap index 349dd9e64..9d41c1134 100644 --- a/packages/excalidraw/tests/__snapshots__/contextmenu.test.tsx.snap +++ b/packages/excalidraw/tests/__snapshots__/contextmenu.test.tsx.snap @@ -1221,14 +1221,14 @@ exports[`contextMenu element > selecting 'Add to library' in context menu adds e "roundness": { "type": 3, }, - "seed": 449462985, + "seed": 453191, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 3, - "versionNonce": 1150084233, + "versionNonce": 1014066025, "width": 20, "x": -10, "y": 0, @@ -1439,14 +1439,14 @@ exports[`contextMenu element > selecting 'Bring forward' in context menu brings "roundness": { "type": 3, }, - "seed": 1014066025, + "seed": 400692809, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 3, - "versionNonce": 1604849351, + "versionNonce": 23633383, "width": 20, "x": 20, "y": 30, @@ -1473,14 +1473,14 @@ exports[`contextMenu element > selecting 'Bring forward' in context menu brings "roundness": { "type": 3, }, - "seed": 449462985, + "seed": 453191, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 4, - "versionNonce": 23633383, + "versionNonce": 915032327, "width": 20, "x": -10, "y": 0, @@ -1774,14 +1774,14 @@ exports[`contextMenu element > selecting 'Bring to front' in context menu brings "roundness": { "type": 3, }, - "seed": 1014066025, + "seed": 400692809, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 3, - "versionNonce": 1604849351, + "versionNonce": 23633383, "width": 20, "x": 20, "y": 30, @@ -1808,14 +1808,14 @@ exports[`contextMenu element > selecting 'Bring to front' in context menu brings "roundness": { "type": 3, }, - "seed": 449462985, + "seed": 453191, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 4, - "versionNonce": 23633383, + "versionNonce": 915032327, "width": 20, "x": -10, "y": 0, @@ -2111,14 +2111,14 @@ exports[`contextMenu element > selecting 'Copy styles' in context menu copies st "roundness": { "type": 3, }, - "seed": 449462985, + "seed": 453191, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 3, - "versionNonce": 1150084233, + "versionNonce": 1014066025, "width": 20, "x": -10, "y": 0, @@ -2327,14 +2327,14 @@ exports[`contextMenu element > selecting 'Delete' in context menu deletes elemen "roundness": { "type": 3, }, - "seed": 449462985, + "seed": 453191, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 4, - "versionNonce": 1014066025, + "versionNonce": 400692809, "width": 20, "x": -10, "y": 0, @@ -2573,14 +2573,14 @@ exports[`contextMenu element > selecting 'Duplicate' in context menu duplicates "roundness": { "type": 3, }, - "seed": 449462985, + "seed": 453191, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 3, - "versionNonce": 1150084233, + "versionNonce": 1014066025, "width": 20, "x": -10, "y": 0, @@ -2607,14 +2607,14 @@ exports[`contextMenu element > selecting 'Duplicate' in context menu duplicates "roundness": { "type": 3, }, - "seed": 1014066025, + "seed": 400692809, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 5, - "versionNonce": 400692809, + "versionNonce": 1505387817, "width": 20, "x": 0, "y": 10, @@ -2885,14 +2885,14 @@ exports[`contextMenu element > selecting 'Group selection' in context menu group "roundness": { "type": 3, }, - "seed": 449462985, + "seed": 453191, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 4, - "versionNonce": 493213705, + "versionNonce": 81784553, "width": 20, "x": -10, "y": 0, @@ -2921,14 +2921,14 @@ exports[`contextMenu element > selecting 'Group selection' in context menu group "roundness": { "type": 3, }, - "seed": 1014066025, + "seed": 400692809, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 4, - "versionNonce": 915032327, + "versionNonce": 747212839, "width": 20, "x": 20, "y": 30, @@ -3253,14 +3253,14 @@ exports[`contextMenu element > selecting 'Paste styles' in context menu pastes s "roundness": { "type": 3, }, - "seed": 449462985, + "seed": 453191, "strokeColor": "#e03131", "strokeStyle": "dotted", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 4, - "versionNonce": 941653321, + "versionNonce": 1402203177, "width": 20, "x": -10, "y": 0, @@ -3287,14 +3287,14 @@ exports[`contextMenu element > selecting 'Paste styles' in context menu pastes s "roundness": { "type": 3, }, - "seed": 289600103, + "seed": 1898319239, "strokeColor": "#e03131", "strokeStyle": "dotted", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 9, - "versionNonce": 640725609, + "versionNonce": 941653321, "width": 20, "x": 20, "y": 30, @@ -3730,14 +3730,14 @@ exports[`contextMenu element > selecting 'Send backward' in context menu sends e "roundness": { "type": 3, }, - "seed": 1014066025, + "seed": 400692809, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 4, - "versionNonce": 23633383, + "versionNonce": 915032327, "width": 20, "x": 20, "y": 30, @@ -3764,14 +3764,14 @@ exports[`contextMenu element > selecting 'Send backward' in context menu sends e "roundness": { "type": 3, }, - "seed": 449462985, + "seed": 453191, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 3, - "versionNonce": 1150084233, + "versionNonce": 1014066025, "width": 20, "x": -10, "y": 0, @@ -4057,14 +4057,14 @@ exports[`contextMenu element > selecting 'Send to back' in context menu sends el "roundness": { "type": 3, }, - "seed": 1014066025, + "seed": 400692809, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 4, - "versionNonce": 23633383, + "versionNonce": 915032327, "width": 20, "x": 20, "y": 30, @@ -4091,14 +4091,14 @@ exports[`contextMenu element > selecting 'Send to back' in context menu sends el "roundness": { "type": 3, }, - "seed": 449462985, + "seed": 453191, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 3, - "versionNonce": 1150084233, + "versionNonce": 1014066025, "width": 20, "x": -10, "y": 0, @@ -4387,14 +4387,14 @@ exports[`contextMenu element > selecting 'Ungroup selection' in context menu ung "roundness": { "type": 3, }, - "seed": 449462985, + "seed": 453191, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 5, - "versionNonce": 1723083209, + "versionNonce": 1006504105, "width": 20, "x": -10, "y": 0, @@ -4421,14 +4421,14 @@ exports[`contextMenu element > selecting 'Ungroup selection' in context menu ung "roundness": { "type": 3, }, - "seed": 238820263, + "seed": 1604849351, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 5, - "versionNonce": 760410951, + "versionNonce": 289600103, "width": 20, "x": 20, "y": 30, @@ -5668,14 +5668,14 @@ exports[`contextMenu element > shows 'Group selection' in context menu for multi "roundness": { "type": 3, }, - "seed": 453191, + "seed": 2019559783, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 3, - "versionNonce": 1014066025, + "versionNonce": 1505387817, "width": 10, "x": -10, "y": 0, @@ -5702,14 +5702,14 @@ exports[`contextMenu element > shows 'Group selection' in context menu for multi "roundness": { "type": 3, }, - "seed": 400692809, + "seed": 493213705, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 3, - "versionNonce": 23633383, + "versionNonce": 747212839, "width": 10, "x": 12, "y": 0, @@ -6894,14 +6894,14 @@ exports[`contextMenu element > shows 'Ungroup selection' in context menu for gro "roundness": { "type": 3, }, - "seed": 449462985, + "seed": 453191, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 4, - "versionNonce": 81784553, + "versionNonce": 1723083209, "width": 10, "x": -10, "y": 0, @@ -6930,14 +6930,14 @@ exports[`contextMenu element > shows 'Ungroup selection' in context menu for gro "roundness": { "type": 3, }, - "seed": 238820263, + "seed": 1604849351, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 4, - "versionNonce": 747212839, + "versionNonce": 760410951, "width": 10, "x": 12, "y": 0, @@ -9821,14 +9821,14 @@ exports[`contextMenu element > shows context menu for element > [end of test] el "roundness": { "type": 3, }, - "seed": 449462985, + "seed": 453191, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, "type": "rectangle", "updated": 1, "version": 3, - "versionNonce": 1150084233, + "versionNonce": 1014066025, "width": 20, "x": -10, "y": 0, diff --git a/packages/excalidraw/tests/__snapshots__/dragCreate.test.tsx.snap b/packages/excalidraw/tests/__snapshots__/dragCreate.test.tsx.snap index acc9b79f5..8b7fc8a74 100644 --- a/packages/excalidraw/tests/__snapshots__/dragCreate.test.tsx.snap +++ b/packages/excalidraw/tests/__snapshots__/dragCreate.test.tsx.snap @@ -45,7 +45,7 @@ exports[`Test dragCreate > add element to the scene when pointer dragging long e "type": "arrow", "updated": 1, "version": 4, - "versionNonce": 2019559783, + "versionNonce": 1150084233, "width": 30, "x": 30, "y": 20, @@ -166,7 +166,7 @@ exports[`Test dragCreate > add element to the scene when pointer dragging long e "type": "line", "updated": 1, "version": 4, - "versionNonce": 2019559783, + "versionNonce": 1150084233, "width": 30, "x": 30, "y": 20, diff --git a/packages/excalidraw/tests/__snapshots__/history.test.tsx.snap b/packages/excalidraw/tests/__snapshots__/history.test.tsx.snap index 9ffb97128..ee2500f5f 100644 --- a/packages/excalidraw/tests/__snapshots__/history.test.tsx.snap +++ b/packages/excalidraw/tests/__snapshots__/history.test.tsx.snap @@ -7490,7 +7490,7 @@ History { exports[`history > multiplayer undo/redo > should iterate through the history when selected or editing linear element was remotely deleted > [end of test] number of elements 1`] = `1`; -exports[`history > multiplayer undo/redo > should iterate through the history when selected or editing linear element was remotely deleted > [end of test] number of renders 1`] = `10`; +exports[`history > multiplayer undo/redo > should iterate through the history when selected or editing linear element was remotely deleted > [end of test] number of renders 1`] = `9`; exports[`history > multiplayer undo/redo > should iterate through the history when when element change relates to remotely deleted element > [end of test] appState 1`] = ` { @@ -10561,7 +10561,7 @@ History { exports[`history > multiplayer undo/redo > should override remotely added points on undo, but restore them on redo > [end of test] number of elements 1`] = `1`; -exports[`history > multiplayer undo/redo > should override remotely added points on undo, but restore them on redo > [end of test] number of renders 1`] = `15`; +exports[`history > multiplayer undo/redo > should override remotely added points on undo, but restore them on redo > [end of test] number of renders 1`] = `14`; exports[`history > multiplayer undo/redo > should redistribute deltas when element gets removed locally but is restored remotely > [end of test] appState 1`] = ` { @@ -20188,4 +20188,4 @@ History { exports[`history > singleplayer undo/redo > should support linear element creation and points manipulation through the editor > [end of test] number of elements 1`] = `1`; -exports[`history > singleplayer undo/redo > should support linear element creation and points manipulation through the editor > [end of test] number of renders 1`] = `21`; +exports[`history > singleplayer undo/redo > should support linear element creation and points manipulation through the editor > [end of test] number of renders 1`] = `20`; diff --git a/packages/excalidraw/tests/__snapshots__/move.test.tsx.snap b/packages/excalidraw/tests/__snapshots__/move.test.tsx.snap index 4b863d4e7..f5be4b1e4 100644 --- a/packages/excalidraw/tests/__snapshots__/move.test.tsx.snap +++ b/packages/excalidraw/tests/__snapshots__/move.test.tsx.snap @@ -134,7 +134,7 @@ exports[`move element > rectangles with binding arrow 5`] = ` "type": "rectangle", "updated": 1, "version": 4, - "versionNonce": 1723083209, + "versionNonce": 760410951, "width": 100, "x": 0, "y": 0, @@ -173,7 +173,7 @@ exports[`move element > rectangles with binding arrow 6`] = ` "type": "rectangle", "updated": 1, "version": 7, - "versionNonce": 745419401, + "versionNonce": 1051383431, "width": 300, "x": 201, "y": 2, @@ -231,7 +231,7 @@ exports[`move element > rectangles with binding arrow 7`] = ` "type": "arrow", "updated": 1, "version": 11, - "versionNonce": 1051383431, + "versionNonce": 1996028265, "width": "86.85786", "x": "107.07107", "y": "47.07107", diff --git a/packages/excalidraw/tests/__snapshots__/regressionTests.test.tsx.snap b/packages/excalidraw/tests/__snapshots__/regressionTests.test.tsx.snap index 319287792..7308fb472 100644 --- a/packages/excalidraw/tests/__snapshots__/regressionTests.test.tsx.snap +++ b/packages/excalidraw/tests/__snapshots__/regressionTests.test.tsx.snap @@ -3980,7 +3980,7 @@ History { exports[`regression tests > click-drag to select a group > [end of test] number of elements 1`] = `0`; -exports[`regression tests > click-drag to select a group > [end of test] number of renders 1`] = `14`; +exports[`regression tests > click-drag to select a group > [end of test] number of renders 1`] = `15`; exports[`regression tests > deleting last but one element in editing group should unselect the group > [end of test] appState 1`] = ` { @@ -6835,7 +6835,7 @@ History { exports[`regression tests > draw every type of shape > [end of test] number of elements 1`] = `0`; -exports[`regression tests > draw every type of shape > [end of test] number of renders 1`] = `33`; +exports[`regression tests > draw every type of shape > [end of test] number of renders 1`] = `31`; exports[`regression tests > given a group of selected elements with an element that is not selected inside the group common bounding box when element that is not selected is clicked should switch selection to not selected element on pointer up > [end of test] appState 1`] = ` { @@ -13569,7 +13569,7 @@ exports[`regression tests > switches from group of selected elements to another "roundness": { "type": 2, }, - "seed": 1723083209, + "seed": 760410951, "strokeColor": "#1e1e1e", "strokeStyle": "solid", "strokeWidth": 2, @@ -14566,7 +14566,7 @@ History { exports[`regression tests > undo/redo drawing an element > [end of test] number of elements 1`] = `0`; -exports[`regression tests > undo/redo drawing an element > [end of test] number of renders 1`] = `20`; +exports[`regression tests > undo/redo drawing an element > [end of test] number of renders 1`] = `19`; exports[`regression tests > updates fontSize & fontFamily appState > [end of test] appState 1`] = ` { diff --git a/packages/excalidraw/tests/__snapshots__/selection.test.tsx.snap b/packages/excalidraw/tests/__snapshots__/selection.test.tsx.snap index 2eea90842..e9f823ca2 100644 --- a/packages/excalidraw/tests/__snapshots__/selection.test.tsx.snap +++ b/packages/excalidraw/tests/__snapshots__/selection.test.tsx.snap @@ -43,7 +43,7 @@ exports[`select single element on the scene > arrow 1`] = ` "type": "arrow", "updated": 1, "version": 4, - "versionNonce": 2019559783, + "versionNonce": 1150084233, "width": 30, "x": 10, "y": 10, @@ -92,7 +92,7 @@ exports[`select single element on the scene > arrow escape 1`] = ` "type": "line", "updated": 1, "version": 4, - "versionNonce": 2019559783, + "versionNonce": 1150084233, "width": 30, "x": 10, "y": 10, diff --git a/packages/excalidraw/tests/dragCreate.test.tsx b/packages/excalidraw/tests/dragCreate.test.tsx index c33da5e7e..810efa973 100644 --- a/packages/excalidraw/tests/dragCreate.test.tsx +++ b/packages/excalidraw/tests/dragCreate.test.tsx @@ -313,7 +313,7 @@ describe("Test dragCreate", () => { expect(renderInteractiveScene.mock.calls.length).toMatchInlineSnapshot( `6`, ); - expect(renderStaticScene.mock.calls.length).toMatchInlineSnapshot(`6`); + expect(renderStaticScene.mock.calls.length).toMatchInlineSnapshot(`5`); expect(h.state.selectionElement).toBeNull(); expect(h.elements.length).toEqual(0); }); @@ -342,7 +342,7 @@ describe("Test dragCreate", () => { expect(renderInteractiveScene.mock.calls.length).toMatchInlineSnapshot( `6`, ); - expect(renderStaticScene.mock.calls.length).toMatchInlineSnapshot(`6`); + expect(renderStaticScene.mock.calls.length).toMatchInlineSnapshot(`5`); expect(h.state.selectionElement).toBeNull(); expect(h.elements.length).toEqual(0); }); diff --git a/packages/excalidraw/tests/linearElementEditor.test.tsx b/packages/excalidraw/tests/linearElementEditor.test.tsx index dadfeb9b4..2e32e8821 100644 --- a/packages/excalidraw/tests/linearElementEditor.test.tsx +++ b/packages/excalidraw/tests/linearElementEditor.test.tsx @@ -1271,7 +1271,7 @@ describe("Test Linear Elements", () => { expect(rect.y).toBe(0); expect(handleBindTextResizeSpy).toHaveBeenCalledWith( h.elements[0], - arrayToMap(h.elements), + h.app.scene, "nw", false, ); diff --git a/packages/excalidraw/tests/move.test.tsx b/packages/excalidraw/tests/move.test.tsx index 5bef4638b..71a489561 100644 --- a/packages/excalidraw/tests/move.test.tsx +++ b/packages/excalidraw/tests/move.test.tsx @@ -166,8 +166,6 @@ describe("duplicate element on move when ALT is clicked", () => { fireEvent.pointerMove(canvas, { clientX: 10, clientY: 60 }); fireEvent.pointerUp(canvas); - // TODO: This used to be 4, but binding made it go up to 5. Do we need - // that additional render? expect(renderInteractiveScene.mock.calls.length).toMatchInlineSnapshot(`4`); expect(renderStaticScene.mock.calls.length).toMatchInlineSnapshot(`3`); expect(h.state.selectionElement).toBeNull(); diff --git a/packages/excalidraw/tests/multiPointCreate.test.tsx b/packages/excalidraw/tests/multiPointCreate.test.tsx index cde3c7f98..926c8d47f 100644 --- a/packages/excalidraw/tests/multiPointCreate.test.tsx +++ b/packages/excalidraw/tests/multiPointCreate.test.tsx @@ -119,7 +119,7 @@ describe("multi point mode in linear elements", () => { }); expect(renderInteractiveScene.mock.calls.length).toMatchInlineSnapshot(`7`); - expect(renderStaticScene.mock.calls.length).toMatchInlineSnapshot(`7`); + expect(renderStaticScene.mock.calls.length).toMatchInlineSnapshot(`6`); expect(h.elements.length).toEqual(1); const element = h.elements[0] as ExcalidrawLinearElement; @@ -162,7 +162,7 @@ describe("multi point mode in linear elements", () => { key: KEYS.ENTER, }); expect(renderInteractiveScene.mock.calls.length).toMatchInlineSnapshot(`7`); - expect(renderStaticScene.mock.calls.length).toMatchInlineSnapshot(`7`); + expect(renderStaticScene.mock.calls.length).toMatchInlineSnapshot(`6`); expect(h.elements.length).toEqual(1); const element = h.elements[0] as ExcalidrawLinearElement; diff --git a/packages/excalidraw/tests/selection.test.tsx b/packages/excalidraw/tests/selection.test.tsx index 10f4f7ad9..b35c1d80b 100644 --- a/packages/excalidraw/tests/selection.test.tsx +++ b/packages/excalidraw/tests/selection.test.tsx @@ -256,7 +256,7 @@ describe("selection element", () => { fireEvent.pointerMove(canvas, { clientX: 150, clientY: 30 }); expect(renderInteractiveScene).toHaveBeenCalledTimes(4); - expect(renderStaticScene).toHaveBeenCalledTimes(3); + expect(renderStaticScene).toHaveBeenCalledTimes(4); const selectionElement = h.state.selectionElement!; expect(selectionElement).not.toBeNull(); expect(selectionElement.type).toEqual("selection"); @@ -279,7 +279,7 @@ describe("selection element", () => { fireEvent.pointerUp(canvas); expect(renderInteractiveScene).toHaveBeenCalledTimes(5); - expect(renderStaticScene).toHaveBeenCalledTimes(3); + expect(renderStaticScene).toHaveBeenCalledTimes(4); expect(h.state.selectionElement).toBeNull(); }); });