@fluidframework/merge-tree 2.41.0 → 2.43.0-343119
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/dist/client.d.ts +9 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +79 -36
- package/dist/client.js.map +1 -1
- package/dist/collections/list.d.ts +95 -5
- package/dist/collections/list.d.ts.map +1 -1
- package/dist/collections/list.js +67 -5
- package/dist/collections/list.js.map +1 -1
- package/dist/constants.d.ts +5 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +6 -1
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/mergeTree.d.ts +9 -9
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +15 -7
- package/dist/mergeTree.js.map +1 -1
- package/dist/perspective.d.ts +15 -0
- package/dist/perspective.d.ts.map +1 -1
- package/dist/perspective.js +25 -1
- package/dist/perspective.js.map +1 -1
- package/dist/revertibles.js +1 -1
- package/dist/revertibles.js.map +1 -1
- package/dist/stamps.d.ts +1 -0
- package/dist/stamps.d.ts.map +1 -1
- package/dist/stamps.js +5 -1
- package/dist/stamps.js.map +1 -1
- package/dist/test/beastTest.spec.js +1 -1
- package/dist/test/beastTest.spec.js.map +1 -1
- package/dist/test/client.annotateMarker.spec.js +1 -1
- package/dist/test/client.annotateMarker.spec.js.map +1 -1
- package/dist/test/client.applyMsg.spec.js +25 -25
- package/dist/test/client.applyMsg.spec.js.map +1 -1
- package/dist/test/client.applyStashedOpFarm.spec.d.ts.map +1 -1
- package/dist/test/client.applyStashedOpFarm.spec.js +3 -3
- package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/dist/test/client.attributionFarm.spec.js +1 -1
- package/dist/test/client.attributionFarm.spec.js.map +1 -1
- package/dist/test/client.getPosition.spec.js +1 -0
- package/dist/test/client.getPosition.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js +62 -48
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.localReferenceFarm.spec.js +1 -0
- package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
- package/dist/test/client.reconnectFarm.spec.js +1 -1
- package/dist/test/client.reconnectFarm.spec.js.map +1 -1
- package/dist/test/client.rollback.spec.js +8 -6
- package/dist/test/client.rollback.spec.js.map +1 -1
- package/dist/test/client.searchForMarker.spec.js +2 -2
- package/dist/test/client.searchForMarker.spec.js.map +1 -1
- package/dist/test/clientTestHelper.js +1 -1
- package/dist/test/clientTestHelper.js.map +1 -1
- package/dist/test/mergeTree.annotate.spec.js +25 -25
- package/dist/test/mergeTree.annotate.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +4 -4
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js +14 -14
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/dist/test/snapshot.utils.js +1 -1
- package/dist/test/snapshot.utils.js.map +1 -1
- package/dist/test/sortedSegmentSet.spec.js +3 -3
- package/dist/test/sortedSegmentSet.spec.js.map +1 -1
- package/dist/test/testClient.js +3 -3
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/tracking.spec.js +7 -7
- package/dist/test/tracking.spec.js.map +1 -1
- package/dist/test/wordUnitTests.spec.js.map +1 -1
- package/lib/client.d.ts +9 -6
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +81 -38
- package/lib/client.js.map +1 -1
- package/lib/collections/list.d.ts +95 -5
- package/lib/collections/list.d.ts.map +1 -1
- package/lib/collections/list.js +67 -5
- package/lib/collections/list.js.map +1 -1
- package/lib/constants.d.ts +5 -0
- package/lib/constants.d.ts.map +1 -1
- package/lib/constants.js +5 -0
- package/lib/constants.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/mergeTree.d.ts +9 -9
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +15 -7
- package/lib/mergeTree.js.map +1 -1
- package/lib/perspective.d.ts +15 -0
- package/lib/perspective.d.ts.map +1 -1
- package/lib/perspective.js +23 -0
- package/lib/perspective.js.map +1 -1
- package/lib/revertibles.js +1 -1
- package/lib/revertibles.js.map +1 -1
- package/lib/stamps.d.ts +1 -0
- package/lib/stamps.d.ts.map +1 -1
- package/lib/stamps.js +4 -1
- package/lib/stamps.js.map +1 -1
- package/lib/test/beastTest.spec.js +1 -1
- package/lib/test/beastTest.spec.js.map +1 -1
- package/lib/test/client.annotateMarker.spec.js +1 -1
- package/lib/test/client.annotateMarker.spec.js.map +1 -1
- package/lib/test/client.applyMsg.spec.js +25 -25
- package/lib/test/client.applyMsg.spec.js.map +1 -1
- package/lib/test/client.applyStashedOpFarm.spec.d.ts.map +1 -1
- package/lib/test/client.applyStashedOpFarm.spec.js +3 -3
- package/lib/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/lib/test/client.attributionFarm.spec.js +1 -1
- package/lib/test/client.attributionFarm.spec.js.map +1 -1
- package/lib/test/client.getPosition.spec.js +1 -0
- package/lib/test/client.getPosition.spec.js.map +1 -1
- package/lib/test/client.localReference.spec.js +62 -48
- package/lib/test/client.localReference.spec.js.map +1 -1
- package/lib/test/client.localReferenceFarm.spec.js +1 -0
- package/lib/test/client.localReferenceFarm.spec.js.map +1 -1
- package/lib/test/client.reconnectFarm.spec.js +1 -1
- package/lib/test/client.reconnectFarm.spec.js.map +1 -1
- package/lib/test/client.rollback.spec.js +8 -6
- package/lib/test/client.rollback.spec.js.map +1 -1
- package/lib/test/client.searchForMarker.spec.js +2 -2
- package/lib/test/client.searchForMarker.spec.js.map +1 -1
- package/lib/test/clientTestHelper.js +1 -1
- package/lib/test/clientTestHelper.js.map +1 -1
- package/lib/test/mergeTree.annotate.spec.js +25 -25
- package/lib/test/mergeTree.annotate.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/lib/test/obliterate.spec.js +4 -4
- package/lib/test/obliterate.spec.js.map +1 -1
- package/lib/test/resetPendingSegmentsToOp.spec.js +14 -14
- package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/lib/test/snapshot.utils.js +1 -1
- package/lib/test/snapshot.utils.js.map +1 -1
- package/lib/test/sortedSegmentSet.spec.js +3 -3
- package/lib/test/sortedSegmentSet.spec.js.map +1 -1
- package/lib/test/testClient.js +3 -3
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/tracking.spec.js +7 -7
- package/lib/test/tracking.spec.js.map +1 -1
- package/lib/test/wordUnitTests.spec.js.map +1 -1
- package/package.json +16 -16
- package/src/client.ts +117 -50
- package/src/collections/list.ts +101 -5
- package/src/constants.ts +6 -0
- package/src/index.ts +3 -0
- package/src/mergeTree.ts +30 -24
- package/src/perspective.ts +26 -0
- package/src/revertibles.ts +1 -1
- package/src/stamps.ts +9 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.rollback.spec.js","sourceRoot":"","sources":["../../src/test/client.rollback.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { strict as assert } from \"node:assert\";\n\nimport {\n\tISegmentPrivate,\n\tMarker,\n\tSegmentGroup,\n\treservedMarkerIdKey,\n} from \"../mergeTreeNodes.js\";\nimport { MergeTreeDeltaType, ReferenceType } from \"../ops.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nimport { TestClient } from \"./testClient.js\";\nimport { createClientsAtInitialState, TestClientLogger } from \"./testClientLogger.js\";\nimport { validatePartialLengths } from \"./testUtils.js\";\n\ndescribe(\"client.rollback\", () => {\n\tconst localUserLongId = \"localUser\";\n\tlet client: TestClient;\n\n\tbeforeEach(() => {\n\t\tclient = new TestClient();\n\t\tclient.mergeTree.insertSegments(\n\t\t\t0,\n\t\t\t[TextSegment.make(\"\")],\n\t\t\tclient.mergeTree.localPerspective,\n\t\t\tclient.mergeTree.collabWindow.mintNextLocalOperationStamp(),\n\t\t\tundefined,\n\t\t);\n\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t});\n\n\tit(\"Should rollback insert on empty string\", () => {\n\t\tclient.insertTextLocal(0, \"abcd\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"\");\n\t});\n\tit(\"Should rollback insert marker\", () => {\n\t\tclient.insertTextLocal(0, \"abc\");\n\t\tclient.insertMarkerLocal(1, ReferenceType.Simple, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t});\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"abc\");\n\t\tconst marker = client.getMarkerFromId(\"markerId\");\n\t\tassert.equal(marker, undefined);\n\t});\n\tit(\"Should rollback insert and validate the partial lengths\", () => {\n\t\tclient.insertTextLocal(0, \"ghi\");\n\t\tclient.insertTextLocal(0, \"def\");\n\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"defghi\");\n\t\tvalidatePartialLengths(client.getClientId(), client.mergeTree);\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"ghi\");\n\t\tvalidatePartialLengths(client.getClientId(), client.mergeTree);\n\t});\n\tit(\"Should rollback multiple inserts with split segments\", () => {\n\t\tclient.insertTextLocal(0, \"aefg\");\n\t\tclient.insertTextLocal(1, \"bd\");\n\t\tclient.insertTextLocal(2, \"c\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"aefg\");\n\t\tvalidatePartialLengths(client.getClientId(), client.mergeTree);\n\t});\n\tit(\"Should zamboni rolled back insert\", () => {\n\t\tclient.insertTextLocal(0, \"aefg\");\n\t\tclient.insertTextLocal(1, \"bcd\");\n\t\tconst segmentGroup = client.peekPendingSegmentGroups() as SegmentGroup;\n\t\tconst segment = segmentGroup.segments[0];\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, segmentGroup);\n\n\t\t// do some work and move the client's min seq forward, so zamboni runs\n\t\tfor (const c of \"hello world\") {\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(\n\t\t\t\t\tclient.insertTextLocal(client.getLength(), c),\n\t\t\t\t\tclient.getCurrentSeq() + 1,\n\t\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\t\tundefined,\n\t\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tassert.equal(segment.parent, undefined);\n\t});\n\tit(\"Should rollback annotate marker\", () => {\n\t\tclient.insertMarkerLocal(0, ReferenceType.Simple, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t});\n\t\tconst marker = client.getMarkerFromId(\"markerId\") as Marker;\n\t\tclient.annotateMarker(marker, { foo: \"bar\" });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tconst properties = marker.getProperties();\n\t\tassert.equal(properties?.foo, undefined);\n\t});\n\tit(\"Should rollback annotate marker overwriting property\", () => {\n\t\tclient.insertMarkerLocal(0, ReferenceType.Simple, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t\tfoo: \"bar\",\n\t\t});\n\t\tconst marker = client.getMarkerFromId(\"markerId\") as Marker;\n\t\tclient.annotateMarker(marker, { foo: \"baz\" });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tconst properties = marker.getProperties();\n\t\tassert.equal(properties?.foo, \"bar\");\n\t});\n\tit(\"Should rollback annotate marker removing property\", () => {\n\t\tclient.insertMarkerLocal(0, ReferenceType.Simple, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t\tfoo: \"bar\",\n\t\t});\n\t\tconst marker = client.getMarkerFromId(\"markerId\") as Marker;\n\t\t// eslint-disable-next-line unicorn/no-null\n\t\tclient.annotateMarker(marker, { foo: null });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tconst properties = marker.getProperties();\n\t\tassert.equal(properties?.foo, \"bar\");\n\t});\n\tit(\"Should rollback annotate marker rewrite\", () => {\n\t\tclient.insertMarkerLocal(0, ReferenceType.Simple, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t\tfoo: \"bar\",\n\t\t});\n\t\tconst marker = client.getMarkerFromId(\"markerId\") as Marker;\n\t\tclient.annotateMarker(marker, { [reservedMarkerIdKey]: \"markerId\", abc: \"def\" });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tconst properties = marker.getProperties();\n\t\tassert.equal(properties?.foo, \"bar\");\n\t\tassert.equal(properties?.abc, undefined);\n\t});\n\tit(\"Should rollback annotate rewrite with explicit null\", () => {\n\t\tclient.insertMarkerLocal(0, ReferenceType.Simple, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t\tfoo: \"bar\",\n\t\t});\n\t\tconst marker = client.getMarkerFromId(\"markerId\") as Marker;\n\t\tclient.annotateMarker(marker, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t\tabc: \"def\",\n\t\t\t// eslint-disable-next-line unicorn/no-null\n\t\t\tfoo: null,\n\t\t});\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tconst properties = marker.getProperties();\n\t\tassert.equal(properties?.foo, \"bar\");\n\t\tassert.equal(properties?.abc, undefined);\n\t});\n\tit(\"Should rollback annotate causes split string\", () => {\n\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\tclient.annotateRangeLocal(1, 3, { foo: \"bar\" });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\t});\n\tit(\"Should rollback annotate over split string\", () => {\n\t\tclient.insertTextLocal(0, \"abfg\");\n\t\tclient.insertTextLocal(1, \"cde\");\n\t\tclient.annotateRangeLocal(1, 6, { foo: \"bar\" });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tfor (let i = 0; i < 7; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\t});\n\tit(\"Should rollback annotate that later gets split\", () => {\n\t\tclient.insertTextLocal(0, \"abfg\");\n\t\tclient.annotateRangeLocal(0, 4, { foo: \"bar\" });\n\t\tclient.insertTextLocal(1, \"cde\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"abfg\");\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\t});\n\tit(\"Should rollback annotates with multiple previous property sets\", () => {\n\t\tclient.insertTextLocal(0, \"acde\");\n\t\tclient.annotateRangeLocal(0, 3, { foo: \"one\" });\n\t\tclient.annotateRangeLocal(2, 4, { foo: \"two\" });\n\t\tclient.annotateRangeLocal(0, 3, { foo: \"three\" });\n\t\tclient.insertTextLocal(1, \"b\");\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tlet props = client.getPropertiesAtPosition(3);\n\t\tassert(props !== undefined && props.foo === \"two\");\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\tprops = client.getPropertiesAtPosition(i);\n\t\t\tassert(props !== undefined && props.foo === \"three\");\n\t\t}\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tfor (let i = 0; i < 2; i++) {\n\t\t\tprops = client.getPropertiesAtPosition(i);\n\t\t\tassert(props !== undefined && props.foo === \"one\");\n\t\t}\n\t\tfor (let i = 2; i < 4; i++) {\n\t\t\tprops = client.getPropertiesAtPosition(i);\n\t\t\tassert(props !== undefined && props.foo === \"two\");\n\t\t}\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tprops = client.getPropertiesAtPosition(3);\n\t\tassert(props === undefined || props.foo === undefined);\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\tprops = client.getPropertiesAtPosition(i);\n\t\t\tassert(props !== undefined && props.foo === \"one\");\n\t\t}\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"acde\");\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tprops = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\t});\n\tit(\"Should rollback annotate with same prop\", () => {\n\t\tclient.insertTextLocal(0, \"abcde\");\n\t\tclient.annotateRangeLocal(2, 3, { foo: \"bar\" });\n\t\tclient.annotateRangeLocal(1, 4, { foo: \"bar\" });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tfor (let i = 0; i < 5; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tif (i === 2) {\n\t\t\t\tassert.equal(props?.foo, \"bar\");\n\t\t\t} else {\n\t\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t\t}\n\t\t}\n\t});\n\tit(\"Should zamboni rolled back annotated segment\", () => {\n\t\tclient.applyMsg(\n\t\t\tclient.makeOpMessage(\n\t\t\t\tclient.insertTextLocal(0, \"abcde\", { color: \"red\" }),\n\t\t\t\tclient.getCurrentSeq() + 1,\n\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\tundefined,\n\t\t\t\tclient.getCurrentSeq(),\n\t\t\t),\n\t\t);\n\t\tclient.annotateRangeLocal(2, 3, { foo: \"bar\" });\n\t\tconst segmentGroup = client.peekPendingSegmentGroups() as SegmentGroup;\n\t\tconst segment = segmentGroup.segments[0];\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, segmentGroup);\n\n\t\t// do some work and move the client's min seq forward, so zamboni runs\n\t\tfor (const c of \"hello world\") {\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(\n\t\t\t\t\tclient.insertTextLocal(client.getLength(), c),\n\t\t\t\t\tclient.getCurrentSeq() + 1,\n\t\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\t\tundefined,\n\t\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tassert.equal(segment.parent, undefined);\n\t});\n\tit(\"Should rollback delete on single segment\", () => {\n\t\tclient.insertTextLocal(0, \"abcd\");\n\t\tclient.removeRangeLocal(0, 4);\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"abcd\");\n\t});\n\tit(\"Should rollback delete which causes split segments\", () => {\n\t\tclient.insertTextLocal(0, \"abcde\");\n\t\tclient.removeRangeLocal(1, 4);\n\t\tlet deltaEvent = false;\n\t\tclient.on(\"delta\", () => {\n\t\t\tassert.equal(client.getText(), \"abcde\");\n\t\t\tdeltaEvent = true;\n\t\t});\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"abcde\");\n\t\tassert.equal(deltaEvent, true);\n\t});\n\tit(\"Should rollback delete across split segments\", () => {\n\t\tclient.insertTextLocal(0, \"abcde\");\n\t\tclient.annotateRangeLocal(2, 3, { foo: \"bar\" });\n\t\tclient.removeRangeLocal(1, 4);\n\n\t\tlet deltaCount = 0;\n\t\tlet bFound = false;\n\t\tlet cFound = false;\n\t\tlet dFound = false;\n\t\tclient.on(\"delta\", (_opArgs, delta) => {\n\t\t\tdeltaCount++;\n\t\t\tassert.equal(client.getText().length, 2 + deltaCount);\n\t\t\tassert.equal(delta.deltaSegments.length, 1);\n\t\t\tassert.equal(delta.deltaSegments[0].segment.type, TextSegment.type);\n\t\t\tconst text = (delta.deltaSegments[0].segment as TextSegment).toString();\n\t\t\tswitch (text) {\n\t\t\t\tcase \"b\": {\n\t\t\t\t\tbFound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"c\": {\n\t\t\t\t\tcFound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"d\": {\n\t\t\t\t\tdFound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tassert(false, `Unexpected text segment: ${text}`);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"abcde\");\n\t\tassert.equal(deltaCount, 3);\n\t\tassert(bFound);\n\t\tassert(cFound);\n\t\tassert(dFound);\n\t});\n\tit(\"Should rollback delete and update blocks\", () => {\n\t\tconst text = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()\";\n\t\tfor (const c of text) {\n\t\t\tclient.insertTextLocal(client.getLength(), c);\n\t\t}\n\t\tclient.removeRangeLocal(1, 4);\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\t// The insertion position calculation will be wrong if the blocks aren't updated correctly\n\t\tclient.insertTextLocal(text.length - 1, \"+\");\n\n\t\tconst expectedText = `${text.slice(0, Math.max(0, text.length - 1))}+${\n\t\t\ttext[text.length - 1]\n\t\t}`;\n\t\tassert.equal(client.getText(), expectedText, client.getText());\n\t});\n\tit(\"Should rollback delete and restore local references\", () => {\n\t\tclient.insertTextLocal(0, \"efg\");\n\t\tclient.insertTextLocal(0, \"d\");\n\t\tclient.insertTextLocal(0, \"abc\");\n\t\tconst segInfo1 = client.getContainingSegment<ISegmentPrivate>(2);\n\t\tconst segInfo3 = client.getContainingSegment<ISegmentPrivate>(5);\n\t\tconst ref1 = client.createLocalReferencePosition(\n\t\t\tsegInfo1.segment!,\n\t\t\t0,\n\t\t\tReferenceType.Simple,\n\t\t\tundefined,\n\t\t);\n\t\tconst refSlide = client.createLocalReferencePosition(\n\t\t\tsegInfo1.segment!,\n\t\t\t2,\n\t\t\tReferenceType.SlideOnRemove,\n\t\t\tundefined,\n\t\t);\n\t\tconst ref2 = client.createLocalReferencePosition(\n\t\t\tsegInfo3.segment!,\n\t\t\t1,\n\t\t\tReferenceType.Simple,\n\t\t\tundefined,\n\t\t);\n\t\tconst refStay = client.createLocalReferencePosition(\n\t\t\tsegInfo3.segment!,\n\t\t\t1,\n\t\t\tReferenceType.StayOnRemove,\n\t\t\tundefined,\n\t\t);\n\n\t\tclient.removeRangeLocal(0, 7);\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"abcdefg\");\n\t\tconst segInfo1After = client.getContainingSegment<ISegmentPrivate>(2);\n\t\tassert.notEqual(segInfo1After, undefined);\n\t\tassert.notEqual(segInfo1After.segment?.localRefs, undefined);\n\t\tassert(segInfo1After.segment?.localRefs!.has(ref1));\n\t\tassert(segInfo1After.segment?.localRefs!.has(refSlide));\n\t\tconst segInfo3After = client.getContainingSegment<ISegmentPrivate>(5);\n\t\tassert.notEqual(segInfo3After, undefined);\n\t\tassert.notEqual(segInfo3After.segment?.localRefs, undefined);\n\t\tassert(segInfo3After.segment?.localRefs!.has(ref2));\n\t\tassert(segInfo3After.segment?.localRefs!.has(refStay));\n\t});\n\tit(\"Should zamboni rolled back remove\", () => {\n\t\tclient.applyMsg(\n\t\t\tclient.makeOpMessage(\n\t\t\t\tclient.insertTextLocal(0, \"abcde\", { color: \"red\" }),\n\t\t\t\tclient.getCurrentSeq() + 1,\n\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\tundefined,\n\t\t\t\tclient.getCurrentSeq(),\n\t\t\t),\n\t\t);\n\t\tclient.removeRangeLocal(1, 4);\n\t\tconst segmentGroup = client.peekPendingSegmentGroups() as SegmentGroup;\n\t\tconst segment = segmentGroup.segments[0];\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, segmentGroup);\n\n\t\t// do some work and move the client's min seq forward, so zamboni runs\n\t\tfor (const c of \"hello world\") {\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(\n\t\t\t\t\tclient.insertTextLocal(client.getLength(), c),\n\t\t\t\t\tclient.getCurrentSeq() + 1,\n\t\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\t\tundefined,\n\t\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tassert.equal(segment.parent, undefined);\n\t});\n\tit(\"Should rollback multiple overlapping edits\", () => {\n\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\tclient.insertTextLocal(3, \"123\");\n\t\tclient.annotateRangeLocal(2, 5, { foo: \"bar\" });\n\t\tclient.removeRangeLocal(3, 7);\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abc123defg\");\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tif (i >= 2 && i < 5) {\n\t\t\t\tassert.equal(props?.foo, \"bar\");\n\t\t\t} else {\n\t\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t\t}\n\t\t}\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abcdefg\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"\");\n\t});\n\tit(\"Should rollback multiple removes across split segments\", () => {\n\t\tclient.insertTextLocal(0, \"abcde\");\n\t\tclient.insertTextLocal(3, \"123\");\n\t\tclient.insertTextLocal(4, \"xyz\");\n\t\tclient.removeRangeLocal(2, 5);\n\t\tclient.removeRangeLocal(3, 7);\n\t\tclient.removeRangeLocal(2, 4);\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abye\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abyz23de\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abc1xyz23de\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abc123de\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abcde\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"\");\n\t});\n\tit(\"Should annotate a previously removed range\", () => {\n\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\tclient.insertTextLocal(3, \"123\");\n\t\tclient.removeRangeLocal(2, 8);\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abc123defg\");\n\n\t\tclient.annotateRangeLocal(2, 8, { foo: \"bar\" });\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tif (i >= 2 && i < 8) {\n\t\t\t\tassert.equal(props?.foo, \"bar\");\n\t\t\t} else {\n\t\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t\t}\n\t\t}\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abcdefg\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"\");\n\t});\n\tit(\"Should rollback overlapping annotates and remove\", () => {\n\t\tclient.insertTextLocal(0, \"abc123defg\");\n\t\tclient.annotateRangeLocal(0, 6, { foo: \"one\" });\n\t\tclient.annotateRangeLocal(5, 10, { foo: \"two\" });\n\t\tclient.removeRangeLocal(4, 8);\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getPropertiesAtPosition(4)?.foo, \"one\");\n\t\tassert.equal(client.getPropertiesAtPosition(5)?.foo, \"two\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tif (i >= 0 && i < 6) {\n\t\t\t\tassert.equal(props?.foo, \"one\");\n\t\t\t} else {\n\t\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t\t}\n\t\t}\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"\");\n\t});\n\tit(\"Should function properly after rollback with local ops\", () => {\n\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\tclient.removeRangeLocal(1, 5);\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\tclient.removeRangeLocal(2, 4);\n\t\tassert.equal(client.getText(), \"abefg\");\n\n\t\tclient.annotateRangeLocal(2, 5, { foo: \"bar\" });\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tif (i >= 2 && i < 5) {\n\t\t\t\tassert.equal(props?.foo, \"bar\");\n\t\t\t} else {\n\t\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t\t}\n\t\t}\n\n\t\tclient.insertTextLocal(1, \"123\");\n\t\tassert.equal(client.getText(), \"a123befg\");\n\t});\n\tit(\"Should function properly after rollback with external ops\", () => {\n\t\tconst remoteClient = new TestClient();\n\t\tremoteClient.startOrUpdateCollaboration(\"remoteUser\");\n\t\tconst clients = [client, remoteClient];\n\t\tlet seq = 0;\n\t\tconst logger = new TestClientLogger(clients);\n\t\tlogger.validate();\n\n\t\tlet msg = remoteClient.makeOpMessage(remoteClient.insertTextLocal(0, \"12345\"), ++seq);\n\t\tfor (const c of clients) c.applyMsg(msg);\n\t\tlogger.validate({ baseText: \"12345\" });\n\n\t\tclient.removeRangeLocal(1, 4);\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\tmsg = remoteClient.makeOpMessage(remoteClient.removeRangeLocal(2, 3), ++seq);\n\t\tfor (const c of clients) {\n\t\t\tc.applyMsg(msg);\n\t\t}\n\n\t\tlogger.validate({ baseText: \"1245\" });\n\n\t\tmsg = remoteClient.makeOpMessage(\n\t\t\tremoteClient.annotateRangeLocal(0, 3, { foo: \"bar\" }),\n\t\t\t++seq,\n\t\t);\n\t\tfor (const c of clients) {\n\t\t\tc.applyMsg(msg);\n\t\t}\n\n\t\tlogger.validate({ baseText: \"1245\" });\n\t\tfor (const c of clients) {\n\t\t\tfor (let i = 0; i < c.getText().length; i++) {\n\t\t\t\tconst props = c.getPropertiesAtPosition(i);\n\t\t\t\tif (i >= 0 && i < 3) {\n\t\t\t\t\tassert.equal(props?.foo, \"bar\");\n\t\t\t\t} else {\n\t\t\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tmsg = remoteClient.makeOpMessage(remoteClient.insertTextLocal(3, \"abc\"), ++seq);\n\t\tfor (const c of clients) {\n\t\t\tc.applyMsg(msg);\n\t\t}\n\n\t\tlogger.validate({ baseText: \"124abc5\" });\n\t});\n\n\tit(\"Conflicting insert with winner split by rollback\", () => {\n\t\tconst clients = createClientsAtInitialState({ initialState: \"\" }, \"A\", \"B\");\n\t\tconst logger = new TestClientLogger(clients.all);\n\t\tlet seq = 0;\n\t\tconst ops = [\n\t\t\tclients.A.makeOpMessage(clients.A.insertTextLocal(0, \"AAAAA\"), ++seq),\n\t\t\tclients.B.makeOpMessage(clients.B.insertTextLocal(0, \"BBBBB\"), ++seq),\n\t\t];\n\t\tconst rollbackOp = clients.B.insertTextLocal(2, \"RRRRR\");\n\t\tclients.B.rollback(rollbackOp, clients.B.peekPendingSegmentGroups());\n\n\t\tfor (const op of ops) {\n\t\t\tfor (const c of clients.all) {\n\t\t\t\tc.applyMsg(op);\n\t\t\t}\n\t\t}\n\t\tlogger.validate({ baseText: \"BBBBBAAAAA\" });\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"client.rollback.spec.js","sourceRoot":"","sources":["../../src/test/client.rollback.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { strict as assert } from \"node:assert\";\n\nimport {\n\tISegmentPrivate,\n\tMarker,\n\tSegmentGroup,\n\treservedMarkerIdKey,\n} from \"../mergeTreeNodes.js\";\nimport { MergeTreeDeltaType, ReferenceType } from \"../ops.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nimport { TestClient } from \"./testClient.js\";\nimport { createClientsAtInitialState, TestClientLogger } from \"./testClientLogger.js\";\nimport { validatePartialLengths } from \"./testUtils.js\";\n\ndescribe(\"client.rollback\", () => {\n\tconst localUserLongId = \"localUser\";\n\tlet client: TestClient;\n\n\tbeforeEach(() => {\n\t\tclient = new TestClient();\n\t\tclient.mergeTree.insertSegments(\n\t\t\t0,\n\t\t\t[TextSegment.make(\"\")],\n\t\t\tclient.mergeTree.localPerspective,\n\t\t\tclient.mergeTree.collabWindow.mintNextLocalOperationStamp(),\n\t\t\tundefined,\n\t\t);\n\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t});\n\n\tit(\"Should rollback insert on empty string\", () => {\n\t\tclient.insertTextLocal(0, \"abcd\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"\");\n\t});\n\tit(\"Should rollback insert marker\", () => {\n\t\tclient.insertTextLocal(0, \"abc\");\n\t\tclient.insertMarkerLocal(1, ReferenceType.Simple, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t});\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"abc\");\n\t\tconst marker = client.getMarkerFromId(\"markerId\");\n\t\tassert.equal(marker, undefined);\n\t});\n\tit(\"Should rollback insert and validate the partial lengths\", () => {\n\t\tclient.insertTextLocal(0, \"ghi\");\n\t\tclient.insertTextLocal(0, \"def\");\n\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"defghi\");\n\t\tvalidatePartialLengths(client.getClientId(), client.mergeTree);\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"ghi\");\n\t\tvalidatePartialLengths(client.getClientId(), client.mergeTree);\n\t});\n\tit(\"Should rollback multiple inserts with split segments\", () => {\n\t\tclient.insertTextLocal(0, \"aefg\");\n\t\tclient.insertTextLocal(1, \"bd\");\n\t\tclient.insertTextLocal(2, \"c\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"aefg\");\n\t\tvalidatePartialLengths(client.getClientId(), client.mergeTree);\n\t});\n\tit(\"Should zamboni rolled back insert\", () => {\n\t\tclient.insertTextLocal(0, \"aefg\");\n\t\tclient.insertTextLocal(1, \"bcd\");\n\t\tconst segmentGroup = client.peekPendingSegmentGroups() as SegmentGroup;\n\t\tconst segment = segmentGroup.segments[0];\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, segmentGroup);\n\n\t\t// do some work and move the client's min seq forward, so zamboni runs\n\t\tfor (const c of \"hello world\") {\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(\n\t\t\t\t\tclient.insertTextLocal(client.getLength(), c),\n\t\t\t\t\tclient.getCurrentSeq() + 1,\n\t\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\t\tundefined,\n\t\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tassert.equal(segment.parent, undefined);\n\t});\n\tit(\"Should rollback annotate marker\", () => {\n\t\tclient.insertMarkerLocal(0, ReferenceType.Simple, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t});\n\t\tconst marker = client.getMarkerFromId(\"markerId\") as Marker;\n\t\tclient.annotateMarker(marker, { foo: \"bar\" });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tconst properties = marker.getProperties();\n\t\tassert.equal(properties?.foo, undefined);\n\t});\n\tit(\"Should rollback annotate marker overwriting property\", () => {\n\t\tclient.insertMarkerLocal(0, ReferenceType.Simple, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t\tfoo: \"bar\",\n\t\t});\n\t\tconst marker = client.getMarkerFromId(\"markerId\") as Marker;\n\t\tclient.annotateMarker(marker, { foo: \"baz\" });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tconst properties = marker.getProperties();\n\t\tassert.equal(properties?.foo, \"bar\");\n\t});\n\tit(\"Should rollback annotate marker removing property\", () => {\n\t\tclient.insertMarkerLocal(0, ReferenceType.Simple, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t\tfoo: \"bar\",\n\t\t});\n\t\tconst marker = client.getMarkerFromId(\"markerId\") as Marker;\n\t\t// eslint-disable-next-line unicorn/no-null\n\t\tclient.annotateMarker(marker, { foo: null });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tconst properties = marker.getProperties();\n\t\tassert.equal(properties?.foo, \"bar\");\n\t});\n\tit(\"Should rollback annotate marker rewrite\", () => {\n\t\tclient.insertMarkerLocal(0, ReferenceType.Simple, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t\tfoo: \"bar\",\n\t\t});\n\t\tconst marker = client.getMarkerFromId(\"markerId\") as Marker;\n\t\tclient.annotateMarker(marker, { [reservedMarkerIdKey]: \"markerId\", abc: \"def\" });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tconst properties = marker.getProperties();\n\t\tassert.equal(properties?.foo, \"bar\");\n\t\tassert.equal(properties?.abc, undefined);\n\t});\n\tit(\"Should rollback annotate rewrite with explicit null\", () => {\n\t\tclient.insertMarkerLocal(0, ReferenceType.Simple, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t\tfoo: \"bar\",\n\t\t});\n\t\tconst marker = client.getMarkerFromId(\"markerId\") as Marker;\n\t\tclient.annotateMarker(marker, {\n\t\t\t[reservedMarkerIdKey]: \"markerId\",\n\t\t\tabc: \"def\",\n\t\t\t// eslint-disable-next-line unicorn/no-null\n\t\t\tfoo: null,\n\t\t});\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tconst properties = marker.getProperties();\n\t\tassert.equal(properties?.foo, \"bar\");\n\t\tassert.equal(properties?.abc, undefined);\n\t});\n\tit(\"Should rollback annotate causes split string\", () => {\n\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\tclient.annotateRangeLocal(1, 3, { foo: \"bar\" });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\t});\n\tit(\"Should rollback annotate over split string\", () => {\n\t\tclient.insertTextLocal(0, \"abfg\");\n\t\tclient.insertTextLocal(1, \"cde\");\n\t\tclient.annotateRangeLocal(1, 6, { foo: \"bar\" });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tfor (let i = 0; i < 7; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\t});\n\tit(\"Should rollback annotate that later gets split\", () => {\n\t\tclient.insertTextLocal(0, \"abfg\");\n\t\tclient.annotateRangeLocal(0, 4, { foo: \"bar\" });\n\t\tclient.insertTextLocal(1, \"cde\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"abfg\");\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\t});\n\tit(\"Should rollback annotates with multiple previous property sets\", () => {\n\t\tclient.insertTextLocal(0, \"acde\");\n\t\tclient.annotateRangeLocal(0, 3, { foo: \"one\" });\n\t\tclient.annotateRangeLocal(2, 4, { foo: \"two\" });\n\t\tclient.annotateRangeLocal(0, 3, { foo: \"three\" });\n\t\tclient.insertTextLocal(1, \"b\");\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tlet props = client.getPropertiesAtPosition(3);\n\t\tassert(props !== undefined && props.foo === \"two\");\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\tprops = client.getPropertiesAtPosition(i);\n\t\t\tassert(props !== undefined && props.foo === \"three\");\n\t\t}\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tfor (let i = 0; i < 2; i++) {\n\t\t\tprops = client.getPropertiesAtPosition(i);\n\t\t\tassert(props !== undefined && props.foo === \"one\");\n\t\t}\n\t\tfor (let i = 2; i < 4; i++) {\n\t\t\tprops = client.getPropertiesAtPosition(i);\n\t\t\tassert(props !== undefined && props.foo === \"two\");\n\t\t}\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tprops = client.getPropertiesAtPosition(3);\n\t\tassert(props === undefined || props.foo === undefined);\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\tprops = client.getPropertiesAtPosition(i);\n\t\t\tassert(props !== undefined && props.foo === \"one\");\n\t\t}\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"acde\");\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tprops = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\t});\n\tit(\"Should rollback annotate with same prop\", () => {\n\t\tclient.insertTextLocal(0, \"abcde\");\n\t\tclient.annotateRangeLocal(2, 3, { foo: \"bar\" });\n\t\tclient.annotateRangeLocal(1, 4, { foo: \"bar\" });\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\n\t\tfor (let i = 0; i < 5; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tif (i === 2) {\n\t\t\t\tassert.equal(props?.foo, \"bar\");\n\t\t\t} else {\n\t\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t\t}\n\t\t}\n\t});\n\tit(\"Should zamboni rolled back annotated segment\", () => {\n\t\tclient.applyMsg(\n\t\t\tclient.makeOpMessage(\n\t\t\t\tclient.insertTextLocal(0, \"abcde\", { color: \"red\" }),\n\t\t\t\tclient.getCurrentSeq() + 1,\n\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\tundefined,\n\t\t\t\tclient.getCurrentSeq(),\n\t\t\t),\n\t\t);\n\t\tclient.annotateRangeLocal(2, 3, { foo: \"bar\" });\n\t\tconst segmentGroup = client.peekPendingSegmentGroups() as SegmentGroup;\n\t\tconst segment = segmentGroup.segments[0];\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, segmentGroup);\n\n\t\t// do some work and move the client's min seq forward, so zamboni runs\n\t\tfor (const c of \"hello world\") {\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(\n\t\t\t\t\tclient.insertTextLocal(client.getLength(), c),\n\t\t\t\t\tclient.getCurrentSeq() + 1,\n\t\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\t\tundefined,\n\t\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tassert.equal(segment.parent, undefined);\n\t});\n\tit(\"Should rollback delete on single segment\", () => {\n\t\tclient.insertTextLocal(0, \"abcd\");\n\t\tclient.removeRangeLocal(0, 4);\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"abcd\");\n\t});\n\tit(\"Should rollback delete which causes split segments\", () => {\n\t\tclient.insertTextLocal(0, \"abcde\");\n\t\tclient.removeRangeLocal(1, 4);\n\t\tlet deltaEvent = false;\n\t\tclient.on(\"delta\", () => {\n\t\t\tassert.equal(client.getText(), \"abcde\");\n\t\t\tdeltaEvent = true;\n\t\t});\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"abcde\");\n\t\tassert.equal(deltaEvent, true);\n\t});\n\tit(\"Should rollback delete across split segments\", () => {\n\t\tclient.insertTextLocal(0, \"abcde\");\n\t\tclient.annotateRangeLocal(2, 3, { foo: \"bar\" });\n\t\tclient.removeRangeLocal(1, 4);\n\n\t\tlet deltaCount = 0;\n\t\tlet bFound = false;\n\t\tlet cFound = false;\n\t\tlet dFound = false;\n\t\tclient.on(\"delta\", (_opArgs, delta) => {\n\t\t\tdeltaCount++;\n\t\t\tassert.equal(client.getText().length, 2 + deltaCount);\n\t\t\tassert.equal(delta.deltaSegments.length, 1);\n\t\t\tassert.equal(delta.deltaSegments[0].segment.type, TextSegment.type);\n\t\t\tconst text = (delta.deltaSegments[0].segment as TextSegment).toString();\n\t\t\tswitch (text) {\n\t\t\t\tcase \"b\": {\n\t\t\t\t\tbFound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"c\": {\n\t\t\t\t\tcFound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"d\": {\n\t\t\t\t\tdFound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tassert(false, `Unexpected text segment: ${text}`);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"abcde\");\n\t\tassert.equal(deltaCount, 3);\n\t\tassert(bFound);\n\t\tassert(cFound);\n\t\tassert(dFound);\n\t});\n\tit(\"Should rollback delete and update blocks\", () => {\n\t\tconst text = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()\";\n\t\tfor (const c of text) {\n\t\t\tclient.insertTextLocal(client.getLength(), c);\n\t\t}\n\t\tclient.removeRangeLocal(1, 4);\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\t// The insertion position calculation will be wrong if the blocks aren't updated correctly\n\t\tclient.insertTextLocal(text.length - 1, \"+\");\n\n\t\tconst expectedText = `${text.slice(0, Math.max(0, text.length - 1))}+${\n\t\t\ttext[text.length - 1]\n\t\t}`;\n\t\tassert.equal(client.getText(), expectedText, client.getText());\n\t});\n\tit(\"Should rollback delete and restore local references\", () => {\n\t\tclient.insertTextLocal(0, \"efg\");\n\t\tclient.insertTextLocal(0, \"d\");\n\t\tclient.insertTextLocal(0, \"abc\");\n\t\tconst segInfo1 = client.getContainingSegment<ISegmentPrivate>(2);\n\t\tassert(segInfo1);\n\n\t\tconst segInfo3 = client.getContainingSegment<ISegmentPrivate>(5);\n\t\tassert(segInfo3);\n\n\t\tconst ref1 = client.createLocalReferencePosition(\n\t\t\tsegInfo1.segment,\n\t\t\t0,\n\t\t\tReferenceType.Simple,\n\t\t\tundefined,\n\t\t);\n\t\tconst refSlide = client.createLocalReferencePosition(\n\t\t\tsegInfo1.segment,\n\t\t\t2,\n\t\t\tReferenceType.SlideOnRemove,\n\t\t\tundefined,\n\t\t);\n\t\tconst ref2 = client.createLocalReferencePosition(\n\t\t\tsegInfo3.segment,\n\t\t\t1,\n\t\t\tReferenceType.Simple,\n\t\t\tundefined,\n\t\t);\n\t\tconst refStay = client.createLocalReferencePosition(\n\t\t\tsegInfo3.segment,\n\t\t\t1,\n\t\t\tReferenceType.StayOnRemove,\n\t\t\tundefined,\n\t\t);\n\n\t\tclient.removeRangeLocal(0, 7);\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\tassert.equal(client.getText(), \"abcdefg\");\n\t\tconst segInfo1After = client.getContainingSegment<ISegmentPrivate>(2);\n\t\tassert.notEqual(segInfo1After, undefined);\n\t\tassert.notEqual(segInfo1After?.segment?.localRefs, undefined);\n\t\tassert(segInfo1After?.segment?.localRefs!.has(ref1));\n\t\tassert(segInfo1After?.segment?.localRefs!.has(refSlide));\n\t\tconst segInfo3After = client.getContainingSegment<ISegmentPrivate>(5);\n\t\tassert.notEqual(segInfo3After, undefined);\n\t\tassert.notEqual(segInfo3After?.segment?.localRefs, undefined);\n\t\tassert(segInfo3After?.segment?.localRefs!.has(ref2));\n\t\tassert(segInfo3After?.segment?.localRefs!.has(refStay));\n\t});\n\tit(\"Should zamboni rolled back remove\", () => {\n\t\tclient.applyMsg(\n\t\t\tclient.makeOpMessage(\n\t\t\t\tclient.insertTextLocal(0, \"abcde\", { color: \"red\" }),\n\t\t\t\tclient.getCurrentSeq() + 1,\n\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\tundefined,\n\t\t\t\tclient.getCurrentSeq(),\n\t\t\t),\n\t\t);\n\t\tclient.removeRangeLocal(1, 4);\n\t\tconst segmentGroup = client.peekPendingSegmentGroups() as SegmentGroup;\n\t\tconst segment = segmentGroup.segments[0];\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, segmentGroup);\n\n\t\t// do some work and move the client's min seq forward, so zamboni runs\n\t\tfor (const c of \"hello world\") {\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(\n\t\t\t\t\tclient.insertTextLocal(client.getLength(), c),\n\t\t\t\t\tclient.getCurrentSeq() + 1,\n\t\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\t\tundefined,\n\t\t\t\t\tclient.getCurrentSeq(),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tassert.equal(segment.parent, undefined);\n\t});\n\tit(\"Should rollback multiple overlapping edits\", () => {\n\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\tclient.insertTextLocal(3, \"123\");\n\t\tclient.annotateRangeLocal(2, 5, { foo: \"bar\" });\n\t\tclient.removeRangeLocal(3, 7);\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abc123defg\");\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tif (i >= 2 && i < 5) {\n\t\t\t\tassert.equal(props?.foo, \"bar\");\n\t\t\t} else {\n\t\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t\t}\n\t\t}\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abcdefg\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"\");\n\t});\n\tit(\"Should rollback multiple removes across split segments\", () => {\n\t\tclient.insertTextLocal(0, \"abcde\");\n\t\tclient.insertTextLocal(3, \"123\");\n\t\tclient.insertTextLocal(4, \"xyz\");\n\t\tclient.removeRangeLocal(2, 5);\n\t\tclient.removeRangeLocal(3, 7);\n\t\tclient.removeRangeLocal(2, 4);\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abye\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abyz23de\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abc1xyz23de\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abc123de\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abcde\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"\");\n\t});\n\tit(\"Should annotate a previously removed range\", () => {\n\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\tclient.insertTextLocal(3, \"123\");\n\t\tclient.removeRangeLocal(2, 8);\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abc123defg\");\n\n\t\tclient.annotateRangeLocal(2, 8, { foo: \"bar\" });\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tif (i >= 2 && i < 8) {\n\t\t\t\tassert.equal(props?.foo, \"bar\");\n\t\t\t} else {\n\t\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t\t}\n\t\t}\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"abcdefg\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"\");\n\t});\n\tit(\"Should rollback overlapping annotates and remove\", () => {\n\t\tclient.insertTextLocal(0, \"abc123defg\");\n\t\tclient.annotateRangeLocal(0, 6, { foo: \"one\" });\n\t\tclient.annotateRangeLocal(5, 10, { foo: \"two\" });\n\t\tclient.removeRangeLocal(4, 8);\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getPropertiesAtPosition(4)?.foo, \"one\");\n\t\tassert.equal(client.getPropertiesAtPosition(5)?.foo, \"two\");\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tif (i >= 0 && i < 6) {\n\t\t\t\tassert.equal(props?.foo, \"one\");\n\t\t\t} else {\n\t\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t\t}\n\t\t}\n\t\tclient.rollback({ type: MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t}\n\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\t\tassert.equal(client.getText(), \"\");\n\t});\n\tit(\"Should function properly after rollback with local ops\", () => {\n\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\tclient.removeRangeLocal(1, 5);\n\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\tclient.removeRangeLocal(2, 4);\n\t\tassert.equal(client.getText(), \"abefg\");\n\n\t\tclient.annotateRangeLocal(2, 5, { foo: \"bar\" });\n\t\tfor (let i = 0; i < client.getText().length; i++) {\n\t\t\tconst props = client.getPropertiesAtPosition(i);\n\t\t\tif (i >= 2 && i < 5) {\n\t\t\t\tassert.equal(props?.foo, \"bar\");\n\t\t\t} else {\n\t\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t\t}\n\t\t}\n\n\t\tclient.insertTextLocal(1, \"123\");\n\t\tassert.equal(client.getText(), \"a123befg\");\n\t});\n\tit(\"Should function properly after rollback with external ops\", () => {\n\t\tconst remoteClient = new TestClient();\n\t\tremoteClient.startOrUpdateCollaboration(\"remoteUser\");\n\t\tconst clients = [client, remoteClient];\n\t\tlet seq = 0;\n\t\tconst logger = new TestClientLogger(clients);\n\t\tlogger.validate();\n\n\t\tlet msg = remoteClient.makeOpMessage(remoteClient.insertTextLocal(0, \"12345\"), ++seq);\n\t\tfor (const c of clients) c.applyMsg(msg);\n\t\tlogger.validate({ baseText: \"12345\" });\n\n\t\tclient.removeRangeLocal(1, 4);\n\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\tmsg = remoteClient.makeOpMessage(remoteClient.removeRangeLocal(2, 3), ++seq);\n\t\tfor (const c of clients) {\n\t\t\tc.applyMsg(msg);\n\t\t}\n\n\t\tlogger.validate({ baseText: \"1245\" });\n\n\t\tmsg = remoteClient.makeOpMessage(\n\t\t\tremoteClient.annotateRangeLocal(0, 3, { foo: \"bar\" }),\n\t\t\t++seq,\n\t\t);\n\t\tfor (const c of clients) {\n\t\t\tc.applyMsg(msg);\n\t\t}\n\n\t\tlogger.validate({ baseText: \"1245\" });\n\t\tfor (const c of clients) {\n\t\t\tfor (let i = 0; i < c.getText().length; i++) {\n\t\t\t\tconst props = c.getPropertiesAtPosition(i);\n\t\t\t\tif (i >= 0 && i < 3) {\n\t\t\t\t\tassert.equal(props?.foo, \"bar\");\n\t\t\t\t} else {\n\t\t\t\t\tassert(props === undefined || props.foo === undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tmsg = remoteClient.makeOpMessage(remoteClient.insertTextLocal(3, \"abc\"), ++seq);\n\t\tfor (const c of clients) {\n\t\t\tc.applyMsg(msg);\n\t\t}\n\n\t\tlogger.validate({ baseText: \"124abc5\" });\n\t});\n\n\tit(\"Conflicting insert with winner split by rollback\", () => {\n\t\tconst clients = createClientsAtInitialState({ initialState: \"\" }, \"A\", \"B\");\n\t\tconst logger = new TestClientLogger(clients.all);\n\t\tlet seq = 0;\n\t\tconst ops = [\n\t\t\tclients.A.makeOpMessage(clients.A.insertTextLocal(0, \"AAAAA\"), ++seq),\n\t\t\tclients.B.makeOpMessage(clients.B.insertTextLocal(0, \"BBBBB\"), ++seq),\n\t\t];\n\t\tconst rollbackOp = clients.B.insertTextLocal(2, \"RRRRR\");\n\t\tclients.B.rollback(rollbackOp, clients.B.peekPendingSegmentGroups());\n\n\t\tfor (const op of ops) {\n\t\t\tfor (const c of clients.all) {\n\t\t\t\tc.applyMsg(op);\n\t\t\t}\n\t\t}\n\t\tlogger.validate({ baseText: \"BBBBBAAAAA\" });\n\t});\n});\n"]}
|
|
@@ -373,12 +373,12 @@ describe("TestClient", () => {
|
|
|
373
373
|
});
|
|
374
374
|
it("Should return undefined when trying to find a removed marker", () => {
|
|
375
375
|
client.insertTextLocal(0, "abc");
|
|
376
|
-
client.insertMarkerLocal(
|
|
376
|
+
client.insertMarkerLocal(1, ops_js_1.ReferenceType.Tile, {
|
|
377
377
|
[mergeTreeNodes_js_1.reservedMarkerIdKey]: "marker",
|
|
378
378
|
[referencePositions_js_1.reservedTileLabelsKey]: ["Eop"],
|
|
379
379
|
});
|
|
380
380
|
node_assert_1.strict.equal(client.getLength(), 4, "length not expected");
|
|
381
|
-
client.removeRangeLocal(
|
|
381
|
+
client.removeRangeLocal(1, 2);
|
|
382
382
|
node_assert_1.strict.equal(client.getLength(), 3, "length not expected");
|
|
383
383
|
const marker = client.searchForMarker(0, "Eop", true);
|
|
384
384
|
node_assert_1.strict.equal(marker, undefined, "Returned marker should be undefined");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.searchForMarker.spec.js","sourceRoot":"","sources":["../../src/test/client.searchForMarker.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"node:assert\";\n\nimport { makeRandom } from \"@fluid-private/stochastic-test-utils\";\n\nimport { UniversalSequenceNumber } from \"../constants.js\";\nimport { MaxNodesInBlock, reservedMarkerIdKey } from \"../mergeTreeNodes.js\";\nimport { MergeTreeDeltaType, ReferenceType } from \"../ops.js\";\nimport { reservedTileLabelsKey } from \"../referencePositions.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nimport { TestClient } from \"./testClient.js\";\nimport { createClientsAtInitialState } from \"./testClientLogger.js\";\n\ndescribe(\"TestClient\", () => {\n\tconst localUserLongId = \"localUser\";\n\tlet client: TestClient;\n\n\tbeforeEach(() => {\n\t\tclient = new TestClient();\n\t\tclient.mergeTree.insertSegments(\n\t\t\t0,\n\t\t\t[TextSegment.make(\"\")],\n\t\t\tclient.mergeTree.localPerspective,\n\t\t\tclient.mergeTree.collabWindow.mintNextLocalOperationStamp(),\n\t\t\tundefined,\n\t\t);\n\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t});\n\n\tdescribe(\".searchForMarker\", () => {\n\t\tit(\"Should return marker at the search position in either direction\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return the marker at the search position in either direction from multiple blocks\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcd\");\n\t\t\tclient.insertTextLocal(4, \"efg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 3, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label from client with single marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(1, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 6, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\t\t\tassert.equal(exp, 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position based on label from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 6, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tconst offset = index % 3 === 0 ? index % 3 : 3 - (index % 3);\n\t\t\t\tassert.equal(exp, index + offset, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(exp, index - (index % 3), \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant forward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant backward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from forwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock * 3 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from backwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock * 3 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find marker from client with text length 1\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(client.getLength() - 1, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker1 = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find marker position with index out of bound\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker2 = client.searchForMarker(-1, markerLabel, false);\n\n\t\t\tassert.equal(marker2, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a deleted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.removeRangeLocal(0, 1);\n\n\t\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find an inserted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at 0 searching at 0 in both directions\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(0, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at length-1 searching at length-1 in both directions\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tconst length = client.getLength();\n\t\t\tassert.equal(length, 4);\n\n\t\t\tconst marker = client.searchForMarker(length - 1, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(length - 1, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length > 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length > 1\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from text without the specified marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from null text\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find a removed marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tclient.removeRangeLocal(0, 1);\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined\");\n\t\t});\n\n\t\tdescribe(\"with remote client\", () => {\n\t\t\tconst remoteUserLongId = \"remoteUser\";\n\t\t\tlet client2: TestClient;\n\t\t\tbeforeEach(() => {\n\t\t\t\tclient2 = new TestClient();\n\t\t\t\tclient2.mergeTree.insertSegments(\n\t\t\t\t\t0,\n\t\t\t\t\t[TextSegment.make(\"\")],\n\t\t\t\t\tclient2.mergeTree.localPerspective,\n\t\t\t\t\tclient2.mergeTree.collabWindow.mintNextLocalOperationStamp(),\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\t\t\t\tclient2.startOrUpdateCollaboration(remoteUserLongId);\n\t\t\t});\n\n\t\t\tit(\"Should be able to find remotely inserted marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst markerMsg = client2.makeOpMessage(\n\t\t\t\t\tclient2.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\t++seq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(markerMsg);\n\t\t\t\tclient2.applyMsg(markerMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert(marker, \"Returned marker undefined\");\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t\t});\n\n\t\t\tit(\"Should not be able to find remotely removed marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst mInsertMsg = client.makeOpMessage(\n\t\t\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\t++seq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(mInsertMsg);\n\t\t\t\tclient2.applyMsg(mInsertMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst mRemoveMsg = client2.makeOpMessage(client2.removeRangeLocal(0, 1), ++seq);\n\t\t\t\tclient.applyMsg(mRemoveMsg);\n\t\t\t\tclient2.applyMsg(mRemoveMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 3, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 3, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t\t});\n\t\t});\n\t});\n\tdescribe(\".getMarkerById\", () => {\n\t\tit(\"removed marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState({ initialState: \"hello world\" }, \"A\", \"B\");\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.removeRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove after ack\",\n\t\t\t);\n\t\t});\n\t\tit(\"obliterate marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState(\n\t\t\t\t{ initialState: \"hello world\", options: { mergeTreeEnableObliterate: true } },\n\t\t\t\t\"A\",\n\t\t\t\t\"B\",\n\t\t\t);\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.obliterateRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate after ack\",\n\t\t\t);\n\t\t});\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"client.searchForMarker.spec.js","sourceRoot":"","sources":["../../src/test/client.searchForMarker.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"node:assert\";\n\nimport { makeRandom } from \"@fluid-private/stochastic-test-utils\";\n\nimport { UniversalSequenceNumber } from \"../constants.js\";\nimport { MaxNodesInBlock, reservedMarkerIdKey } from \"../mergeTreeNodes.js\";\nimport { MergeTreeDeltaType, ReferenceType } from \"../ops.js\";\nimport { reservedTileLabelsKey } from \"../referencePositions.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nimport { TestClient } from \"./testClient.js\";\nimport { createClientsAtInitialState } from \"./testClientLogger.js\";\n\ndescribe(\"TestClient\", () => {\n\tconst localUserLongId = \"localUser\";\n\tlet client: TestClient;\n\n\tbeforeEach(() => {\n\t\tclient = new TestClient();\n\t\tclient.mergeTree.insertSegments(\n\t\t\t0,\n\t\t\t[TextSegment.make(\"\")],\n\t\t\tclient.mergeTree.localPerspective,\n\t\t\tclient.mergeTree.collabWindow.mintNextLocalOperationStamp(),\n\t\t\tundefined,\n\t\t);\n\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t});\n\n\tdescribe(\".searchForMarker\", () => {\n\t\tit(\"Should return marker at the search position in either direction\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return the marker at the search position in either direction from multiple blocks\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcd\");\n\t\t\tclient.insertTextLocal(4, \"efg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 3, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label from client with single marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(1, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 6, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\t\t\tassert.equal(exp, 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position based on label from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 6, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tconst offset = index % 3 === 0 ? index % 3 : 3 - (index % 3);\n\t\t\t\tassert.equal(exp, index + offset, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(exp, index - (index % 3), \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant forward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant backward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from forwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock * 3 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from backwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock * 3 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find marker from client with text length 1\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(client.getLength() - 1, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker1 = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find marker position with index out of bound\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker2 = client.searchForMarker(-1, markerLabel, false);\n\n\t\t\tassert.equal(marker2, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a deleted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.removeRangeLocal(0, 1);\n\n\t\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find an inserted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at 0 searching at 0 in both directions\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(0, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at length-1 searching at length-1 in both directions\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tconst length = client.getLength();\n\t\t\tassert.equal(length, 4);\n\n\t\t\tconst marker = client.searchForMarker(length - 1, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(length - 1, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length > 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length > 1\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from text without the specified marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from null text\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find a removed marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(1, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tclient.removeRangeLocal(1, 2);\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined\");\n\t\t});\n\n\t\tdescribe(\"with remote client\", () => {\n\t\t\tconst remoteUserLongId = \"remoteUser\";\n\t\t\tlet client2: TestClient;\n\t\t\tbeforeEach(() => {\n\t\t\t\tclient2 = new TestClient();\n\t\t\t\tclient2.mergeTree.insertSegments(\n\t\t\t\t\t0,\n\t\t\t\t\t[TextSegment.make(\"\")],\n\t\t\t\t\tclient2.mergeTree.localPerspective,\n\t\t\t\t\tclient2.mergeTree.collabWindow.mintNextLocalOperationStamp(),\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\t\t\t\tclient2.startOrUpdateCollaboration(remoteUserLongId);\n\t\t\t});\n\n\t\t\tit(\"Should be able to find remotely inserted marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst markerMsg = client2.makeOpMessage(\n\t\t\t\t\tclient2.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\t++seq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(markerMsg);\n\t\t\t\tclient2.applyMsg(markerMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert(marker, \"Returned marker undefined\");\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t\t});\n\n\t\t\tit(\"Should not be able to find remotely removed marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst mInsertMsg = client.makeOpMessage(\n\t\t\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\t++seq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(mInsertMsg);\n\t\t\t\tclient2.applyMsg(mInsertMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst mRemoveMsg = client2.makeOpMessage(client2.removeRangeLocal(0, 1), ++seq);\n\t\t\t\tclient.applyMsg(mRemoveMsg);\n\t\t\t\tclient2.applyMsg(mRemoveMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 3, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 3, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t\t});\n\t\t});\n\t});\n\tdescribe(\".getMarkerById\", () => {\n\t\tit(\"removed marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState({ initialState: \"hello world\" }, \"A\", \"B\");\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.removeRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove after ack\",\n\t\t\t);\n\t\t});\n\t\tit(\"obliterate marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState(\n\t\t\t\t{ initialState: \"hello world\", options: { mergeTreeEnableObliterate: true } },\n\t\t\t\t\"A\",\n\t\t\t\t\"B\",\n\t\t\t);\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.obliterateRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate after ack\",\n\t\t\t);\n\t\t});\n\t});\n});\n"]}
|
|
@@ -183,7 +183,7 @@ class ClientTestHelper {
|
|
|
183
183
|
this.disconnectedClientOps.delete(clientName);
|
|
184
184
|
const client = this.clients[clientName];
|
|
185
185
|
for (const { op, segmentGroup } of submittedOps) {
|
|
186
|
-
const rebasedOp = client.regeneratePendingOp(op, segmentGroup);
|
|
186
|
+
const rebasedOp = client.regeneratePendingOp(op, segmentGroup, false);
|
|
187
187
|
this.addMessage(client, rebasedOp);
|
|
188
188
|
}
|
|
189
189
|
}
|