@fluidframework/merge-tree 2.0.0-rc.1.0.3 → 2.0.0-rc.2.0.0
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/{.eslintrc.js → .eslintrc.cjs} +4 -1
- package/{.mocharc.js → .mocharc.cjs} +1 -1
- package/CHANGELOG.md +4 -0
- package/api-extractor-cjs.json +8 -0
- package/api-extractor-lint.json +1 -1
- package/api-extractor.json +1 -9
- package/api-report/merge-tree.api.md +6 -12
- package/dist/MergeTreeTextHelper.d.ts +2 -2
- package/dist/MergeTreeTextHelper.d.ts.map +1 -1
- package/dist/MergeTreeTextHelper.js +3 -3
- package/dist/MergeTreeTextHelper.js.map +1 -1
- package/dist/attributionCollection.d.ts +1 -1
- package/dist/attributionCollection.d.ts.map +1 -1
- package/dist/attributionCollection.js.map +1 -1
- package/dist/attributionPolicy.d.ts +1 -1
- package/dist/attributionPolicy.d.ts.map +1 -1
- package/dist/attributionPolicy.js +15 -15
- package/dist/attributionPolicy.js.map +1 -1
- package/dist/client.d.ts +31 -12
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +103 -92
- package/dist/client.js.map +1 -1
- package/dist/collections/index.d.ts +2 -2
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/collections/index.js +6 -6
- package/dist/collections/index.js.map +1 -1
- package/dist/endOfTreeSegment.d.ts +3 -3
- package/dist/endOfTreeSegment.d.ts.map +1 -1
- package/dist/endOfTreeSegment.js +8 -8
- package/dist/endOfTreeSegment.js.map +1 -1
- package/dist/index.d.ts +20 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +71 -71
- package/dist/index.js.map +1 -1
- package/dist/localReference.d.ts +9 -39
- package/dist/localReference.d.ts.map +1 -1
- package/dist/localReference.js +29 -24
- package/dist/localReference.js.map +1 -1
- package/dist/merge-tree-alpha.d.ts +28 -450
- package/dist/merge-tree-beta.d.ts +0 -438
- package/dist/merge-tree-public.d.ts +0 -438
- package/dist/merge-tree-untrimmed.d.ts +28 -787
- package/dist/mergeTree.d.ts +11 -19
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +201 -189
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeDeltaCallback.d.ts +3 -7
- package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/dist/mergeTreeDeltaCallback.js.map +1 -1
- package/dist/mergeTreeNodeWalk.d.ts +1 -1
- package/dist/mergeTreeNodeWalk.d.ts.map +1 -1
- package/dist/mergeTreeNodeWalk.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +17 -14
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +32 -32
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/mergeTreeTracking.d.ts +2 -2
- package/dist/mergeTreeTracking.d.ts.map +1 -1
- package/dist/mergeTreeTracking.js +2 -2
- package/dist/mergeTreeTracking.js.map +1 -1
- package/dist/opBuilder.d.ts +3 -3
- package/dist/opBuilder.d.ts.map +1 -1
- package/dist/opBuilder.js +7 -7
- package/dist/opBuilder.js.map +1 -1
- package/dist/package.json +3 -0
- package/dist/partialLengths.d.ts +5 -5
- package/dist/partialLengths.d.ts.map +1 -1
- package/dist/partialLengths.js +29 -29
- package/dist/partialLengths.js.map +1 -1
- package/dist/referencePositions.d.ts +4 -4
- package/dist/referencePositions.d.ts.map +1 -1
- package/dist/referencePositions.js +2 -2
- package/dist/referencePositions.js.map +1 -1
- package/dist/revertibles.d.ts +7 -7
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +39 -39
- package/dist/revertibles.js.map +1 -1
- package/dist/segmentGroupCollection.d.ts +1 -1
- package/dist/segmentGroupCollection.d.ts.map +1 -1
- package/dist/segmentGroupCollection.js +3 -3
- package/dist/segmentGroupCollection.js.map +1 -1
- package/dist/segmentPropertiesManager.d.ts +2 -2
- package/dist/segmentPropertiesManager.d.ts.map +1 -1
- package/dist/segmentPropertiesManager.js +8 -8
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/snapshotChunks.d.ts +3 -3
- package/dist/snapshotChunks.d.ts.map +1 -1
- package/dist/snapshotChunks.js +5 -5
- package/dist/snapshotChunks.js.map +1 -1
- package/dist/snapshotLoader.d.ts +3 -3
- package/dist/snapshotLoader.d.ts.map +1 -1
- package/dist/snapshotLoader.js +19 -19
- package/dist/snapshotLoader.js.map +1 -1
- package/dist/snapshotV1.d.ts +3 -3
- package/dist/snapshotV1.d.ts.map +1 -1
- package/dist/snapshotV1.js +35 -18
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.d.ts +2 -2
- package/dist/snapshotlegacy.d.ts.map +1 -1
- package/dist/snapshotlegacy.js +22 -10
- package/dist/snapshotlegacy.js.map +1 -1
- package/dist/sortedSegmentSet.d.ts +3 -3
- package/dist/sortedSegmentSet.d.ts.map +1 -1
- package/dist/sortedSegmentSet.js +7 -5
- package/dist/sortedSegmentSet.js.map +1 -1
- package/dist/test/Insertion.perf.spec.js +15 -15
- package/dist/test/Insertion.perf.spec.js.map +1 -1
- package/dist/test/PartialLengths.perf.spec.js +13 -13
- package/dist/test/PartialLengths.perf.spec.js.map +1 -1
- package/dist/test/Removal.perf.spec.js +25 -25
- package/dist/test/Removal.perf.spec.js.map +1 -1
- package/dist/test/Snapshot.perf.spec.js +3 -3
- package/dist/test/Snapshot.perf.spec.js.map +1 -1
- package/dist/test/attributionCollection.perf.spec.js +9 -9
- package/dist/test/attributionCollection.perf.spec.js.map +1 -1
- package/dist/test/attributionCollection.spec.js +46 -46
- package/dist/test/attributionCollection.spec.js.map +1 -1
- package/dist/test/attributionPolicy.spec.js +13 -13
- package/dist/test/attributionPolicy.spec.js.map +1 -1
- package/dist/test/{beastTest.d.ts → beastTest.spec.d.ts} +3 -3
- package/dist/test/beastTest.spec.d.ts.map +1 -0
- package/dist/test/{beastTest.js → beastTest.spec.js} +120 -119
- package/dist/test/beastTest.spec.js.map +1 -0
- package/dist/test/client.annotateMarker.spec.js +13 -13
- package/dist/test/client.annotateMarker.spec.js.map +1 -1
- package/dist/test/{client.apis.d.ts → client.apis.spec.d.ts} +1 -1
- package/dist/test/client.apis.spec.d.ts.map +1 -0
- package/dist/test/{client.apis.js → client.apis.spec.js} +8 -8
- package/dist/test/client.apis.spec.js.map +1 -0
- package/dist/test/client.applyMsg.spec.js +106 -43
- package/dist/test/client.applyMsg.spec.js.map +1 -1
- package/dist/test/client.applyStashedOpFarm.spec.d.ts +1 -1
- package/dist/test/client.applyStashedOpFarm.spec.d.ts.map +1 -1
- package/dist/test/client.applyStashedOpFarm.spec.js +33 -21
- package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/dist/test/client.attributionFarm.spec.d.ts +1 -1
- package/dist/test/client.attributionFarm.spec.d.ts.map +1 -1
- package/dist/test/client.attributionFarm.spec.js +13 -13
- package/dist/test/client.attributionFarm.spec.js.map +1 -1
- package/dist/test/client.conflictFarm.spec.d.ts +1 -1
- package/dist/test/client.conflictFarm.spec.d.ts.map +1 -1
- package/dist/test/client.conflictFarm.spec.js +9 -9
- package/dist/test/client.conflictFarm.spec.js.map +1 -1
- package/dist/test/client.getPosition.spec.js +4 -4
- package/dist/test/client.getPosition.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js +140 -109
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.localReferenceFarm.spec.js +18 -18
- package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
- package/dist/test/client.rebasePosition.spec.js +2 -2
- package/dist/test/client.rebasePosition.spec.js.map +1 -1
- package/dist/test/client.reconnectFarm.spec.d.ts +1 -1
- package/dist/test/client.reconnectFarm.spec.d.ts.map +1 -1
- package/dist/test/client.reconnectFarm.spec.js +10 -10
- package/dist/test/client.reconnectFarm.spec.js.map +1 -1
- package/dist/test/client.replay.spec.js +11 -11
- package/dist/test/client.replay.spec.js.map +1 -1
- package/dist/test/client.rollback.spec.js +83 -83
- package/dist/test/client.rollback.spec.js.map +1 -1
- package/dist/test/client.rollbackFarm.spec.js +9 -9
- package/dist/test/client.rollbackFarm.spec.js.map +1 -1
- package/dist/test/client.searchForMarker.spec.js +137 -137
- package/dist/test/client.searchForMarker.spec.js.map +1 -1
- package/dist/test/client.walkSegments.spec.js +2 -2
- package/dist/test/client.walkSegments.spec.js.map +1 -1
- package/dist/test/collections.list.spec.js +4 -4
- package/dist/test/collections.list.spec.js.map +1 -1
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js +4 -4
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
- package/dist/test/dirname.cjs +16 -0
- package/dist/test/dirname.cjs.map +1 -0
- package/dist/test/dirname.d.cts +6 -0
- package/dist/test/dirname.d.cts.map +1 -0
- package/dist/test/index.d.ts +8 -8
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +82 -81
- package/dist/test/index.js.map +1 -1
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js +39 -39
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.annotate.spec.js +39 -39
- package/dist/test/mergeTree.annotate.spec.js.map +1 -1
- package/dist/test/mergeTree.insert.deltaCallback.spec.js +35 -35
- package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.insertingWalk.spec.js +77 -77
- package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +42 -42
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js +15 -15
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/dist/test/mergeTree.walk.spec.js +14 -14
- package/dist/test/mergeTree.walk.spec.js.map +1 -1
- package/dist/test/mergeTree.zamboni.spec.js +9 -9
- package/dist/test/mergeTree.zamboni.spec.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.d.ts +4 -4
- package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/dist/test/mergeTreeOperationRunner.js +16 -15
- package/dist/test/mergeTreeOperationRunner.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.spec.js +5 -5
- package/dist/test/mergeTreeOperationRunner.spec.js.map +1 -1
- package/dist/test/obliterate.concurrent.spec.js +85 -88
- package/dist/test/obliterate.concurrent.spec.js.map +1 -1
- package/dist/test/obliterate.deltaCallback.spec.d.ts +6 -0
- package/dist/test/obliterate.deltaCallback.spec.d.ts.map +1 -0
- package/dist/test/obliterate.deltaCallback.spec.js +146 -0
- package/dist/test/obliterate.deltaCallback.spec.js.map +1 -0
- package/dist/test/obliterate.partialLength.spec.js +39 -44
- package/dist/test/obliterate.partialLength.spec.js.map +1 -1
- package/dist/test/obliterate.reconnect.spec.js +15 -18
- package/dist/test/obliterate.reconnect.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +16 -16
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/ordinal.spec.js +5 -5
- package/dist/test/ordinal.spec.js.map +1 -1
- package/dist/test/partialLength.spec.js +58 -64
- package/dist/test/partialLength.spec.js.map +1 -1
- package/dist/test/properties.spec.js +15 -15
- package/dist/test/properties.spec.js.map +1 -1
- package/dist/test/reconnectHelper.d.ts +8 -8
- package/dist/test/reconnectHelper.d.ts.map +1 -1
- package/dist/test/reconnectHelper.js +3 -3
- package/dist/test/reconnectHelper.js.map +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js +18 -18
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/dist/test/revertibleFarm.spec.js +21 -21
- package/dist/test/revertibleFarm.spec.js.map +1 -1
- package/dist/test/revertibles.spec.js +67 -67
- package/dist/test/revertibles.spec.js.map +1 -1
- package/dist/test/segmentGroupCollection.spec.js +3 -3
- package/dist/test/segmentGroupCollection.spec.js.map +1 -1
- package/dist/test/snapshot.spec.js +16 -16
- package/dist/test/snapshot.spec.js.map +1 -1
- package/dist/test/snapshot.utils.d.ts +4 -4
- package/dist/test/snapshot.utils.d.ts.map +1 -1
- package/dist/test/snapshot.utils.js +11 -11
- package/dist/test/snapshot.utils.js.map +1 -1
- package/dist/test/snapshotlegacy.spec.js +22 -22
- package/dist/test/snapshotlegacy.spec.js.map +1 -1
- package/dist/test/sortedSegmentSet.spec.js +9 -9
- package/dist/test/sortedSegmentSet.spec.js.map +1 -1
- package/dist/test/testClient.d.ts +13 -16
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js +57 -59
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testClientLogger.d.ts +3 -3
- package/dist/test/testClientLogger.d.ts.map +1 -1
- package/dist/test/testClientLogger.js +19 -19
- package/dist/test/testClientLogger.js.map +1 -1
- package/dist/test/testServer.d.ts +3 -3
- package/dist/test/testServer.d.ts.map +1 -1
- package/dist/test/testServer.js +8 -8
- package/dist/test/testServer.js.map +1 -1
- package/dist/test/testUtils.d.ts +14 -6
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +36 -17
- package/dist/test/testUtils.js.map +1 -1
- package/dist/test/text.d.ts +2 -2
- package/dist/test/text.d.ts.map +1 -1
- package/dist/test/text.js +10 -10
- package/dist/test/text.js.map +1 -1
- package/dist/test/tracking.spec.js +12 -12
- package/dist/test/tracking.spec.js.map +1 -1
- package/dist/test/{wordUnitTests.d.ts → wordUnitTests.spec.d.ts} +1 -1
- package/dist/test/wordUnitTests.spec.d.ts.map +1 -0
- package/dist/test/{wordUnitTests.js → wordUnitTests.spec.js} +16 -15
- package/dist/test/wordUnitTests.spec.js.map +1 -0
- package/dist/textSegment.d.ts +3 -3
- package/dist/textSegment.d.ts.map +1 -1
- package/dist/textSegment.js +2 -2
- package/dist/textSegment.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/dist/zamboni.d.ts +2 -2
- package/dist/zamboni.d.ts.map +1 -1
- package/dist/zamboni.js +19 -19
- package/dist/zamboni.js.map +1 -1
- package/lib/{MergeTreeTextHelper.d.mts → MergeTreeTextHelper.d.ts} +3 -3
- package/lib/MergeTreeTextHelper.d.ts.map +1 -0
- package/lib/{MergeTreeTextHelper.mjs → MergeTreeTextHelper.js} +3 -2
- package/lib/MergeTreeTextHelper.js.map +1 -0
- package/lib/{attributionCollection.d.mts → attributionCollection.d.ts} +2 -2
- package/lib/attributionCollection.d.ts.map +1 -0
- package/lib/{attributionCollection.mjs → attributionCollection.js} +1 -1
- package/lib/attributionCollection.js.map +1 -0
- package/lib/{attributionPolicy.d.mts → attributionPolicy.d.ts} +2 -2
- package/lib/attributionPolicy.d.ts.map +1 -0
- package/lib/{attributionPolicy.mjs → attributionPolicy.js} +4 -4
- package/lib/attributionPolicy.js.map +1 -0
- package/lib/{client.d.mts → client.d.ts} +32 -13
- package/lib/client.d.ts.map +1 -0
- package/lib/{client.mjs → client.js} +42 -31
- package/lib/client.js.map +1 -0
- package/lib/collections/{index.d.mts → index.d.ts} +3 -3
- package/lib/collections/index.d.ts.map +1 -0
- package/lib/collections/index.js +7 -0
- package/lib/collections/index.js.map +1 -0
- package/lib/collections/{list.d.mts → list.d.ts} +1 -1
- package/lib/collections/list.d.ts.map +1 -0
- package/lib/collections/{list.mjs → list.js} +1 -1
- package/lib/collections/list.js.map +1 -0
- package/lib/collections/{rbTree.d.mts → rbTree.d.ts} +1 -1
- package/lib/collections/rbTree.d.ts.map +1 -0
- package/lib/collections/{rbTree.mjs → rbTree.js} +1 -1
- package/lib/collections/rbTree.js.map +1 -0
- package/lib/{constants.d.mts → constants.d.ts} +1 -1
- package/lib/constants.d.ts.map +1 -0
- package/lib/{constants.mjs → constants.js} +1 -1
- package/lib/constants.js.map +1 -0
- package/lib/{endOfTreeSegment.d.mts → endOfTreeSegment.d.ts} +4 -4
- package/lib/endOfTreeSegment.d.ts.map +1 -0
- package/lib/{endOfTreeSegment.mjs → endOfTreeSegment.js} +3 -3
- package/lib/endOfTreeSegment.js.map +1 -0
- package/lib/{index.d.mts → index.d.ts} +21 -21
- package/lib/index.d.ts.map +1 -0
- package/lib/{index.mjs → index.js} +20 -20
- package/lib/index.js.map +1 -0
- package/lib/{localReference.d.mts → localReference.d.ts} +10 -40
- package/lib/localReference.d.ts.map +1 -0
- package/lib/{localReference.mjs → localReference.js} +12 -6
- package/lib/localReference.js.map +1 -0
- package/lib/{merge-tree-alpha.d.mts → merge-tree-alpha.d.ts} +28 -450
- package/lib/merge-tree-beta.d.ts +230 -0
- package/lib/merge-tree-public.d.ts +230 -0
- package/lib/{merge-tree-untrimmed.d.mts → merge-tree-untrimmed.d.ts} +28 -787
- package/lib/{mergeTree.d.mts → mergeTree.d.ts} +12 -20
- package/lib/mergeTree.d.ts.map +1 -0
- package/lib/{mergeTree.mjs → mergeTree.js} +47 -32
- package/lib/mergeTree.js.map +1 -0
- package/lib/{mergeTreeDeltaCallback.d.mts → mergeTreeDeltaCallback.d.ts} +8 -8
- package/lib/mergeTreeDeltaCallback.d.ts.map +1 -0
- package/lib/{mergeTreeDeltaCallback.mjs → mergeTreeDeltaCallback.js} +1 -1
- package/lib/mergeTreeDeltaCallback.js.map +1 -0
- package/lib/{mergeTreeNodeWalk.d.mts → mergeTreeNodeWalk.d.ts} +2 -2
- package/lib/mergeTreeNodeWalk.d.ts.map +1 -0
- package/lib/{mergeTreeNodeWalk.mjs → mergeTreeNodeWalk.js} +1 -1
- package/lib/mergeTreeNodeWalk.js.map +1 -0
- package/lib/{mergeTreeNodes.d.mts → mergeTreeNodes.d.ts} +18 -15
- package/lib/mergeTreeNodes.d.ts.map +1 -0
- package/lib/{mergeTreeNodes.mjs → mergeTreeNodes.js} +12 -10
- package/lib/mergeTreeNodes.js.map +1 -0
- package/lib/{mergeTreeTracking.d.mts → mergeTreeTracking.d.ts} +3 -3
- package/lib/mergeTreeTracking.d.ts.map +1 -0
- package/lib/{mergeTreeTracking.mjs → mergeTreeTracking.js} +3 -2
- package/lib/mergeTreeTracking.js.map +1 -0
- package/lib/{opBuilder.d.mts → opBuilder.d.ts} +4 -4
- package/lib/{opBuilder.d.mts.map → opBuilder.d.ts.map} +1 -1
- package/lib/{opBuilder.mjs → opBuilder.js} +2 -2
- package/lib/opBuilder.js.map +1 -0
- package/lib/{ops.d.mts → ops.d.ts} +1 -1
- package/lib/ops.d.ts.map +1 -0
- package/lib/{ops.mjs → ops.js} +1 -1
- package/lib/ops.js.map +1 -0
- package/lib/{ordinal.d.mts → ordinal.d.ts} +1 -1
- package/lib/ordinal.d.ts.map +1 -0
- package/lib/{ordinal.mjs → ordinal.js} +2 -1
- package/lib/ordinal.js.map +1 -0
- package/lib/{partialLengths.d.mts → partialLengths.d.ts} +6 -6
- package/lib/partialLengths.d.ts.map +1 -0
- package/lib/{partialLengths.mjs → partialLengths.js} +11 -10
- package/lib/partialLengths.js.map +1 -0
- package/lib/{properties.d.mts → properties.d.ts} +1 -1
- package/lib/properties.d.ts.map +1 -0
- package/lib/{properties.mjs → properties.js} +1 -1
- package/lib/properties.js.map +1 -0
- package/lib/{referencePositions.d.mts → referencePositions.d.ts} +5 -5
- package/lib/referencePositions.d.ts.map +1 -0
- package/lib/{referencePositions.mjs → referencePositions.js} +2 -2
- package/lib/referencePositions.js.map +1 -0
- package/lib/{revertibles.d.mts → revertibles.d.ts} +8 -8
- package/lib/revertibles.d.ts.map +1 -0
- package/lib/{revertibles.mjs → revertibles.js} +13 -13
- package/lib/revertibles.js.map +1 -0
- package/lib/{segmentGroupCollection.d.mts → segmentGroupCollection.d.ts} +2 -2
- package/lib/segmentGroupCollection.d.ts.map +1 -0
- package/lib/{segmentGroupCollection.mjs → segmentGroupCollection.js} +2 -2
- package/lib/segmentGroupCollection.js.map +1 -0
- package/lib/{segmentPropertiesManager.d.mts → segmentPropertiesManager.d.ts} +3 -3
- package/lib/segmentPropertiesManager.d.ts.map +1 -0
- package/lib/{segmentPropertiesManager.mjs → segmentPropertiesManager.js} +5 -3
- package/lib/segmentPropertiesManager.js.map +1 -0
- package/lib/{snapshotChunks.d.mts → snapshotChunks.d.ts} +4 -4
- package/lib/snapshotChunks.d.ts.map +1 -0
- package/lib/{snapshotChunks.mjs → snapshotChunks.js} +2 -2
- package/lib/snapshotChunks.js.map +1 -0
- package/lib/{snapshotLoader.d.mts → snapshotLoader.d.ts} +4 -4
- package/lib/snapshotLoader.d.ts.map +1 -0
- package/lib/{snapshotLoader.mjs → snapshotLoader.js} +10 -9
- package/lib/snapshotLoader.js.map +1 -0
- package/lib/{snapshotV1.d.mts → snapshotV1.d.ts} +4 -4
- package/lib/snapshotV1.d.ts.map +1 -0
- package/lib/{snapshotV1.mjs → snapshotV1.js} +24 -7
- package/lib/snapshotV1.js.map +1 -0
- package/lib/{snapshotlegacy.d.mts → snapshotlegacy.d.ts} +3 -3
- package/lib/snapshotlegacy.d.ts.map +1 -0
- package/lib/{snapshotlegacy.mjs → snapshotlegacy.js} +17 -4
- package/lib/snapshotlegacy.js.map +1 -0
- package/lib/{sortedSegmentSet.d.mts → sortedSegmentSet.d.ts} +4 -4
- package/lib/sortedSegmentSet.d.ts.map +1 -0
- package/lib/{sortedSegmentSet.mjs → sortedSegmentSet.js} +8 -5
- package/lib/sortedSegmentSet.js.map +1 -0
- package/lib/{sortedSet.d.mts → sortedSet.d.ts} +1 -1
- package/lib/sortedSet.d.ts.map +1 -0
- package/lib/{sortedSet.mjs → sortedSet.js} +1 -1
- package/lib/sortedSet.js.map +1 -0
- package/lib/test/Insertion.perf.spec.d.ts +6 -0
- package/lib/test/Insertion.perf.spec.d.ts.map +1 -0
- package/lib/test/Insertion.perf.spec.js +111 -0
- package/lib/test/Insertion.perf.spec.js.map +1 -0
- package/lib/test/PartialLengths.perf.spec.d.ts +6 -0
- package/lib/test/PartialLengths.perf.spec.d.ts.map +1 -0
- package/lib/test/PartialLengths.perf.spec.js +65 -0
- package/lib/test/PartialLengths.perf.spec.js.map +1 -0
- package/lib/test/Removal.perf.spec.d.ts +6 -0
- package/lib/test/Removal.perf.spec.d.ts.map +1 -0
- package/lib/test/Removal.perf.spec.js +164 -0
- package/lib/test/Removal.perf.spec.js.map +1 -0
- package/lib/test/Snapshot.perf.spec.d.ts +6 -0
- package/lib/test/Snapshot.perf.spec.d.ts.map +1 -0
- package/lib/test/Snapshot.perf.spec.js +31 -0
- package/lib/test/Snapshot.perf.spec.js.map +1 -0
- package/lib/test/attributionCollection.perf.spec.d.ts +6 -0
- package/lib/test/attributionCollection.perf.spec.d.ts.map +1 -0
- package/lib/test/attributionCollection.perf.spec.js +229 -0
- package/lib/test/attributionCollection.perf.spec.js.map +1 -0
- package/lib/test/attributionCollection.spec.d.ts +6 -0
- package/lib/test/attributionCollection.spec.d.ts.map +1 -0
- package/lib/test/attributionCollection.spec.js +484 -0
- package/lib/test/attributionCollection.spec.js.map +1 -0
- package/lib/test/attributionPolicy.spec.d.ts +6 -0
- package/lib/test/attributionPolicy.spec.d.ts.map +1 -0
- package/lib/test/attributionPolicy.spec.js +187 -0
- package/lib/test/attributionPolicy.spec.js.map +1 -0
- package/lib/test/beastTest.spec.d.ts +54 -0
- package/lib/test/beastTest.spec.d.ts.map +1 -0
- package/lib/test/beastTest.spec.js +1318 -0
- package/lib/test/beastTest.spec.js.map +1 -0
- package/lib/test/client.annotateMarker.spec.d.ts +6 -0
- package/lib/test/client.annotateMarker.spec.d.ts.map +1 -0
- package/lib/test/client.annotateMarker.spec.js +43 -0
- package/lib/test/client.annotateMarker.spec.js.map +1 -0
- package/lib/test/client.apis.spec.d.ts +7 -0
- package/lib/test/client.apis.spec.d.ts.map +1 -0
- package/lib/test/client.apis.spec.js +67 -0
- package/lib/test/client.apis.spec.js.map +1 -0
- package/lib/test/client.applyMsg.spec.d.ts +6 -0
- package/lib/test/client.applyMsg.spec.d.ts.map +1 -0
- package/lib/test/client.applyMsg.spec.js +561 -0
- package/lib/test/client.applyMsg.spec.js.map +1 -0
- package/lib/test/client.applyStashedOpFarm.spec.d.ts +12 -0
- package/lib/test/client.applyStashedOpFarm.spec.d.ts.map +1 -0
- package/lib/test/client.applyStashedOpFarm.spec.js +153 -0
- package/lib/test/client.applyStashedOpFarm.spec.js.map +1 -0
- package/lib/test/client.attributionFarm.spec.d.ts +7 -0
- package/lib/test/client.attributionFarm.spec.d.ts.map +1 -0
- package/lib/test/client.attributionFarm.spec.js +92 -0
- package/lib/test/client.attributionFarm.spec.js.map +1 -0
- package/lib/test/client.conflictFarm.spec.d.ts +15 -0
- package/lib/test/client.conflictFarm.spec.d.ts.map +1 -0
- package/lib/test/client.conflictFarm.spec.js +85 -0
- package/lib/test/client.conflictFarm.spec.js.map +1 -0
- package/lib/test/client.getPosition.spec.d.ts +6 -0
- package/lib/test/client.getPosition.spec.d.ts.map +1 -0
- package/lib/test/client.getPosition.spec.js +52 -0
- package/lib/test/client.getPosition.spec.js.map +1 -0
- package/lib/test/client.localReference.spec.d.ts +6 -0
- package/lib/test/client.localReference.spec.d.ts.map +1 -0
- package/lib/test/client.localReference.spec.js +468 -0
- package/lib/test/client.localReference.spec.js.map +1 -0
- package/lib/test/client.localReferenceFarm.spec.d.ts +6 -0
- package/lib/test/client.localReferenceFarm.spec.d.ts.map +1 -0
- package/lib/test/client.localReferenceFarm.spec.js +86 -0
- package/lib/test/client.localReferenceFarm.spec.js.map +1 -0
- package/lib/test/client.rebasePosition.spec.d.ts +6 -0
- package/lib/test/client.rebasePosition.spec.d.ts.map +1 -0
- package/lib/test/client.rebasePosition.spec.js +100 -0
- package/lib/test/client.rebasePosition.spec.js.map +1 -0
- package/lib/test/client.reconnectFarm.spec.d.ts +12 -0
- package/lib/test/client.reconnectFarm.spec.d.ts.map +1 -0
- package/lib/test/client.reconnectFarm.spec.js +88 -0
- package/lib/test/client.reconnectFarm.spec.js.map +1 -0
- package/lib/test/client.replay.spec.d.ts +6 -0
- package/lib/test/client.replay.spec.d.ts.map +1 -0
- package/lib/test/client.replay.spec.js +57 -0
- package/lib/test/client.replay.spec.js.map +1 -0
- package/lib/test/client.rollback.spec.d.ts +6 -0
- package/lib/test/client.rollback.spec.d.ts.map +1 -0
- package/lib/test/client.rollback.spec.js +451 -0
- package/lib/test/client.rollback.spec.js.map +1 -0
- package/lib/test/client.rollbackFarm.spec.d.ts +6 -0
- package/lib/test/client.rollbackFarm.spec.d.ts.map +1 -0
- package/lib/test/client.rollbackFarm.spec.js +46 -0
- package/lib/test/client.rollbackFarm.spec.js.map +1 -0
- package/lib/test/client.searchForMarker.spec.d.ts +6 -0
- package/lib/test/client.searchForMarker.spec.d.ts.map +1 -0
- package/lib/test/client.searchForMarker.spec.js +495 -0
- package/lib/test/client.searchForMarker.spec.js.map +1 -0
- package/lib/test/client.walkSegments.spec.d.ts +6 -0
- package/lib/test/client.walkSegments.spec.d.ts.map +1 -0
- package/lib/test/client.walkSegments.spec.js +52 -0
- package/lib/test/client.walkSegments.spec.js.map +1 -0
- package/lib/test/collections.list.spec.d.ts +6 -0
- package/lib/test/collections.list.spec.d.ts.map +1 -0
- package/lib/test/collections.list.spec.js +82 -0
- package/lib/test/collections.list.spec.js.map +1 -0
- package/lib/test/createInsertOnlyAttributionPolicy.spec.d.ts +6 -0
- package/lib/test/createInsertOnlyAttributionPolicy.spec.d.ts.map +1 -0
- package/lib/test/createInsertOnlyAttributionPolicy.spec.js +33 -0
- package/lib/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -0
- package/lib/test/dirname.cjs +16 -0
- package/lib/test/dirname.cjs.map +1 -0
- package/lib/test/dirname.d.cts +6 -0
- package/lib/test/dirname.d.cts.map +1 -0
- package/lib/test/index.d.ts +13 -0
- package/lib/test/index.d.ts.map +1 -0
- package/lib/test/index.js +13 -0
- package/lib/test/index.js.map +1 -0
- package/lib/test/mergeTree.annotate.deltaCallback.spec.d.ts +6 -0
- package/lib/test/mergeTree.annotate.deltaCallback.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js +140 -0
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -0
- package/lib/test/mergeTree.annotate.spec.d.ts +6 -0
- package/lib/test/mergeTree.annotate.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.annotate.spec.js +446 -0
- package/lib/test/mergeTree.annotate.spec.js.map +1 -0
- package/lib/test/mergeTree.insert.deltaCallback.spec.d.ts +6 -0
- package/lib/test/mergeTree.insert.deltaCallback.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.insert.deltaCallback.spec.js +124 -0
- package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -0
- package/lib/test/mergeTree.insertingWalk.spec.d.ts +6 -0
- package/lib/test/mergeTree.insertingWalk.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.insertingWalk.spec.js +277 -0
- package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -0
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts +6 -0
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +176 -0
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -0
- package/lib/test/mergeTree.markRangeRemoved.spec.d.ts +6 -0
- package/lib/test/mergeTree.markRangeRemoved.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.markRangeRemoved.spec.js +128 -0
- package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -0
- package/lib/test/mergeTree.walk.spec.d.ts +6 -0
- package/lib/test/mergeTree.walk.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.walk.spec.js +61 -0
- package/lib/test/mergeTree.walk.spec.js.map +1 -0
- package/lib/test/mergeTree.zamboni.spec.d.ts +6 -0
- package/lib/test/mergeTree.zamboni.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.zamboni.spec.js +50 -0
- package/lib/test/mergeTree.zamboni.spec.js.map +1 -0
- package/lib/test/mergeTreeOperationRunner.d.ts +63 -0
- package/lib/test/mergeTreeOperationRunner.d.ts.map +1 -0
- package/lib/test/mergeTreeOperationRunner.js +207 -0
- package/lib/test/mergeTreeOperationRunner.js.map +1 -0
- package/lib/test/mergeTreeOperationRunner.spec.d.ts +6 -0
- package/lib/test/mergeTreeOperationRunner.spec.d.ts.map +1 -0
- package/lib/test/mergeTreeOperationRunner.spec.js +154 -0
- package/lib/test/mergeTreeOperationRunner.spec.js.map +1 -0
- package/lib/test/obliterate.concurrent.spec.d.ts +6 -0
- package/lib/test/obliterate.concurrent.spec.d.ts.map +1 -0
- package/lib/test/obliterate.concurrent.spec.js +1441 -0
- package/lib/test/obliterate.concurrent.spec.js.map +1 -0
- package/lib/test/obliterate.deltaCallback.spec.d.ts +6 -0
- package/lib/test/obliterate.deltaCallback.spec.d.ts.map +1 -0
- package/lib/test/obliterate.deltaCallback.spec.js +144 -0
- package/lib/test/obliterate.deltaCallback.spec.js.map +1 -0
- package/lib/test/obliterate.partialLength.spec.d.ts +6 -0
- package/lib/test/obliterate.partialLength.spec.d.ts.map +1 -0
- package/lib/test/obliterate.partialLength.spec.js +272 -0
- package/lib/test/obliterate.partialLength.spec.js.map +1 -0
- package/lib/test/obliterate.reconnect.spec.d.ts +6 -0
- package/lib/test/obliterate.reconnect.spec.d.ts.map +1 -0
- package/lib/test/obliterate.reconnect.spec.js +159 -0
- package/lib/test/obliterate.reconnect.spec.js.map +1 -0
- package/lib/test/obliterate.spec.d.ts +6 -0
- package/lib/test/obliterate.spec.d.ts.map +1 -0
- package/lib/test/obliterate.spec.js +160 -0
- package/lib/test/obliterate.spec.js.map +1 -0
- package/lib/test/ordinal.spec.d.ts +2 -0
- package/lib/test/ordinal.spec.d.ts.map +1 -0
- package/lib/test/ordinal.spec.js +38 -0
- package/lib/test/ordinal.spec.js.map +1 -0
- package/lib/test/partialLength.spec.d.ts +6 -0
- package/lib/test/partialLength.spec.d.ts.map +1 -0
- package/lib/test/partialLength.spec.js +274 -0
- package/lib/test/partialLength.spec.js.map +1 -0
- package/lib/test/properties.spec.d.ts +6 -0
- package/lib/test/properties.spec.d.ts.map +1 -0
- package/lib/test/properties.spec.js +53 -0
- package/lib/test/properties.spec.js.map +1 -0
- package/lib/test/reconnectHelper.d.ts +48 -0
- package/lib/test/reconnectHelper.d.ts.map +1 -0
- package/lib/test/reconnectHelper.js +82 -0
- package/lib/test/reconnectHelper.js.map +1 -0
- package/lib/test/resetPendingSegmentsToOp.spec.d.ts +6 -0
- package/lib/test/resetPendingSegmentsToOp.spec.d.ts.map +1 -0
- package/lib/test/resetPendingSegmentsToOp.spec.js +235 -0
- package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -0
- package/lib/test/revertibleFarm.spec.d.ts +6 -0
- package/lib/test/revertibleFarm.spec.d.ts.map +1 -0
- package/lib/test/revertibleFarm.spec.js +119 -0
- package/lib/test/revertibleFarm.spec.js.map +1 -0
- package/lib/test/revertibles.spec.d.ts +17 -0
- package/lib/test/revertibles.spec.d.ts.map +1 -0
- package/lib/test/revertibles.spec.js +381 -0
- package/lib/test/revertibles.spec.js.map +1 -0
- package/lib/test/segmentGroupCollection.spec.d.ts +6 -0
- package/lib/test/segmentGroupCollection.spec.d.ts.map +1 -0
- package/lib/test/segmentGroupCollection.spec.js +58 -0
- package/lib/test/segmentGroupCollection.spec.js.map +1 -0
- package/lib/test/snapshot.spec.d.ts +6 -0
- package/lib/test/snapshot.spec.d.ts.map +1 -0
- package/lib/test/snapshot.spec.js +176 -0
- package/lib/test/snapshot.spec.js.map +1 -0
- package/lib/test/snapshot.utils.d.ts +33 -0
- package/lib/test/snapshot.utils.d.ts.map +1 -0
- package/lib/test/snapshot.utils.js +104 -0
- package/lib/test/snapshot.utils.js.map +1 -0
- package/lib/test/snapshotlegacy.spec.d.ts +6 -0
- package/lib/test/snapshotlegacy.spec.d.ts.map +1 -0
- package/lib/test/snapshotlegacy.spec.js +137 -0
- package/lib/test/snapshotlegacy.spec.js.map +1 -0
- package/lib/test/sortedSegmentSet.spec.d.ts +6 -0
- package/lib/test/sortedSegmentSet.spec.d.ts.map +1 -0
- package/lib/test/sortedSegmentSet.spec.js +93 -0
- package/lib/test/sortedSegmentSet.spec.js.map +1 -0
- package/lib/test/testClient.d.ts +116 -0
- package/lib/test/testClient.d.ts.map +1 -0
- package/lib/test/testClient.js +430 -0
- package/lib/test/testClient.js.map +1 -0
- package/lib/test/testClientLogger.d.ts +44 -0
- package/lib/test/testClientLogger.d.ts.map +1 -0
- package/lib/test/testClientLogger.js +282 -0
- package/lib/test/testClientLogger.js.map +1 -0
- package/lib/test/testSerializer.d.ts +18 -0
- package/lib/test/testSerializer.d.ts.map +1 -0
- package/lib/test/testSerializer.js +29 -0
- package/lib/test/testSerializer.js.map +1 -0
- package/lib/test/testServer.d.ts +36 -0
- package/lib/test/testServer.d.ts.map +1 -0
- package/lib/test/testServer.js +133 -0
- package/lib/test/testServer.js.map +1 -0
- package/lib/test/testUtils.d.ts +77 -0
- package/lib/test/testUtils.d.ts.map +1 -0
- package/lib/test/testUtils.js +151 -0
- package/lib/test/testUtils.js.map +1 -0
- package/lib/test/text.d.ts +9 -0
- package/lib/test/text.d.ts.map +1 -0
- package/lib/test/text.js +71 -0
- package/lib/test/text.js.map +1 -0
- package/lib/test/tracking.spec.d.ts +6 -0
- package/lib/test/tracking.spec.d.ts.map +1 -0
- package/lib/test/tracking.spec.js +118 -0
- package/lib/test/tracking.spec.js.map +1 -0
- package/lib/test/types/validateMergeTreePrevious.generated.d.ts +2 -0
- package/lib/test/types/validateMergeTreePrevious.generated.d.ts.map +1 -0
- package/lib/test/types/validateMergeTreePrevious.generated.js +228 -0
- package/lib/test/types/validateMergeTreePrevious.generated.js.map +1 -0
- package/lib/test/wordUnitTests.spec.d.ts +6 -0
- package/lib/test/wordUnitTests.spec.d.ts.map +1 -0
- package/lib/test/wordUnitTests.spec.js +166 -0
- package/lib/test/wordUnitTests.spec.js.map +1 -0
- package/lib/{textSegment.d.mts → textSegment.d.ts} +4 -4
- package/lib/textSegment.d.ts.map +1 -0
- package/lib/{textSegment.mjs → textSegment.js} +2 -2
- package/lib/textSegment.js.map +1 -0
- package/lib/{zamboni.d.mts → zamboni.d.ts} +3 -3
- package/lib/zamboni.d.ts.map +1 -0
- package/lib/{zamboni.mjs → zamboni.js} +7 -6
- package/lib/zamboni.js.map +1 -0
- package/package.json +50 -57
- package/src/MergeTreeTextHelper.ts +4 -4
- package/src/attributionCollection.ts +1 -1
- package/src/attributionPolicy.ts +5 -5
- package/src/client.ts +50 -41
- package/src/collections/index.ts +2 -2
- package/src/endOfTreeSegment.ts +5 -5
- package/src/index.ts +20 -20
- package/src/localReference.ts +13 -7
- package/src/mergeTree.ts +53 -44
- package/src/mergeTreeDeltaCallback.ts +3 -8
- package/src/mergeTreeNodeWalk.ts +1 -1
- package/src/mergeTreeNodes.ts +21 -19
- package/src/mergeTreeTracking.ts +3 -3
- package/src/opBuilder.ts +3 -3
- package/src/partialLengths.ts +10 -10
- package/src/referencePositions.ts +4 -4
- package/src/revertibles.ts +14 -18
- package/src/segmentGroupCollection.ts +2 -2
- package/src/segmentPropertiesManager.ts +3 -3
- package/src/snapshotChunks.ts +4 -4
- package/src/snapshotLoader.ts +14 -11
- package/src/snapshotV1.ts +29 -9
- package/src/snapshotlegacy.ts +19 -5
- package/src/sortedSegmentSet.ts +8 -6
- package/src/textSegment.ts +3 -3
- package/src/zamboni.ts +7 -7
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.json +2 -5
- package/api-extractor-esm.json +0 -17
- package/dist/test/beastTest.d.ts.map +0 -1
- package/dist/test/beastTest.js.map +0 -1
- package/dist/test/client.apis.d.ts.map +0 -1
- package/dist/test/client.apis.js.map +0 -1
- package/dist/test/wordUnitTests.d.ts.map +0 -1
- package/dist/test/wordUnitTests.js.map +0 -1
- package/lib/MergeTreeTextHelper.d.mts.map +0 -1
- package/lib/MergeTreeTextHelper.mjs.map +0 -1
- package/lib/attributionCollection.d.mts.map +0 -1
- package/lib/attributionCollection.mjs.map +0 -1
- package/lib/attributionPolicy.d.mts.map +0 -1
- package/lib/attributionPolicy.mjs.map +0 -1
- package/lib/client.d.mts.map +0 -1
- package/lib/client.mjs.map +0 -1
- package/lib/collections/index.d.mts.map +0 -1
- package/lib/collections/index.mjs +0 -7
- package/lib/collections/index.mjs.map +0 -1
- package/lib/collections/list.d.mts.map +0 -1
- package/lib/collections/list.mjs.map +0 -1
- package/lib/collections/rbTree.d.mts.map +0 -1
- package/lib/collections/rbTree.mjs.map +0 -1
- package/lib/constants.d.mts.map +0 -1
- package/lib/constants.mjs.map +0 -1
- package/lib/endOfTreeSegment.d.mts.map +0 -1
- package/lib/endOfTreeSegment.mjs.map +0 -1
- package/lib/index.d.mts.map +0 -1
- package/lib/index.mjs.map +0 -1
- package/lib/localReference.d.mts.map +0 -1
- package/lib/localReference.mjs.map +0 -1
- package/lib/merge-tree-beta.d.mts +0 -668
- package/lib/merge-tree-public.d.mts +0 -668
- package/lib/mergeTree.d.mts.map +0 -1
- package/lib/mergeTree.mjs.map +0 -1
- package/lib/mergeTreeDeltaCallback.d.mts.map +0 -1
- package/lib/mergeTreeDeltaCallback.mjs.map +0 -1
- package/lib/mergeTreeNodeWalk.d.mts.map +0 -1
- package/lib/mergeTreeNodeWalk.mjs.map +0 -1
- package/lib/mergeTreeNodes.d.mts.map +0 -1
- package/lib/mergeTreeNodes.mjs.map +0 -1
- package/lib/mergeTreeTracking.d.mts.map +0 -1
- package/lib/mergeTreeTracking.mjs.map +0 -1
- package/lib/opBuilder.mjs.map +0 -1
- package/lib/ops.d.mts.map +0 -1
- package/lib/ops.mjs.map +0 -1
- package/lib/ordinal.d.mts.map +0 -1
- package/lib/ordinal.mjs.map +0 -1
- package/lib/partialLengths.d.mts.map +0 -1
- package/lib/partialLengths.mjs.map +0 -1
- package/lib/properties.d.mts.map +0 -1
- package/lib/properties.mjs.map +0 -1
- package/lib/referencePositions.d.mts.map +0 -1
- package/lib/referencePositions.mjs.map +0 -1
- package/lib/revertibles.d.mts.map +0 -1
- package/lib/revertibles.mjs.map +0 -1
- package/lib/segmentGroupCollection.d.mts.map +0 -1
- package/lib/segmentGroupCollection.mjs.map +0 -1
- package/lib/segmentPropertiesManager.d.mts.map +0 -1
- package/lib/segmentPropertiesManager.mjs.map +0 -1
- package/lib/snapshotChunks.d.mts.map +0 -1
- package/lib/snapshotChunks.mjs.map +0 -1
- package/lib/snapshotLoader.d.mts.map +0 -1
- package/lib/snapshotLoader.mjs.map +0 -1
- package/lib/snapshotV1.d.mts.map +0 -1
- package/lib/snapshotV1.mjs.map +0 -1
- package/lib/snapshotlegacy.d.mts.map +0 -1
- package/lib/snapshotlegacy.mjs.map +0 -1
- package/lib/sortedSegmentSet.d.mts.map +0 -1
- package/lib/sortedSegmentSet.mjs.map +0 -1
- package/lib/sortedSet.d.mts.map +0 -1
- package/lib/sortedSet.mjs.map +0 -1
- package/lib/textSegment.d.mts.map +0 -1
- package/lib/textSegment.mjs.map +0 -1
- package/lib/zamboni.d.mts.map +0 -1
- package/lib/zamboni.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obliterate.concurrent.spec.js","sourceRoot":"","sources":["../../src/test/obliterate.concurrent.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 \"assert\";\nimport { LoggingError } from \"@fluidframework/telemetry-utils\";\nimport { MergeTree } from \"../mergeTree.js\";\nimport { ReconnectTestHelper } from \"./reconnectHelper.js\";\nimport { useStrictPartialLengthChecks } from \"./testUtils.js\";\n\n/**\n * Some tests contain ASCII diagrams of the trees to make it easier to reason about\n * structure. The format of these diagrams is this:\n * - segments are separated by `-`.\n * - removed ranges are surrounded by `[` ... `]`\n * - obliterated ranges are surrounded by `(` ... `)`\n *\n * In cases where these ranges are ambiguous, there are additional diagrams\n * containing `v` and `-`, with the `v` denoting the start and end of the range\n *\n * E.g.\n *\n * ```\n * v---v\n * [ABC]\n * ```\n *\n * This diagram describes a single segment, `ABC`, that has been removed.\n *\n *\n * ```\n * v-----v\n * v---v\n * [[ABC]]\n * ```\n *\n * This diagram describes a single segment, `ABC`, that has been concurrently\n * removed by two clients.\n */\n\nfor (const incremental of [true, false]) {\n\tdescribe(`obliterate partial lengths incremental = ${incremental}`, () => {\n\t\tuseStrictPartialLengthChecks();\n\n\t\tbeforeEach(() => {\n\t\t\tMergeTree.options.incrementalUpdate = incremental;\n\t\t});\n\n\t\tafterEach(() => {\n\t\t\tMergeTree.options.incrementalUpdate = true;\n\t\t});\n\n\t\tit(\"length of children does not differ from parent when overlapping remove+obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDEFGH\n\t\t\t// I-[J]-(KLM-[ABC]-D-123456-E-[FG]-H)\n\n\t\t\thelper.insertText(\"A\", 0, \"ABCDEFGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.removeRange(\"C\", 0, 3);\n\t\t\thelper.insertText(\"C\", 1, \"123456\");\n\t\t\thelper.removeRange(\"A\", 5, 7);\n\t\t\thelper.insertText(\"A\", 0, \"IJKLM\");\n\t\t\thelper.obliterateRange(\"A\", 2, 11);\n\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"I\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes concurrent insert that occurs after obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 0, 4);\n\t\t\thelper.insertText(\"C\", 2, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes concurrent insert that occurs before obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"C\", 2, \"X\");\n\t\t\thelper.obliterateRange(\"B\", 0, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete unacked segment at start of string\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"XAB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"XAB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"XAB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"throws when local obliterate has range end outside length of local string\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\n\t\t\ttry {\n\t\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\t\tassert.fail(\"should not be possible to obliterate outside local range\");\n\t\t\t} catch (e) {\n\t\t\t\tassert(e instanceof LoggingError);\n\t\t\t\tassert.equal(e.message, \"RangeOutOfBounds\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"does not delete when obliterate immediately after insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"B\", 0, \"W\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"W\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"W\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"W\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete remote insert when between local insert+obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"X\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete remote insert when between local insert+obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"X\");\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"X\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete remote insert when in middle of segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"XB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"XB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"XB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes segment inserted into locally obliterated segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"updates lengths after obliterated insertion\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"N\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"B\", 1, \"B\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\tassert.equal(helper.clients.A.getLength(), 0);\n\t\t\tassert.equal(helper.clients.B.getLength(), 0);\n\t\t\tassert.equal(helper.clients.C.getLength(), 0);\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"updates lengths when insertion causes tree to split\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"0\");\n\t\t\thelper.insertText(\"C\", 0, \"123\");\n\t\t\thelper.insertText(\"B\", 0, \"BB\");\n\t\t\thelper.insertText(\"C\", 0, \"GGG\");\n\t\t\thelper.obliterateRange(\"C\", 2, 5);\n\t\t\thelper.insertText(\"B\", 1, \"A\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText().length, helper.clients.A.getLength());\n\t\t\tassert.equal(helper.clients.B.getText().length, helper.clients.B.getLength());\n\t\t\tassert.equal(helper.clients.C.getText().length, helper.clients.C.getLength());\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GG30\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"length of node split by insertion does not count remotely obliterated segments\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"1\");\n\t\t\thelper.insertText(\"A\", 0, \"2\");\n\t\t\thelper.insertText(\"C\", 0, \"XXXX\");\n\t\t\thelper.insertText(\"B\", 0, \"ABC\");\n\t\t\thelper.insertText(\"C\", 0, \"GGG\");\n\t\t\thelper.obliterateRange(\"C\", 2, 6);\n\t\t\thelper.insertText(\"C\", 1, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GDGX21\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"GDGX21\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"length of node split by obliterate does not count remotely obliterated segments\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"1\");\n\t\t\thelper.insertText(\"A\", 0, \"2\");\n\t\t\thelper.insertText(\"C\", 0, \"XXXX\");\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"GGG\");\n\t\t\thelper.obliterateRange(\"C\", 2, 6);\n\t\t\thelper.insertText(\"C\", 1, \"C\");\n\t\t\thelper.insertText(\"B\", 1, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GCGX21\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"GCGX21\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"counts remotely but not concurrently inserted segments for length when tree is split\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// a-b-c-d-e-123\n\t\t\t// (a-b)-c-d-e-1-[2]-3\n\n\t\t\thelper.insertText(\"B\", 0, \"123\");\n\t\t\thelper.insertText(\"C\", 0, \"e\");\n\t\t\thelper.insertText(\"C\", 0, \"d\");\n\t\t\thelper.insertText(\"C\", 0, \"c\");\n\t\t\thelper.insertText(\"C\", 0, \"b\");\n\t\t\thelper.insertText(\"C\", 0, \"a\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.removeRange(\"B\", 4, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"cde13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"cde13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does obliterate X for all clients\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"DE\");\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.insertText(\"A\", 0, \"X\");\n\t\t\thelper.insertText(\"B\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"B\", 2, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not include remote but unacked segments in partial len calculation\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 89-4567-123-X\n\t\t\t// 8-(9-4-w-567-1)-23-Y-X\n\n\t\t\thelper.insertText(\"A\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"123\");\n\t\t\thelper.insertText(\"C\", 0, \"4567\");\n\t\t\thelper.insertText(\"B\", 0, \"89\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"C\", 1, 7);\n\t\t\thelper.insertText(\"A\", 3, \"w\");\n\t\t\thelper.insertText(\"C\", 3, \"Y\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"823YX\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"823YX\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"correctly accounts for overlapping obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"correctly accounts for overlapping obliterate and remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"clones movedClientIds array during insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// the bug found here:\n\t\t\t// the X was skipped over by client `A` because it had already been\n\t\t\t// deleted, so its length at refSeq was 0\n\t\t\t//\n\t\t\t// this was due to the movedClientIds array not being properly cloned\n\t\t\t// when marking obliterated during insert\n\n\t\t\thelper.insertText(\"C\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"B\", 2, \"X\");\n\t\t\thelper.obliterateRange(\"A\", 1, 3);\n\t\t\thelper.obliterateRange(\"B\", 1, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AD\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"AD\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"client partial lens consider overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"123\");\n\t\t\thelper.insertText(\"A\", 0, \"ABCDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 1, 4);\n\t\t\thelper.obliterateRange(\"C\", 4, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AEF13\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"AEF13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AEF13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"client partial lens consider overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"ABCDEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 1, 4);\n\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AEGX\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AEGX\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"tracks obliterate refSeq when acking op for partial len calculation\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// v-----------------------v\n\t\t\t// v--v\n\t\t\t// v--v\n\t\t\t// 6-(345-AB-(CD)-E-(FG)-HI-1)-2\n\n\t\t\thelper.insertText(\"A\", 0, \"12\");\n\t\t\thelper.insertText(\"B\", 0, \"ABCDEFGHI\");\n\t\t\thelper.insertText(\"A\", 0, \"345\");\n\t\t\thelper.obliterateRange(\"A\", 0, 4);\n\t\t\thelper.obliterateRange(\"B\", 2, 4);\n\t\t\thelper.insertText(\"A\", 0, \"6\");\n\t\t\thelper.obliterateRange(\"B\", 3, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"62\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"62\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not have negative len when segment obliterated before insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 1234567-D-C-AB\n\t\t\t// 12-([3-X-45]-67)-D-C-AB\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.insertText(\"A\", 0, \"D\");\n\t\t\thelper.insertText(\"A\", 0, \"1234567\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 2, 7);\n\t\t\thelper.removeRange(\"A\", 2, 5);\n\t\t\thelper.insertText(\"C\", 3, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"12B\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"12B\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"12B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not have negative len when segment obliterated before insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDE-1-[2]-3\n\t\t\t// (A-XX-B)-(CD)-E-1-3\n\n\t\t\thelper.insertText(\"B\", 0, \"123\");\n\t\t\thelper.insertText(\"C\", 0, \"ABCDE\");\n\t\t\thelper.removeRange(\"B\", 1, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"B\", 1, \"XX\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"E13\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"E13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"E13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes segments between two obliterates with different seq\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 90-8-1234-(5)-67-D-C-B-A\n\t\t\t// 9-(EFG-[0-8-1234-(5)-67)]-D-C-B-A\n\n\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"1234567\");\n\t\t\thelper.obliterateRange(\"B\", 4, 5);\n\t\t\thelper.insertText(\"A\", 0, \"8\");\n\t\t\thelper.insertText(\"A\", 0, \"90\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.removeRange(\"C\", 1, 9);\n\t\t\thelper.insertText(\"A\", 1, \"EFG\");\n\t\t\thelper.obliterateRange(\"A\", 1, 11);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"9DCBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes inserted segment when obliterate of different seq in-between\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 1, \"12\");\n\t\t\thelper.insertText(\"A\", 0, \"CD\");\n\t\t\thelper.obliterateRange(\"A\", 1, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"C2\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"C2\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"C2\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes inserted segment when obliterate of different seq in-between\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes inserted segment when obliterate of different seq in-between\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"considers obliterated local segments as remotely obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// G-(H-F-I-C)-J-DE-A-(B)\n\t\t\t// G-J-(H-F-I-CD)-E\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"C\", 0, \"CDE\");\n\t\t\thelper.insertText(\"B\", 0, \"F\");\n\t\t\thelper.insertText(\"C\", 0, \"GH\");\n\t\t\thelper.obliterateRange(\"C\", 1, 3);\n\t\t\thelper.insertText(\"B\", 1, \"I\");\n\t\t\thelper.insertText(\"C\", 1, \"J\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GJDEA\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"GJDEA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"traverses hier block in obliterated when len at ref seq is >0 and len at len seq == 0\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 2, \"CD\");\n\t\t\thelper.removeRange(\"A\", 1, 3);\n\t\t\thelper.insertText(\"C\", 0, \"12345\");\n\t\t\thelper.insertText(\"B\", 0, \"EFG\");\n\t\t\thelper.insertText(\"B\", 1, \"HIJKL\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 6, 12);\n\t\t\thelper.removeRange(\"A\", 5, 7);\n\t\t\thelper.obliterateRange(\"C\", 7, 9);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), helper.clients.D.getText());\n\t\t\tassert.equal(helper.clients.B.getText(), \"EHIJKAD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"traverses hier block in obliterate when len at ref seq is >0 and len at len seq == 0\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// [E]-FGH-12-[A]-[B]-CD\n\t\t\t// 3-4-F-[G-(H-1)-2]-CD\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.removeRange(\"B\", 0, 1);\n\t\t\thelper.insertText(\"C\", 0, \"12\");\n\t\t\thelper.insertText(\"A\", 0, \"EFGH\");\n\t\t\thelper.removeRange(\"B\", 1, 2);\n\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"A\", 1, 5);\n\t\t\thelper.obliterateRange(\"B\", 2, 4);\n\t\t\thelper.insertText(\"A\", 0, \"3\");\n\t\t\thelper.insertText(\"A\", 0, \"4\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"43FBD\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"43FBD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"ignores segments where movedSeq < seq for partial len calculations\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"ABC\");\n\t\t\thelper.insertText(\"A\", 0, \"DEF\");\n\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"B\", 0, \"123456\");\n\t\t\thelper.obliterateRange(\"B\", 2, 7);\n\t\t\thelper.insertText(\"A\", 1, \"Y\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 4, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"12BCX\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"12BCX\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"12BCX\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"accounts for overlapping obliterates from same client\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"accounts for concurrently obliterated segments from the perspective of the inserting client for partial lengths\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\thelper.insertText(\"A\", 0, \"1234\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"C\", 1, 3);\n\t\t\thelper.insertText(\"A\", 2, \"D\");\n\t\t\thelper.insertText(\"A\", 4, \"E\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"1E4CBA\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"1E4CBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"traverses segments when there is a local obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"C\", 0, \"12\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 2, \"C\");\n\t\t\thelper.obliterateRange(\"A\", 0, 3);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"keeps track of all obliterates on a segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// B-A\n\t\t\t// (B-C-(A))\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 1, 2);\n\t\t\t// bug here: because segment A has already been obliterated, we wouldn't\n\t\t\t// mark it obliterated by this op as well, meaning that segments in\n\t\t\t// this range would look to the right and not find a matching move seq\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"B\", 1, \"C\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\t\t\tassert.equal(helper.clients.D.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"many overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// EF-ABCD\n\t\t\t// (1)-2-((E)-F-A)-B-(C)-D\n\n\t\t\thelper.insertText(\"C\", 0, \"ABCD\");\n\t\t\thelper.insertText(\"B\", 0, \"EF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 3);\n\t\t\thelper.insertText(\"A\", 0, \"12\");\n\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 1, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"2BD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates at start\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 12345-B-A\n\t\t\t// ((1-C-2)-3)-4-D-5-B-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"A\", 0, \"12345\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"C\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"C\", 0, 4);\n\t\t\thelper.insertText(\"C\", 1, \"D\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"partial lengths updated when local insert is acked\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// A-BCDEF\n\t\t\t// (A-B-G-C)-D-I-E-H-F\n\n\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\thelper.insertText(\"A\", 1, \"BCDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 0, 3);\n\t\t\thelper.insertText(\"A\", 2, \"G\");\n\t\t\thelper.insertText(\"B\", 5, \"H\");\n\t\t\thelper.insertText(\"C\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"DIEHF\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"DIEHF\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"DIEHF\");\n\t\t\tassert.equal(helper.clients.D.getText(), \"DIEHF\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"two local obliterates get different seq numbers after ack\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// C-AB\n\t\t\t// (C-A)-D-(B)\n\n\t\t\thelper.insertText(\"C\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\t// bug here: when the op is acked by client C, it would incorrectly give\n\t\t\t// segment B the same movedSeq despite coming from a different op\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"B\", 2, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"D\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"D\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"acks remote segment obliterated by local op\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// (D-C-A)-B\n\t\t\t// (D-C-A)-B-E\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.insertText(\"B\", 0, \"D\");\n\t\t\t// bug here: when the op is acked by client B, it wouldn't correctly\n\t\t\t// visit the segment \"C\", leaving the obliterate unacked\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 1, \"E\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"BE\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"BE\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"skips segments obliterated before refSeq when traversing for insertion\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDE-(A)-B\n\t\t\t// C-(DE-F-(A)-B)\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 0, \"CDE\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 4);\n\t\t\t// bug here: when traversing to see if segment should be obliterated after\n\t\t\t// insertion, traversal would stop at segment A because it was obliterated\n\t\t\t// before the refSeq, which made it appear as an un-deleted segment\n\t\t\thelper.insertText(\"B\", 3, \"F\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"C\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"C\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"C\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"applies correct movedSeq when right segment has multiple movedSeqs\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// (A-C-D-(B))\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\t// bug here: for client B, segment B had multiple movedSeqs, and when\n\t\t\t// traversal went to the right and found a matching movedSeq in the movedSeqs\n\t\t\t// array, it selected the lowest seq in the array, which differed from\n\t\t\t// the correct and matching movedSeq\n\t\t\thelper.insertText(\"A\", 1, \"C\");\n\t\t\thelper.insertText(\"A\", 2, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"takes the correct moved client id when multiple clientIds for right segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// (A-C-D-(B))\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\t// bug here: we would incorrectly take the client id of the first element\n\t\t\t// in the movedClientIds array because we did not take into account the\n\t\t\t// length of _both_ the local and non-local movedSeqs arrays\n\t\t\thelper.insertText(\"A\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"A\", 2, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"selects clientId if 0\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// (A-D-E-(C)-B)\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\t// bug here: client id was 0, and the check we used was !clientId, rather\n\t\t\t// than clientId !== undefined\n\t\t\thelper.insertText(\"A\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.insertText(\"A\", 2, \"E\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterates unacked segment inside non-leaf-segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGHIJ-E-12345678-D-C-A-K-B\n\t\t\t// FGHIJ-E-12345-(6-[7-L-8-D]-C)-A-K-B\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"12345678\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.insertText(\"C\", 0, \"FGHIJ\");\n\t\t\thelper.insertText(\"A\", 2, \"K\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"A\", 12, 15);\n\t\t\t// bug here: when traversing for obliterate, we visit unacked segments\n\t\t\t// within the range, considering their length 0 but still marking them\n\t\t\t// obliterated. if the segment was inside a hiernode whose length was\n\t\t\t// also 0, we would incorrectly skip over the entire hier node, rather\n\t\t\t// than visiting the children segments\n\t\t\thelper.obliterateRange(\"A\", 11, 13);\n\t\t\thelper.insertText(\"B\", 13, \"L\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"FGHIJE12345AKB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"FGHIJE12345AKB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"FGHIJE12345AKB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"tracks length at seq of lower move/remove seq when overlapping\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// H-FG-A-CDE-B\n\t\t\t// (H-F-[G-A)-C-I-D]-E-B\n\n\t\t\thelper.insertText(\"C\", 0, \"AB\");\n\t\t\thelper.insertText(\"C\", 1, \"CDE\");\n\t\t\thelper.insertText(\"B\", 0, \"FG\");\n\t\t\thelper.insertText(\"A\", 0, \"H\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 0, 4);\n\t\t\thelper.removeRange(\"B\", 2, 6);\n\t\t\t// bug here: this insert triggers a new chunk to be created. when the\n\t\t\t// partial lengths of the new chunk were calculated, it incorrectly\n\t\t\t// used the removedSeq instead of the moveSeq, despite the latter having\n\t\t\t// occurred prior to the remove\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IEB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"IEB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"IEB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"segment obliterated on insert overlaps with local obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// ((A-C)-B)\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterates entire string when concurrent inserts inside range\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// GT\n\t\t\t// (G-O-S-Y-T)\n\n\t\t\thelper.insertText(\"B\", 0, \"GT\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.insertText(\"C\", 1, \"OY\");\n\t\t\thelper.insertText(\"C\", 2, \"S\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterate ack traverses over non-obliterated remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDEFGH-1\n\t\t\t// ABCDE-(F-[G]-2-H)-1\n\t\t\t// ABCDE-(F-[G]-2-H)-1-3\n\n\t\t\thelper.insertText(\"A\", 0, \"1\");\n\t\t\thelper.insertText(\"C\", 0, \"ABCDEFGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"C\", 6, 7);\n\t\t\thelper.insertText(\"A\", 7, \"2\");\n\t\t\t// obliterate at seq 5 isn't getting acked because it stops traversal\n\t\t\t// at the removed segment, which doesn't have move info\n\t\t\thelper.obliterateRange(\"C\", 5, 7);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"A\", 6, \"3\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"ABCDE13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"ABCDE13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping remove and obliterate when remove happens last\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGH-E-D-BC-A\n\t\t\t// ([F]-G)-H-E-D-B-I-C-A\n\n\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"BC\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.insertText(\"B\", 0, \"FGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 5, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"HEDBICA\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"HEDBICA\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"HEDBICA\");\n\t\t\tassert.equal(helper.clients.D.getText(), \"HEDBICA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping remove and obliterate when remove happens last _and_ partial length already exists\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGH-CDE-B-A\n\t\t\t// [F-(GH)-C]-D-Z-E-B-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"B\", 0, \"CDE\");\n\t\t\thelper.insertText(\"C\", 0, \"FGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 1, 2);\n\t\t\thelper.removeRange(\"A\", 0, 4);\n\t\t\thelper.insertText(\"A\", 1, \"Z\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"DZEBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterate and remove when obliterate is larger than remove and happened last\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// H-CDEFG-B-A\n\t\t\t// (H-C-[D]-E)-F-Z-G-B-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.insertText(\"A\", 0, \"CDEFG\");\n\t\t\thelper.insertText(\"A\", 0, \"H\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"A\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 0, 4);\n\t\t\thelper.insertText(\"C\", 1, \"Z\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"FZGBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"wasMovedOnInsert remains after leaf node is split\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CD-B-A\n\t\t\t// I-(C-(G)H-E)-F-D-B-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"B\", 0, \"CD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 1, \"EF\");\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.insertText(\"A\", 1, \"GH\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IFDBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates, segment is obliterated on insert and by local client\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// DEFG-BC-A\n\t\t\t// v-----------v\n\t\t\t// v-----v\n\t\t\t// (D-(E-H-F)-G)-B-I-C-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"BC\");\n\t\t\thelper.insertText(\"B\", 0, \"DEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\thelper.insertText(\"A\", 2, \"H\");\n\t\t\thelper.obliterateRange(\"A\", 0, 5);\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"BICA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates and remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGHIJKL-BCDE-A\n\t\t\t// (FGHI-[JK-(L-B)-C]-D)-E-M-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"BCDE\");\n\t\t\thelper.insertText(\"A\", 0, \"FGHIJKL\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"B\", 4, 9);\n\t\t\thelper.obliterateRange(\"A\", 6, 8);\n\t\t\thelper.obliterateRange(\"C\", 0, 10);\n\t\t\thelper.insertText(\"C\", 1, \"M\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"EMA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not mark obliterated on insert for non-acked obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDE-B-A\n\t\t\t// I-((C-F)-G-D)-H-E-B-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"A\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"CDE\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"A\", 1, \"FG\");\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"A\", 2, \"H\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"C\", 0, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IHEBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"partial len isLocal when seq is -1 but moveSeq > -1\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDEFG-AB\n\t\t\t// C-((D-I-E)-F)-G-A-H-B\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"B\", 0, \"CDEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 1, 4);\n\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\thelper.insertText(\"B\", 4, \"H\");\n\t\t\thelper.insertText(\"A\", 2, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"CGAHB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterated on insert by overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// B-DEFG-C-A\n\t\t\t// ((B-D-H-E)-F-I-G-C)-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"A\", 0, \"BC\");\n\t\t\thelper.insertText(\"A\", 1, \"DEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 6);\n\t\t\thelper.obliterateRange(\"A\", 0, 3);\n\t\t\thelper.insertText(\"C\", 2, \"H\");\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"A\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDEF\n\t\t\t// v-------------v\n\t\t\t// v-----------v\n\t\t\t// v-------v\n\t\t\t// I-((AB-(C-G)-H-D)-E)-F\n\n\t\t\thelper.insertText(\"A\", 0, \"ABCDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 4);\n\t\t\thelper.obliterateRange(\"C\", 2, 5);\n\t\t\thelper.insertText(\"A\", 3, \"GH\");\n\t\t\thelper.insertText(\"C\", 0, \"I\");\n\t\t\thelper.obliterateRange(\"A\", 0, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IF\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDEF-AB\n\t\t\t// v-------------------v\n\t\t\t// v---------v\n\t\t\t// v-v\n\t\t\t// ((C-(G)-H-D)-E-I-F-A)-B\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.insertText(\"C\", 0, \"CDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 5);\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"A\", 1, \"GH\");\n\t\t\thelper.insertText(\"C\", 1, \"I\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping remove and obliterate, local obliterate does not have a remote obliterated len\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// v-v------v-v\n\t\t\t// G-(H-[F]-E)-D-[A]-B-I-C\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.insertText(\"B\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.insertText(\"A\", 0, \"F\");\n\t\t\thelper.removeRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"B\", 0, \"GH\");\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GDBIC\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"triple overlapping obliterate and overlapping remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// I-H-BCDEFG-A\n\t\t\t// v------------v\n\t\t\t// v-------v\n\t\t\t// v-v\n\t\t\t// v-------------------------v\n\t\t\t// [[I]-H-BCD-(E-(F-(J)-G))-A]\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"BCDEFG\");\n\t\t\thelper.insertText(\"B\", 0, \"H\");\n\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 6, 8);\n\t\t\thelper.obliterateRange(\"A\", 5, 8);\n\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"C\", 6, \"J\");\n\t\t\thelper.obliterateRange(\"C\", 6, 7);\n\t\t\thelper.removeRange(\"A\", 0, 6);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"triple overlapping obliterate with one being local\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDEFG-B-A\n\t\t\t// v--------v\n\t\t\t// v--------v\n\t\t\t// v------v\n\t\t\t// J-(CD-((E-H)-F))-I-G-B-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"CDEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 2, 4);\n\t\t\thelper.insertText(\"C\", 3, \"H\");\n\t\t\thelper.obliterateRange(\"C\", 0, 4);\n\t\t\thelper.insertText(\"C\", 1, \"I\");\n\t\t\thelper.insertText(\"B\", 0, \"J\");\n\t\t\thelper.obliterateRange(\"B\", 3, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.C.getText(), \"JIGBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterate ack traversal is not stopped by moved segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCD\n\t\t\t// (A-(B)-E-C)-D-F\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"C\", 2, \"E\");\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 1, \"F\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"DF\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"DF\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"updates partial lengths for segments when doing obliterate ack traversal\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// O-JKLMN-FGHI-E-CD-AB\n\t\t\t// v-v---v-----v\n\t\t\t// (P-O-JKLMN-FG-[H]-Q-[I-E-C]-D-A)-B\n\t\t\t// (P-O-JKLMN-FG-[H]-Q-[I-E-C]-D-A)-B-R\n\n\t\t\t// problematic segment: H-Q-I-E\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"CD\");\n\t\t\thelper.insertText(\"A\", 0, \"E\");\n\t\t\thelper.insertText(\"A\", 0, \"FGHI\");\n\t\t\thelper.insertText(\"C\", 0, \"JKLMN\");\n\t\t\thelper.insertText(\"B\", 0, \"O\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"A\", 0, \"P\");\n\t\t\thelper.insertText(\"B\", 9, \"Q\");\n\t\t\thelper.removeRange(\"A\", 9, 13);\n\t\t\thelper.obliterateRange(\"A\", 0, 11);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 1, \"R\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"BR\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\t// fails only for incremental\n\t\tit(\"combines remote obliterated length \", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// R-XYZ12-STUVW-LMNOP-DEFGHIJK-A-34567890-Q-BC\n\t\t\t// v---------------v------------v------v--------v------------v\n\t\t\t// [R-XYZ12-STUVW-L]-abcdefghij-[MNOP-D]-klmnop-[EFGHIJK-A-34]-5-(6-x-7)-890-Q-BC\n\n\t\t\t// v--------v\n\t\t\t// v--------v\n\t\t\t// a-T-b-S-c-[def]-ghij-k-Q-l-R-mno-[p-5-8-[9]-0-Q-B]-C\n\n\t\t\t// v--------v\n\t\t\t// v--------v\n\t\t\t// segment is R-mno-[p-5-8-[9]-0-Q-B]-C\n\t\t\t// v-------------------------------v\n\t\t\t// v--------v\n\t\t\t// v------------v\n\t\t\t// R-mno-[p-[EFGHIJK-A-34]-5-(6-x-7)-8-[9]-0-Q-B]-C\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.insertText(\"C\", 0, \"DEFGHIJK\");\n\t\t\thelper.insertText(\"C\", 0, \"LMNOP\");\n\t\t\thelper.insertText(\"A\", 1, \"Q\");\n\t\t\thelper.insertText(\"B\", 0, \"RSTUVW\");\n\t\t\thelper.insertText(\"B\", 1, \"XYZ12\");\n\t\t\thelper.insertText(\"A\", 1, \"34567890\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 29, \"x\");\n\t\t\thelper.removeRange(\"B\", 0, 27);\n\t\t\thelper.insertText(\"A\", 12, \"abcdefghij\");\n\t\t\thelper.obliterateRange(\"A\", 38, 40);\n\t\t\thelper.insertText(\"C\", 17, \"klmnop\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"abcdefghijklmnop5890QBC\");\n\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"B\", 3, 6);\n\t\t\thelper.insertText(\"C\", 11, \"Q\");\n\t\t\thelper.insertText(\"B\", 9, \"R\");\n\t\t\thelper.insertText(\"B\", 2, \"S\");\n\t\t\thelper.removeRange(\"C\", 19, 23);\n\t\t\thelper.obliterateRange(\"B\", 14, 18);\n\t\t\thelper.insertText(\"B\", 1, \"T\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"aTbScghijkQlRmnoC\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"three obliterates on same segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// A\n\t\t\t// (C-B-D-((A)))\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tdescribe(\"incremental partial length updates\", () => {\n\t\t\tit(\"obliterates concurrently inserted segment\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// (C-B-A)\n\n\t\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"obliterates 2 concurrently inserted segments\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// (C-B-D-A)\n\n\t\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\t\thelper.insertText(\"A\", 0, \"B\");\n\t\t\t\thelper.insertText(\"B\", 0, \"C\");\n\t\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"obliterates 4 concurrently inserted segments\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// I-F-(G-D-H-E-C-A)-B\n\n\t\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\t\thelper.insertText(\"B\", 0, \"C\");\n\t\t\t\thelper.insertText(\"A\", 0, \"DE\");\n\t\t\t\thelper.insertText(\"B\", 0, \"FG\");\n\t\t\t\thelper.obliterateRange(\"B\", 1, 4);\n\t\t\t\thelper.insertText(\"A\", 1, \"H\");\n\t\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"IFB\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"obliterates 3 concurrently inserted segments\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// I-G-(H-D-F-E-B)-C-A\n\n\t\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"BC\");\n\t\t\t\thelper.insertText(\"A\", 0, \"DE\");\n\t\t\t\thelper.insertText(\"A\", 1, \"F\");\n\t\t\t\thelper.insertText(\"B\", 0, \"GH\");\n\t\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"IGCA\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"overlapping remove + obliterate, remove happened first\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// D-EFG-B-H-C-A\n\t\t\t\t// I-D-([E]-F)-G-B-H-C-A\n\n\t\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"BC\");\n\t\t\t\thelper.insertText(\"C\", 0, \"DEFG\");\n\t\t\t\thelper.insertText(\"B\", 1, \"H\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.removeRange(\"B\", 1, 2);\n\t\t\t\thelper.obliterateRange(\"A\", 1, 3);\n\t\t\t\thelper.insertText(\"A\", 0, \"I\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"IDGBHCA\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"overlapping remove + obliterate, remove happened last\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// DEFGH-C-B-A\n\t\t\t\t// [D]-[E-(F)-G]-H-C-B-A\n\n\t\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\t\thelper.insertText(\"B\", 0, \"DEFGH\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\t\thelper.removeRange(\"A\", 1, 4);\n\t\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"HCBA\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"segment inside locally obliterated segment group is split\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// CDEF-AB\n\t\t\t\t// [C]-DE-(F-(G)-H-A)-B\n\t\t\t\t// [C]-DE-(F-(G)-H-A)-(B)\n\n\t\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\t\thelper.insertText(\"B\", 0, \"CDEF\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"C\", 3, \"GH\");\n\t\t\t\thelper.obliterateRange(\"C\", 3, 4);\n\t\t\t\thelper.obliterateRange(\"A\", 3, 5);\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.obliterateRange(\"B\", 2, 3);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"DE\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"continues traversal past locally removed segment inserted before first obliterate\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// ABC\n\t\t\t\t// (E-D-(A)-[B]-C)\n\n\t\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"B\", 0, \"D\");\n\t\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"C\", 0, \"E\");\n\t\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"keeps track of remote obliterated length when hier node contains hier nodes\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// LMNO-HIJ-E-K-FG-D-C-AB\n\t\t\t\t// lmnopq-L-[M]-NO-H-ghijk-I-(J-E-K-FG-D-C-A-a)-bc-ef-d-B\n\t\t\t\t// v--------------------------------------v\n\t\t\t\t// v-------------------v\n\t\t\t\t// r-l-x-mn-[opq-L-[M]-NO-H-gh-s]-t-(u-i-[j]-k-I-(J-E-K-FG-D-C-A-a)-b-v-c-e)-f-d-B\n\n\t\t\t\t// bad segment: (I-(J-E-K-FG-D-C-A-a)-b-v-c-e)-f-d-B\n\n\t\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\t\thelper.insertText(\"A\", 0, \"D\");\n\t\t\t\thelper.insertText(\"B\", 0, \"EFG\");\n\t\t\t\thelper.insertText(\"C\", 0, \"HIJ\");\n\t\t\t\thelper.insertText(\"B\", 1, \"K\");\n\t\t\t\thelper.insertText(\"B\", 0, \"LMNO\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\t\thelper.insertText(\"A\", 13, \"abcd\");\n\t\t\t\thelper.obliterateRange(\"A\", 5, 14);\n\t\t\t\thelper.insertText(\"A\", 7, \"ef\"); // seq: 11, len: 7\n\t\t\t\thelper.insertText(\"B\", 5, \"ghijk\");\n\t\t\t\thelper.insertText(\"C\", 0, \"lmnopq\"); // seq: 13, len: 7\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"lmnopqLNOHghijkIbcefdB\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.insertText(\"A\", 0, \"r\");\n\t\t\t\thelper.insertText(\"B\", 12, \"stu\");\n\t\t\t\thelper.insertText(\"A\", 18, \"v\"); // seq: 16, len: 8\n\t\t\t\thelper.obliterateRange(\"B\", 14, 22); // seq: 17, len: 3\n\t\t\t\thelper.removeRange(\"B\", 3, 13); // seq: 18, len: 3\n\t\t\t\thelper.removeRange(\"A\", 14, 15); // seq: 19, len: 3\n\t\t\t\thelper.insertText(\"B\", 1, \"x\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"rlxmntfdB\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"combines remote obliterated length for parent node of tree with depth >=3\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// VWXYZ0-(K)-[L]-M-[N]-O-EFGHIJ-[A]-B-P-TU-QRS-CD\n\t\t\t\t// v-v------v------------v\n\t\t\t\t// v--------------------v\n\t\t\t\t// v----v---------v-v-----v-----v------------------------------v-v\n\t\t\t\t// V-c-W-[XYZ0]-(K)-[L]-[M]-[N]-[O-EFG]-[H]-a-[b-[IJ-[A]-B-P-T]-U-Q]-[R]-S-C-d-f-e-D\n\n\t\t\t\t// v-v------v-v---v-----------v\n\t\t\t\t// v-------------------------v\n\t\t\t\t// v------v---------v-v-----v---v---v--v-----------------------------------v-v\n\t\t\t\t// v---------v\n\t\t\t\t// j-i-(V-c-W-[XY)-Z0]-(K)-[L]-[M]-[N]-[O-E]-h-[FG]-[H]-a-[b-[I]-g-[J-[A]-B-P-T]-U-Q]-[R]-S-C-d-f-e-D\n\n\t\t\t\t// problem segment: j-i-(V-c-W-[XY)-Z0]-(K)-[L]-[M]-[N]-[O-E]-h-[FG]-[H]-a-[b]\n\t\t\t\t// specifically: j-(V-c-W\n\n\t\t\t\thelper.insertText(\"C\", 0, \"ABCD\");\n\t\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"B\", 0, \"EFGHIJ\");\n\t\t\t\thelper.insertText(\"A\", 0, \"KLMNO\");\n\t\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\t\thelper.insertText(\"C\", 1, \"PQRS\");\n\t\t\t\thelper.insertText(\"C\", 2, \"TU\");\n\t\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\t\thelper.insertText(\"A\", 0, \"VWXYZ0\"); // seq: 10, len: 2\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"VWXYZ0MOEFGHIJBPTUQRSCD\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.insertText(\"C\", 12, \"ab\");\n\t\t\t\thelper.removeRange(\"B\", 11, 17);\n\t\t\t\thelper.removeRange(\"C\", 13, 21);\n\t\t\t\thelper.insertText(\"B\", 1, \"c\"); // seq: 14, len: 3\n\t\t\t\thelper.insertText(\"C\", 16, \"de\");\n\t\t\t\thelper.insertText(\"C\", 17, \"f\");\n\t\t\t\thelper.removeRange(\"B\", 3, 15);\n\t\t\t\thelper.insertText(\"A\", 13, \"g\");\n\t\t\t\thelper.insertText(\"A\", 9, \"h\");\n\t\t\t\thelper.obliterateRange(\"C\", 0, 4); // seq: 20, len: 0\n\t\t\t\thelper.insertText(\"C\", 0, \"i\");\n\t\t\t\thelper.insertText(\"A\", 0, \"j\"); // seq: 22, len: 1\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"jihagSCdfeD\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\t\t});\n\t});\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obliterate.deltaCallback.spec.d.ts","sourceRoot":"","sources":["../../src/test/obliterate.deltaCallback.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { strict as assert } from "assert";
|
|
6
|
+
import { MergeTreeDeltaType } from "../ops.js";
|
|
7
|
+
import { useStrictPartialLengthChecks } from "./testUtils.js";
|
|
8
|
+
import { ReconnectTestHelper } from "./reconnectHelper.js";
|
|
9
|
+
describe("obliterate delta callback", () => {
|
|
10
|
+
useStrictPartialLengthChecks();
|
|
11
|
+
let length;
|
|
12
|
+
let cb;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
length = 0;
|
|
15
|
+
cb = (opArgs, deltaArgs) => {
|
|
16
|
+
switch (opArgs.op.type) {
|
|
17
|
+
case MergeTreeDeltaType.INSERT: {
|
|
18
|
+
for (const { segment } of deltaArgs.deltaSegments) {
|
|
19
|
+
length += segment.cachedLength;
|
|
20
|
+
}
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
case MergeTreeDeltaType.REMOVE:
|
|
24
|
+
case MergeTreeDeltaType.OBLITERATE: {
|
|
25
|
+
for (const { segment } of deltaArgs.deltaSegments) {
|
|
26
|
+
length -= segment.cachedLength;
|
|
27
|
+
}
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
default: {
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
describe("is invoked", () => {
|
|
36
|
+
it("on local obliterate", () => {
|
|
37
|
+
const helper = new ReconnectTestHelper();
|
|
38
|
+
let count = 0;
|
|
39
|
+
helper.clients.A.on("delta", (opArgs, deltaArgs) => {
|
|
40
|
+
if (opArgs.op.type === MergeTreeDeltaType.OBLITERATE) {
|
|
41
|
+
count += 1;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
helper.insertText("A", 0, "a");
|
|
45
|
+
assert.equal(count, 0);
|
|
46
|
+
helper.obliterateRange("A", 0, 1);
|
|
47
|
+
assert.equal(count, 1);
|
|
48
|
+
helper.processAllOps();
|
|
49
|
+
assert.equal(count, 1);
|
|
50
|
+
assert.equal(helper.clients.A.getText(), "");
|
|
51
|
+
helper.logger.validate();
|
|
52
|
+
});
|
|
53
|
+
it("on remote obliterate", () => {
|
|
54
|
+
const helper = new ReconnectTestHelper();
|
|
55
|
+
let count = 0;
|
|
56
|
+
helper.clients.A.on("delta", (opArgs, deltaArgs) => {
|
|
57
|
+
if (opArgs.op.type === MergeTreeDeltaType.OBLITERATE) {
|
|
58
|
+
count += 1;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
helper.insertText("B", 0, "a");
|
|
62
|
+
assert.equal(count, 0);
|
|
63
|
+
helper.obliterateRange("B", 0, 1);
|
|
64
|
+
assert.equal(count, 0);
|
|
65
|
+
helper.processAllOps();
|
|
66
|
+
assert.equal(count, 1);
|
|
67
|
+
assert.equal(helper.clients.A.getText(), "");
|
|
68
|
+
helper.logger.validate();
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe("overlapping obliterate and remove", () => {
|
|
72
|
+
const text = "abcdef";
|
|
73
|
+
it("remove first", () => {
|
|
74
|
+
const helper = new ReconnectTestHelper();
|
|
75
|
+
helper.clients.A.on("delta", cb);
|
|
76
|
+
helper.insertText("A", 0, text);
|
|
77
|
+
helper.processAllOps();
|
|
78
|
+
assert.equal(length, text.length);
|
|
79
|
+
helper.removeRange("B", 0, text.length);
|
|
80
|
+
helper.obliterateRange("C", 0, text.length);
|
|
81
|
+
helper.processAllOps();
|
|
82
|
+
assert.equal(length, 0);
|
|
83
|
+
helper.logger.validate();
|
|
84
|
+
helper.clients.A.off("delta", cb);
|
|
85
|
+
});
|
|
86
|
+
it("obliterate first", () => {
|
|
87
|
+
const helper = new ReconnectTestHelper();
|
|
88
|
+
helper.clients.A.on("delta", cb);
|
|
89
|
+
helper.insertText("B", 0, text);
|
|
90
|
+
helper.processAllOps();
|
|
91
|
+
assert.equal(length, text.length);
|
|
92
|
+
helper.obliterateRange("C", 0, text.length);
|
|
93
|
+
helper.removeRange("B", 0, text.length);
|
|
94
|
+
helper.processAllOps();
|
|
95
|
+
assert.equal(length, 0);
|
|
96
|
+
helper.logger.validate();
|
|
97
|
+
helper.clients.A.off("delta", cb);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
it("overlapping obliterate and obliterate", () => {
|
|
101
|
+
const helper = new ReconnectTestHelper();
|
|
102
|
+
helper.clients.A.on("delta", cb);
|
|
103
|
+
const text = "abcdef";
|
|
104
|
+
helper.insertText("B", 0, text);
|
|
105
|
+
helper.processAllOps();
|
|
106
|
+
assert.equal(length, text.length);
|
|
107
|
+
helper.obliterateRange("B", 0, text.length);
|
|
108
|
+
helper.obliterateRange("C", 0, text.length);
|
|
109
|
+
helper.processAllOps();
|
|
110
|
+
assert.equal(length, 0);
|
|
111
|
+
helper.logger.validate();
|
|
112
|
+
helper.clients.A.off("delta", cb);
|
|
113
|
+
});
|
|
114
|
+
describe("insert into obliterated range", () => {
|
|
115
|
+
const text = "abcdef";
|
|
116
|
+
it("insert first", () => {
|
|
117
|
+
const helper = new ReconnectTestHelper();
|
|
118
|
+
helper.clients.A.on("delta", cb);
|
|
119
|
+
helper.insertText("B", 0, text);
|
|
120
|
+
helper.processAllOps();
|
|
121
|
+
assert.equal(length, text.length);
|
|
122
|
+
helper.insertText("B", 3, text);
|
|
123
|
+
helper.obliterateRange("C", 0, text.length);
|
|
124
|
+
helper.processAllOps();
|
|
125
|
+
assert.equal(length, 0);
|
|
126
|
+
helper.logger.validate();
|
|
127
|
+
helper.clients.A.off("delta", cb);
|
|
128
|
+
});
|
|
129
|
+
it("obliterate first", () => {
|
|
130
|
+
const helper = new ReconnectTestHelper();
|
|
131
|
+
helper.clients.A.on("delta", cb);
|
|
132
|
+
helper.insertText("B", 0, text);
|
|
133
|
+
helper.processAllOps();
|
|
134
|
+
assert.equal(length, text.length);
|
|
135
|
+
helper.obliterateRange("C", 0, text.length);
|
|
136
|
+
helper.insertText("B", 3, text);
|
|
137
|
+
helper.processAllOps();
|
|
138
|
+
assert.equal(length, 0);
|
|
139
|
+
helper.logger.validate();
|
|
140
|
+
helper.clients.A.off("delta", cb);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=obliterate.deltaCallback.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obliterate.deltaCallback.spec.js","sourceRoot":"","sources":["../../src/test/obliterate.deltaCallback.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 \"assert\";\nimport { MergeTreeDeltaType } from \"../ops.js\";\nimport { MergeTreeDeltaCallback } from \"../mergeTreeDeltaCallback.js\";\nimport { useStrictPartialLengthChecks } from \"./testUtils.js\";\nimport { ReconnectTestHelper } from \"./reconnectHelper.js\";\n\ndescribe(\"obliterate delta callback\", () => {\n\tuseStrictPartialLengthChecks();\n\n\tlet length: number;\n\tlet cb: MergeTreeDeltaCallback;\n\n\tbeforeEach(() => {\n\t\tlength = 0;\n\t\tcb = (opArgs, deltaArgs) => {\n\t\t\tswitch (opArgs.op.type) {\n\t\t\t\tcase MergeTreeDeltaType.INSERT: {\n\t\t\t\t\tfor (const { segment } of deltaArgs.deltaSegments) {\n\t\t\t\t\t\tlength += segment.cachedLength;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase MergeTreeDeltaType.REMOVE:\n\t\t\t\tcase MergeTreeDeltaType.OBLITERATE: {\n\t\t\t\t\tfor (const { segment } of deltaArgs.deltaSegments) {\n\t\t\t\t\t\tlength -= segment.cachedLength;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\tdescribe(\"is invoked\", () => {\n\t\tit(\"on local obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\tlet count = 0;\n\n\t\t\thelper.clients.A.on(\"delta\", (opArgs, deltaArgs) => {\n\t\t\t\tif (opArgs.op.type === MergeTreeDeltaType.OBLITERATE) {\n\t\t\t\t\tcount += 1;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\thelper.insertText(\"A\", 0, \"a\");\n\t\t\tassert.equal(count, 0);\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\tassert.equal(count, 1);\n\t\t\thelper.processAllOps();\n\t\t\tassert.equal(count, 1);\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"on remote obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\tlet count = 0;\n\n\t\t\thelper.clients.A.on(\"delta\", (opArgs, deltaArgs) => {\n\t\t\t\tif (opArgs.op.type === MergeTreeDeltaType.OBLITERATE) {\n\t\t\t\t\tcount += 1;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\thelper.insertText(\"B\", 0, \"a\");\n\t\t\tassert.equal(count, 0);\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\tassert.equal(count, 0);\n\t\t\thelper.processAllOps();\n\t\t\tassert.equal(count, 1);\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\t});\n\n\tdescribe(\"overlapping obliterate and remove\", () => {\n\t\tconst text = \"abcdef\";\n\n\t\tit(\"remove first\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.clients.A.on(\"delta\", cb);\n\n\t\t\thelper.insertText(\"A\", 0, text);\n\t\t\thelper.processAllOps();\n\t\t\tassert.equal(length, text.length);\n\t\t\thelper.removeRange(\"B\", 0, text.length);\n\t\t\thelper.obliterateRange(\"C\", 0, text.length);\n\t\t\thelper.processAllOps();\n\t\t\tassert.equal(length, 0);\n\n\t\t\thelper.logger.validate();\n\n\t\t\thelper.clients.A.off(\"delta\", cb);\n\t\t});\n\n\t\tit(\"obliterate first\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.clients.A.on(\"delta\", cb);\n\n\t\t\thelper.insertText(\"B\", 0, text);\n\t\t\thelper.processAllOps();\n\t\t\tassert.equal(length, text.length);\n\t\t\thelper.obliterateRange(\"C\", 0, text.length);\n\t\t\thelper.removeRange(\"B\", 0, text.length);\n\t\t\thelper.processAllOps();\n\t\t\tassert.equal(length, 0);\n\n\t\t\thelper.logger.validate();\n\n\t\t\thelper.clients.A.off(\"delta\", cb);\n\t\t});\n\t});\n\n\tit(\"overlapping obliterate and obliterate\", () => {\n\t\tconst helper = new ReconnectTestHelper();\n\n\t\thelper.clients.A.on(\"delta\", cb);\n\n\t\tconst text = \"abcdef\";\n\n\t\thelper.insertText(\"B\", 0, text);\n\t\thelper.processAllOps();\n\t\tassert.equal(length, text.length);\n\t\thelper.obliterateRange(\"B\", 0, text.length);\n\t\thelper.obliterateRange(\"C\", 0, text.length);\n\t\thelper.processAllOps();\n\t\tassert.equal(length, 0);\n\n\t\thelper.logger.validate();\n\n\t\thelper.clients.A.off(\"delta\", cb);\n\t});\n\n\tdescribe(\"insert into obliterated range\", () => {\n\t\tconst text = \"abcdef\";\n\n\t\tit(\"insert first\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.clients.A.on(\"delta\", cb);\n\n\t\t\thelper.insertText(\"B\", 0, text);\n\t\t\thelper.processAllOps();\n\t\t\tassert.equal(length, text.length);\n\t\t\thelper.insertText(\"B\", 3, text);\n\t\t\thelper.obliterateRange(\"C\", 0, text.length);\n\t\t\thelper.processAllOps();\n\t\t\tassert.equal(length, 0);\n\n\t\t\thelper.logger.validate();\n\n\t\t\thelper.clients.A.off(\"delta\", cb);\n\t\t});\n\n\t\tit(\"obliterate first\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.clients.A.on(\"delta\", cb);\n\n\t\t\thelper.insertText(\"B\", 0, text);\n\t\t\thelper.processAllOps();\n\t\t\tassert.equal(length, text.length);\n\t\t\thelper.obliterateRange(\"C\", 0, text.length);\n\t\t\thelper.insertText(\"B\", 3, text);\n\t\t\thelper.processAllOps();\n\t\t\tassert.equal(length, 0);\n\n\t\t\thelper.logger.validate();\n\n\t\t\thelper.clients.A.off(\"delta\", cb);\n\t\t});\n\t});\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obliterate.partialLength.spec.d.ts","sourceRoot":"","sources":["../../src/test/obliterate.partialLength.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|