@fluidframework/merge-tree 2.30.0 → 2.31.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/CHANGELOG.md +403 -399
- package/api-report/merge-tree.legacy.alpha.api.md +1 -0
- package/dist/MergeTreeTextHelper.d.ts +9 -3
- package/dist/MergeTreeTextHelper.d.ts.map +1 -1
- package/dist/MergeTreeTextHelper.js +5 -5
- package/dist/MergeTreeTextHelper.js.map +1 -1
- package/dist/client.d.ts +7 -13
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +136 -110
- package/dist/client.js.map +1 -1
- package/dist/endOfTreeSegment.d.ts +12 -8
- package/dist/endOfTreeSegment.d.ts.map +1 -1
- package/dist/endOfTreeSegment.js +2 -4
- package/dist/endOfTreeSegment.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/mergeTree.d.ts +37 -23
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +400 -483
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeDeltaCallback.d.ts +4 -8
- package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/dist/mergeTreeDeltaCallback.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +32 -10
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +43 -28
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/partialLengths.d.ts +2 -2
- package/dist/partialLengths.d.ts.map +1 -1
- package/dist/partialLengths.js +181 -109
- package/dist/partialLengths.js.map +1 -1
- package/dist/perspective.d.ts +8 -27
- package/dist/perspective.d.ts.map +1 -1
- package/dist/perspective.js +7 -67
- package/dist/perspective.js.map +1 -1
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +2 -2
- package/dist/revertibles.js.map +1 -1
- package/dist/segmentInfos.d.ts +20 -106
- package/dist/segmentInfos.d.ts.map +1 -1
- package/dist/segmentInfos.js +28 -42
- package/dist/segmentInfos.js.map +1 -1
- package/dist/segmentPropertiesManager.d.ts +1 -14
- package/dist/segmentPropertiesManager.d.ts.map +1 -1
- package/dist/segmentPropertiesManager.js +3 -17
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/snapshotLoader.d.ts.map +1 -1
- package/dist/snapshotLoader.js +62 -19
- package/dist/snapshotLoader.js.map +1 -1
- package/dist/snapshotV1.d.ts.map +1 -1
- package/dist/snapshotV1.js +55 -24
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.d.ts.map +1 -1
- package/dist/snapshotlegacy.js +6 -9
- package/dist/snapshotlegacy.js.map +1 -1
- package/dist/stamps.d.ts +1 -1
- package/dist/stamps.js +1 -1
- package/dist/stamps.js.map +1 -1
- package/dist/test/Insertion.perf.spec.js +6 -51
- package/dist/test/Insertion.perf.spec.js.map +1 -1
- package/dist/test/PartialLengths.perf.spec.js +18 -25
- package/dist/test/PartialLengths.perf.spec.js.map +1 -1
- package/dist/test/Removal.perf.spec.js +13 -41
- package/dist/test/Removal.perf.spec.js.map +1 -1
- package/dist/test/beastTest.spec.d.ts.map +1 -1
- package/dist/test/beastTest.spec.js +41 -66
- package/dist/test/beastTest.spec.js.map +1 -1
- package/dist/test/client.annotateMarker.spec.js +1 -11
- package/dist/test/client.annotateMarker.spec.js.map +1 -1
- package/dist/test/client.applyMsg.spec.js +14 -14
- package/dist/test/client.applyMsg.spec.js.map +1 -1
- package/dist/test/client.getPosition.spec.js +1 -1
- package/dist/test/client.getPosition.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js +1 -1
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.rollback.spec.js +49 -58
- package/dist/test/client.rollback.spec.js.map +1 -1
- package/dist/test/client.rollbackFarm.spec.js +1 -1
- package/dist/test/client.rollbackFarm.spec.js.map +1 -1
- package/dist/test/client.searchForMarker.spec.js +4 -21
- package/dist/test/client.searchForMarker.spec.js.map +1 -1
- package/dist/test/index.d.ts +2 -2
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +2 -6
- package/dist/test/index.js.map +1 -1
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js +14 -59
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.annotate.spec.js +47 -63
- package/dist/test/mergeTree.annotate.spec.js.map +1 -1
- package/dist/test/mergeTree.insert.deltaCallback.spec.js +9 -62
- package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.insertingWalk.spec.js +59 -125
- package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +12 -93
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js +10 -7
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/dist/test/mergeTree.walk.spec.js +2 -14
- package/dist/test/mergeTree.walk.spec.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.js +2 -2
- package/dist/test/mergeTreeOperationRunner.js.map +1 -1
- package/dist/test/obliterate.concurrent.spec.js +18 -23
- package/dist/test/obliterate.concurrent.spec.js.map +1 -1
- package/dist/test/obliterate.partialLength.spec.js +166 -136
- package/dist/test/obliterate.partialLength.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +16 -126
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/partialLength.spec.js +28 -196
- package/dist/test/partialLength.spec.js.map +1 -1
- package/dist/test/perspective.spec.js +34 -0
- package/dist/test/perspective.spec.js.map +1 -1
- package/dist/test/propertyManager.spec.js +1 -1
- package/dist/test/propertyManager.spec.js.map +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js +0 -2
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/dist/test/segmentGroupCollection.spec.js +10 -4
- package/dist/test/segmentGroupCollection.spec.js.map +1 -1
- package/dist/test/testClient.d.ts +1 -0
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js +16 -26
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testClientLogger.d.ts.map +1 -1
- package/dist/test/testClientLogger.js +3 -10
- package/dist/test/testClientLogger.js.map +1 -1
- package/dist/test/testServer.d.ts +2 -1
- package/dist/test/testServer.d.ts.map +1 -1
- package/dist/test/testServer.js +7 -5
- package/dist/test/testServer.js.map +1 -1
- package/dist/test/testUtils.d.ts +36 -56
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +68 -77
- 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 +5 -2
- package/dist/test/text.js.map +1 -1
- package/dist/textSegment.d.ts +0 -6
- package/dist/textSegment.d.ts.map +1 -1
- package/dist/textSegment.js.map +1 -1
- package/dist/zamboni.d.ts.map +1 -1
- package/dist/zamboni.js +53 -26
- package/dist/zamboni.js.map +1 -1
- package/lib/MergeTreeTextHelper.d.ts +9 -3
- package/lib/MergeTreeTextHelper.d.ts.map +1 -1
- package/lib/MergeTreeTextHelper.js +5 -5
- package/lib/MergeTreeTextHelper.js.map +1 -1
- package/lib/client.d.ts +7 -13
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +117 -116
- package/lib/client.js.map +1 -1
- package/lib/endOfTreeSegment.d.ts +12 -8
- package/lib/endOfTreeSegment.d.ts.map +1 -1
- package/lib/endOfTreeSegment.js +2 -4
- package/lib/endOfTreeSegment.js.map +1 -1
- package/lib/index.d.ts +6 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/mergeTree.d.ts +37 -23
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +381 -488
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeDeltaCallback.d.ts +4 -8
- package/lib/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/lib/mergeTreeDeltaCallback.js.map +1 -1
- package/lib/mergeTreeNodes.d.ts +32 -10
- package/lib/mergeTreeNodes.d.ts.map +1 -1
- package/lib/mergeTreeNodes.js +42 -29
- package/lib/mergeTreeNodes.js.map +1 -1
- package/lib/partialLengths.d.ts +2 -2
- package/lib/partialLengths.d.ts.map +1 -1
- package/lib/partialLengths.js +160 -111
- package/lib/partialLengths.js.map +1 -1
- package/lib/perspective.d.ts +8 -27
- package/lib/perspective.d.ts.map +1 -1
- package/lib/perspective.js +8 -68
- package/lib/perspective.js.map +1 -1
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +2 -2
- package/lib/revertibles.js.map +1 -1
- package/lib/segmentInfos.d.ts +20 -106
- package/lib/segmentInfos.d.ts.map +1 -1
- package/lib/segmentInfos.js +26 -37
- package/lib/segmentInfos.js.map +1 -1
- package/lib/segmentPropertiesManager.d.ts +1 -14
- package/lib/segmentPropertiesManager.d.ts.map +1 -1
- package/lib/segmentPropertiesManager.js +2 -16
- package/lib/segmentPropertiesManager.js.map +1 -1
- package/lib/snapshotLoader.d.ts.map +1 -1
- package/lib/snapshotLoader.js +39 -19
- package/lib/snapshotLoader.js.map +1 -1
- package/lib/snapshotV1.d.ts.map +1 -1
- package/lib/snapshotV1.js +34 -26
- package/lib/snapshotV1.js.map +1 -1
- package/lib/snapshotlegacy.d.ts.map +1 -1
- package/lib/snapshotlegacy.js +7 -10
- package/lib/snapshotlegacy.js.map +1 -1
- package/lib/stamps.d.ts +1 -1
- package/lib/stamps.js +1 -1
- package/lib/stamps.js.map +1 -1
- package/lib/test/Insertion.perf.spec.js +6 -51
- package/lib/test/Insertion.perf.spec.js.map +1 -1
- package/lib/test/PartialLengths.perf.spec.js +18 -25
- package/lib/test/PartialLengths.perf.spec.js.map +1 -1
- package/lib/test/Removal.perf.spec.js +13 -41
- package/lib/test/Removal.perf.spec.js.map +1 -1
- package/lib/test/beastTest.spec.d.ts.map +1 -1
- package/lib/test/beastTest.spec.js +42 -67
- package/lib/test/beastTest.spec.js.map +1 -1
- package/lib/test/client.annotateMarker.spec.js +1 -11
- package/lib/test/client.annotateMarker.spec.js.map +1 -1
- package/lib/test/client.applyMsg.spec.js +14 -14
- package/lib/test/client.applyMsg.spec.js.map +1 -1
- package/lib/test/client.getPosition.spec.js +1 -1
- package/lib/test/client.getPosition.spec.js.map +1 -1
- package/lib/test/client.localReference.spec.js +1 -1
- package/lib/test/client.localReference.spec.js.map +1 -1
- package/lib/test/client.rollback.spec.js +50 -59
- package/lib/test/client.rollback.spec.js.map +1 -1
- package/lib/test/client.rollbackFarm.spec.js +1 -1
- package/lib/test/client.rollbackFarm.spec.js.map +1 -1
- package/lib/test/client.searchForMarker.spec.js +4 -21
- package/lib/test/client.searchForMarker.spec.js.map +1 -1
- package/lib/test/index.d.ts +2 -2
- package/lib/test/index.d.ts.map +1 -1
- package/lib/test/index.js +1 -1
- package/lib/test/index.js.map +1 -1
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js +15 -60
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.annotate.spec.js +48 -64
- package/lib/test/mergeTree.annotate.spec.js.map +1 -1
- package/lib/test/mergeTree.insert.deltaCallback.spec.js +10 -63
- package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.insertingWalk.spec.js +61 -127
- package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +13 -94
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js +10 -7
- package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/lib/test/mergeTree.walk.spec.js +2 -14
- package/lib/test/mergeTree.walk.spec.js.map +1 -1
- package/lib/test/mergeTreeOperationRunner.js +3 -3
- package/lib/test/mergeTreeOperationRunner.js.map +1 -1
- package/lib/test/obliterate.concurrent.spec.js +18 -23
- package/lib/test/obliterate.concurrent.spec.js.map +1 -1
- package/lib/test/obliterate.partialLength.spec.js +167 -137
- package/lib/test/obliterate.partialLength.spec.js.map +1 -1
- package/lib/test/obliterate.spec.js +17 -127
- package/lib/test/obliterate.spec.js.map +1 -1
- package/lib/test/partialLength.spec.js +29 -197
- package/lib/test/partialLength.spec.js.map +1 -1
- package/lib/test/perspective.spec.js +34 -0
- package/lib/test/perspective.spec.js.map +1 -1
- package/lib/test/propertyManager.spec.js +2 -2
- package/lib/test/propertyManager.spec.js.map +1 -1
- package/lib/test/resetPendingSegmentsToOp.spec.js +0 -2
- package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/lib/test/segmentGroupCollection.spec.js +10 -4
- package/lib/test/segmentGroupCollection.spec.js.map +1 -1
- package/lib/test/testClient.d.ts +1 -0
- package/lib/test/testClient.d.ts.map +1 -1
- package/lib/test/testClient.js +18 -28
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/testClientLogger.d.ts.map +1 -1
- package/lib/test/testClientLogger.js +3 -10
- package/lib/test/testClientLogger.js.map +1 -1
- package/lib/test/testServer.d.ts +2 -1
- package/lib/test/testServer.d.ts.map +1 -1
- package/lib/test/testServer.js +7 -5
- package/lib/test/testServer.js.map +1 -1
- package/lib/test/testUtils.d.ts +36 -56
- package/lib/test/testUtils.d.ts.map +1 -1
- package/lib/test/testUtils.js +66 -48
- package/lib/test/testUtils.js.map +1 -1
- package/lib/test/text.d.ts +2 -2
- package/lib/test/text.d.ts.map +1 -1
- package/lib/test/text.js +6 -3
- package/lib/test/text.js.map +1 -1
- package/lib/textSegment.d.ts +0 -6
- package/lib/textSegment.d.ts.map +1 -1
- package/lib/textSegment.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/lib/zamboni.d.ts.map +1 -1
- package/lib/zamboni.js +32 -28
- package/lib/zamboni.js.map +1 -1
- package/package.json +17 -20
- package/src/MergeTreeTextHelper.ts +17 -12
- package/src/client.ts +141 -197
- package/src/endOfTreeSegment.ts +11 -8
- package/src/index.ts +4 -3
- package/src/mergeTree.ts +482 -633
- package/src/mergeTreeDeltaCallback.ts +4 -8
- package/src/mergeTreeNodes.ts +66 -45
- package/src/partialLengths.ts +181 -137
- package/src/perspective.ts +17 -95
- package/src/revertibles.ts +2 -7
- package/src/segmentInfos.ts +48 -141
- package/src/segmentPropertiesManager.ts +2 -16
- package/src/snapshotLoader.ts +62 -30
- package/src/snapshotV1.ts +36 -28
- package/src/snapshotlegacy.ts +7 -16
- package/src/stamps.ts +1 -1
- package/src/textSegment.ts +0 -13
- package/src/zamboni.ts +38 -32
- package/tsconfig.json +1 -0
- package/prettier.config.cjs +0 -8
|
@@ -39,7 +39,7 @@ describe("MergeTree.Client", () => {
|
|
|
39
39
|
// TODO: The type here is probably MergeTreeDeltaType but
|
|
40
40
|
// omitting GROUP, given the typing of the rollback method.
|
|
41
41
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
|
42
|
-
clients[msg[0].clientId].rollback
|
|
42
|
+
clients[msg[0].clientId].rollback({ type: msg[0].contents.type }, msg[1]);
|
|
43
43
|
}
|
|
44
44
|
logger.validate();
|
|
45
45
|
logger.dispose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.rollbackFarm.spec.js","sourceRoot":"","sources":["../../src/test/client.rollbackFarm.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,6DAA6D;AAE7D,gFAAkE;AAElE,+EAQuC;AACvC,+DAAsF;AAEtF,MAAM,aAAa,GAAoB,CAAC,yCAAW,EAAE,2CAAa,EAAE,4CAAc,CAAC,CAAC;AAEpF,MAAM,cAAc,GAAG;IACtB,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9B,mBAAmB,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACxC,MAAM,EAAE,EAAE;IACV,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,aAAa;IACzB,UAAU,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,GAAG,CAAC;CAChD,CAAC;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,IAAA,0CAAY,EAAC,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,cAAc,EAAE,EAAE,EAAE;QACnF,EAAE,CAAC,gBAAgB,SAAS,oBAAoB,cAAc,EAAE,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,MAAM,GAAG,IAAA,kCAAU,EAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;YAE5E,wDAAwD;YACxD,MAAM,OAAO,GAAG,IAAA,iDAA2B,EAC1C,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,6BAA6B,EAAE,IAAI,EAAE,EAAE,EACtE,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,CACH,CAAC;YACF,IAAI,GAAG,GAAG,CAAC,CAAC;YAEZ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC5D,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG;oBAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAEjD,MAAM,MAAM,GAAG,IAAI,sCAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC;gBAEnE,wDAAwD;gBACxD,MAAM,WAAW,GAAG,IAAA,iEAAmC,EACtD,MAAM,EACN,GAAG,EACH,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EACjC,MAAM,EACN,cAAc,CAAC,WAAW,EAC1B,SAAS,EACT,cAAc,CAAC,UAAU,CACzB,CAAC;gBACF,GAAG,GAAG,IAAA,2CAAa,EAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAE3D,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAElB,yDAAyD;gBACzD,MAAM,YAAY,GAAG,IAAA,iEAAmC,EACvD,MAAM,EACN,GAAG,EACH,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EACjC,MAAM,EACN,cAAc,EACd,SAAS,EACT,cAAc,CAAC,UAAU,CACzB,CAAC;gBACF,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAChC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;oBAC/B,yDAAyD;oBACzD,2DAA2D;oBAC3D,yGAAyG;oBACzG,OAAO,CAAC,GAAI,CAAC,CAAC,CAAC,CAAC,QAAS,CAAC,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"client.rollbackFarm.spec.js","sourceRoot":"","sources":["../../src/test/client.rollbackFarm.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { makeRandom } from \"@fluid-private/stochastic-test-utils\";\n\nimport {\n\tTestOperation,\n\tannotateRange,\n\tapplyMessages,\n\tdoOverRanges,\n\tgenerateOperationMessagesForClients,\n\tinsertAtRefPos,\n\tremoveRange,\n} from \"./mergeTreeOperationRunner.js\";\nimport { TestClientLogger, createClientsAtInitialState } from \"./testClientLogger.js\";\n\nconst allOperations: TestOperation[] = [removeRange, annotateRange, insertAtRefPos];\n\nconst defaultOptions = {\n\tminLength: { min: 1, max: 32 },\n\topsPerRollbackRange: { min: 1, max: 32 },\n\trounds: 10,\n\topsPerRound: 10,\n\toperations: allOperations,\n\tgrowthFunc: (input: number): number => input * 2,\n};\n\ndescribe(\"MergeTree.Client\", () => {\n\tdoOverRanges(defaultOptions, ({ minLength, opsPerRollbackRange: opsPerRollback }) => {\n\t\tit(`RollbackFarm_${minLength} OpsPerRollback: ${opsPerRollback}`, async () => {\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, minLength, opsPerRollback);\n\n\t\t\t// A: readonly, B: rollback, C: rollback + edit, D: edit\n\t\t\tconst clients = createClientsAtInitialState(\n\t\t\t\t{ initialState: \"\", options: { mergeTreeEnableAnnotateAdjust: true } },\n\t\t\t\t\"A\",\n\t\t\t\t\"B\",\n\t\t\t\t\"C\",\n\t\t\t\t\"D\",\n\t\t\t);\n\t\t\tlet seq = 0;\n\n\t\t\tfor (let round = 0; round < defaultOptions.rounds; round++) {\n\t\t\t\tfor (const c of clients.all) c.updateMinSeq(seq);\n\n\t\t\t\tconst logger = new TestClientLogger(clients.all, `Round ${round}`);\n\n\t\t\t\t// initialize and ack 10 random actions on either C or D\n\t\t\t\tconst initialMsgs = generateOperationMessagesForClients(\n\t\t\t\t\trandom,\n\t\t\t\t\tseq,\n\t\t\t\t\t[clients.A, clients.C, clients.D],\n\t\t\t\t\tlogger,\n\t\t\t\t\tdefaultOptions.opsPerRound,\n\t\t\t\t\tminLength,\n\t\t\t\t\tdefaultOptions.operations,\n\t\t\t\t);\n\t\t\t\tseq = applyMessages(seq, initialMsgs, clients.all, logger);\n\n\t\t\t\tlogger.validate();\n\n\t\t\t\t// generate messages to rollback on B or C, then rollback\n\t\t\t\tconst rollbackMsgs = generateOperationMessagesForClients(\n\t\t\t\t\trandom,\n\t\t\t\t\tseq,\n\t\t\t\t\t[clients.A, clients.B, clients.C],\n\t\t\t\t\tlogger,\n\t\t\t\t\topsPerRollback,\n\t\t\t\t\tminLength,\n\t\t\t\t\tdefaultOptions.operations,\n\t\t\t\t);\n\t\t\t\twhile (rollbackMsgs.length > 0) {\n\t\t\t\t\tconst msg = rollbackMsgs.pop();\n\t\t\t\t\t// TODO: The type here is probably MergeTreeDeltaType but\n\t\t\t\t\t// omitting GROUP, given the typing of the rollback method.\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n\t\t\t\t\tclients[msg![0].clientId!].rollback(\n\t\t\t\t\t\t{ type: (msg![0].contents as { type?: unknown }).type },\n\t\t\t\t\t\tmsg![1],\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlogger.validate();\n\t\t\t\tlogger.dispose();\n\t\t\t}\n\t\t}).timeout(30 * 10000);\n\t});\n});\n"]}
|
|
@@ -13,21 +13,12 @@ const referencePositions_js_1 = require("../referencePositions.js");
|
|
|
13
13
|
const textSegment_js_1 = require("../textSegment.js");
|
|
14
14
|
const testClient_js_1 = require("./testClient.js");
|
|
15
15
|
const testClientLogger_js_1 = require("./testClientLogger.js");
|
|
16
|
-
const testUtils_js_1 = require("./testUtils.js");
|
|
17
16
|
describe("TestClient", () => {
|
|
18
17
|
const localUserLongId = "localUser";
|
|
19
18
|
let client;
|
|
20
19
|
beforeEach(() => {
|
|
21
20
|
client = new testClient_js_1.TestClient();
|
|
22
|
-
(0,
|
|
23
|
-
mergeTree: client.mergeTree,
|
|
24
|
-
pos: 0,
|
|
25
|
-
segments: [textSegment_js_1.TextSegment.make("")],
|
|
26
|
-
refSeq: constants_js_1.UniversalSequenceNumber,
|
|
27
|
-
clientId: client.getClientId(),
|
|
28
|
-
seq: constants_js_1.UniversalSequenceNumber,
|
|
29
|
-
opArgs: undefined,
|
|
30
|
-
});
|
|
21
|
+
client.mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("")], client.mergeTree.localPerspective, client.mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
31
22
|
client.startOrUpdateCollaboration(localUserLongId);
|
|
32
23
|
});
|
|
33
24
|
describe(".searchForMarker", () => {
|
|
@@ -277,7 +268,7 @@ describe("TestClient", () => {
|
|
|
277
268
|
[referencePositions_js_1.reservedTileLabelsKey]: ["Eop"],
|
|
278
269
|
});
|
|
279
270
|
client.removeRangeLocal(0, 1);
|
|
280
|
-
client.rollback
|
|
271
|
+
client.rollback({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
|
|
281
272
|
const marker = client.searchForMarker(0, "Eop", true);
|
|
282
273
|
(0, node_assert_1.strict)(marker, "Returned marker undefined.");
|
|
283
274
|
const exp = client.mergeTree.referencePositionToLocalPosition(marker, constants_js_1.UniversalSequenceNumber, client.getClientId());
|
|
@@ -289,7 +280,7 @@ describe("TestClient", () => {
|
|
|
289
280
|
[mergeTreeNodes_js_1.reservedMarkerIdKey]: "marker",
|
|
290
281
|
[referencePositions_js_1.reservedTileLabelsKey]: ["Eop"],
|
|
291
282
|
});
|
|
292
|
-
client.rollback
|
|
283
|
+
client.rollback({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
|
|
293
284
|
const marker = client.searchForMarker(0, "Eop", true);
|
|
294
285
|
node_assert_1.strict.equal(marker, undefined, "Returned marker should be undefined.");
|
|
295
286
|
});
|
|
@@ -397,15 +388,7 @@ describe("TestClient", () => {
|
|
|
397
388
|
let client2;
|
|
398
389
|
beforeEach(() => {
|
|
399
390
|
client2 = new testClient_js_1.TestClient();
|
|
400
|
-
(0,
|
|
401
|
-
mergeTree: client2.mergeTree,
|
|
402
|
-
pos: 0,
|
|
403
|
-
segments: [textSegment_js_1.TextSegment.make("")],
|
|
404
|
-
refSeq: constants_js_1.UniversalSequenceNumber,
|
|
405
|
-
clientId: client2.getClientId(),
|
|
406
|
-
seq: constants_js_1.UniversalSequenceNumber,
|
|
407
|
-
opArgs: undefined,
|
|
408
|
-
});
|
|
391
|
+
client2.mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("")], client2.mergeTree.localPerspective, client2.mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
409
392
|
client2.startOrUpdateCollaboration(remoteUserLongId);
|
|
410
393
|
});
|
|
411
394
|
it("Should be able to find remotely inserted marker", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.searchForMarker.spec.js","sourceRoot":"","sources":["../../src/test/client.searchForMarker.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"node:assert\";\n\nimport { makeRandom } from \"@fluid-private/stochastic-test-utils\";\n\nimport { UniversalSequenceNumber } from \"../constants.js\";\nimport { MaxNodesInBlock, reservedMarkerIdKey } from \"../mergeTreeNodes.js\";\nimport { MergeTreeDeltaType, ReferenceType } from \"../ops.js\";\nimport { reservedTileLabelsKey } from \"../referencePositions.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nimport { TestClient } from \"./testClient.js\";\nimport { createClientsAtInitialState } from \"./testClientLogger.js\";\nimport { insertSegments } from \"./testUtils.js\";\n\ndescribe(\"TestClient\", () => {\n\tconst localUserLongId = \"localUser\";\n\tlet client: TestClient;\n\n\tbeforeEach(() => {\n\t\tclient = new TestClient();\n\t\tinsertSegments({\n\t\t\tmergeTree: client.mergeTree,\n\t\t\tpos: 0,\n\t\t\tsegments: [TextSegment.make(\"\")],\n\t\t\trefSeq: UniversalSequenceNumber,\n\t\t\tclientId: client.getClientId(),\n\t\t\tseq: UniversalSequenceNumber,\n\t\t\topArgs: undefined,\n\t\t});\n\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t});\n\n\tdescribe(\".searchForMarker\", () => {\n\t\tit(\"Should return marker at the search position in either direction\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return the marker at the search position in either direction from multiple blocks\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcd\");\n\t\t\tclient.insertTextLocal(4, \"efg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 3, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label from client with single marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(1, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 6, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\t\t\tassert.equal(exp, 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position based on label from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 6, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tconst offset = index % 3 === 0 ? index % 3 : 3 - (index % 3);\n\t\t\t\tassert.equal(exp, index + offset, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(exp, index - (index % 3), \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant forward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant backward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from forwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock * 3 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from backwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock * 3 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find marker from client with text length 1\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(client.getLength() - 1, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker1 = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find marker position with index out of bound\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker2 = client.searchForMarker(-1, markerLabel, false);\n\n\t\t\tassert.equal(marker2, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a deleted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.removeRangeLocal(0, 1);\n\n\t\t\tclient.rollback?.(\n\t\t\t\t{ type: MergeTreeDeltaType.REMOVE },\n\t\t\t\tclient.peekPendingSegmentGroups(),\n\t\t\t);\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find an inserted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.rollback?.(\n\t\t\t\t{ type: MergeTreeDeltaType.INSERT },\n\t\t\t\tclient.peekPendingSegmentGroups(),\n\t\t\t);\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at 0 searching at 0 in both directions\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(0, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at length-1 searching at length-1 in both directions\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tconst length = client.getLength();\n\t\t\tassert.equal(length, 4);\n\n\t\t\tconst marker = client.searchForMarker(length - 1, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(length - 1, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length > 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length > 1\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from text without the specified marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from null text\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find a removed marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tclient.removeRangeLocal(0, 1);\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined\");\n\t\t});\n\n\t\tdescribe(\"with remote client\", () => {\n\t\t\tconst remoteUserLongId = \"remoteUser\";\n\t\t\tlet client2: TestClient;\n\t\t\tbeforeEach(() => {\n\t\t\t\tclient2 = new TestClient();\n\t\t\t\tinsertSegments({\n\t\t\t\t\tmergeTree: client2.mergeTree,\n\t\t\t\t\tpos: 0,\n\t\t\t\t\tsegments: [TextSegment.make(\"\")],\n\t\t\t\t\trefSeq: UniversalSequenceNumber,\n\t\t\t\t\tclientId: client2.getClientId(),\n\t\t\t\t\tseq: UniversalSequenceNumber,\n\t\t\t\t\topArgs: undefined,\n\t\t\t\t});\n\t\t\t\tclient2.startOrUpdateCollaboration(remoteUserLongId);\n\t\t\t});\n\n\t\t\tit(\"Should be able to find remotely inserted marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst markerMsg = client2.makeOpMessage(\n\t\t\t\t\tclient2.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\t++seq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(markerMsg);\n\t\t\t\tclient2.applyMsg(markerMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert(marker, \"Returned marker undefined\");\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t\t});\n\n\t\t\tit(\"Should not be able to find remotely removed marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst mInsertMsg = client.makeOpMessage(\n\t\t\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\t++seq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(mInsertMsg);\n\t\t\t\tclient2.applyMsg(mInsertMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst mRemoveMsg = client2.makeOpMessage(client2.removeRangeLocal(0, 1), ++seq);\n\t\t\t\tclient.applyMsg(mRemoveMsg);\n\t\t\t\tclient2.applyMsg(mRemoveMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 3, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 3, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t\t});\n\t\t});\n\t});\n\tdescribe(\".getMarkerById\", () => {\n\t\tit(\"removed marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState({ initialState: \"hello world\" }, \"A\", \"B\");\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.removeRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove after ack\",\n\t\t\t);\n\t\t});\n\t\tit(\"obliterate marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState(\n\t\t\t\t{ initialState: \"hello world\", options: { mergeTreeEnableObliterate: true } },\n\t\t\t\t\"A\",\n\t\t\t\t\"B\",\n\t\t\t);\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.obliterateRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate after ack\",\n\t\t\t);\n\t\t});\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"client.searchForMarker.spec.js","sourceRoot":"","sources":["../../src/test/client.searchForMarker.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"node:assert\";\n\nimport { makeRandom } from \"@fluid-private/stochastic-test-utils\";\n\nimport { UniversalSequenceNumber } from \"../constants.js\";\nimport { MaxNodesInBlock, reservedMarkerIdKey } from \"../mergeTreeNodes.js\";\nimport { MergeTreeDeltaType, ReferenceType } from \"../ops.js\";\nimport { reservedTileLabelsKey } from \"../referencePositions.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nimport { TestClient } from \"./testClient.js\";\nimport { createClientsAtInitialState } from \"./testClientLogger.js\";\n\ndescribe(\"TestClient\", () => {\n\tconst localUserLongId = \"localUser\";\n\tlet client: TestClient;\n\n\tbeforeEach(() => {\n\t\tclient = new TestClient();\n\t\tclient.mergeTree.insertSegments(\n\t\t\t0,\n\t\t\t[TextSegment.make(\"\")],\n\t\t\tclient.mergeTree.localPerspective,\n\t\t\tclient.mergeTree.collabWindow.mintNextLocalOperationStamp(),\n\t\t\tundefined,\n\t\t);\n\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t});\n\n\tdescribe(\".searchForMarker\", () => {\n\t\tit(\"Should return marker at the search position in either direction\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return the marker at the search position in either direction from multiple blocks\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcd\");\n\t\t\tclient.insertTextLocal(4, \"efg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 3, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label from client with single marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(1, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 6, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\t\t\tassert.equal(exp, 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position based on label from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 6, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tconst offset = index % 3 === 0 ? index % 3 : 3 - (index % 3);\n\t\t\t\tassert.equal(exp, index + offset, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(exp, index - (index % 3), \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant forward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant backward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from forwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock * 3 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from backwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock * 3 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find marker from client with text length 1\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(client.getLength() - 1, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker1 = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find marker position with index out of bound\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker2 = client.searchForMarker(-1, markerLabel, false);\n\n\t\t\tassert.equal(marker2, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a deleted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.removeRangeLocal(0, 1);\n\n\t\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find an inserted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at 0 searching at 0 in both directions\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(0, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at length-1 searching at length-1 in both directions\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tconst length = client.getLength();\n\t\t\tassert.equal(length, 4);\n\n\t\t\tconst marker = client.searchForMarker(length - 1, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(length - 1, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length > 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length > 1\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from text without the specified marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from null text\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find a removed marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tclient.removeRangeLocal(0, 1);\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined\");\n\t\t});\n\n\t\tdescribe(\"with remote client\", () => {\n\t\t\tconst remoteUserLongId = \"remoteUser\";\n\t\t\tlet client2: TestClient;\n\t\t\tbeforeEach(() => {\n\t\t\t\tclient2 = new TestClient();\n\t\t\t\tclient2.mergeTree.insertSegments(\n\t\t\t\t\t0,\n\t\t\t\t\t[TextSegment.make(\"\")],\n\t\t\t\t\tclient2.mergeTree.localPerspective,\n\t\t\t\t\tclient2.mergeTree.collabWindow.mintNextLocalOperationStamp(),\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\t\t\t\tclient2.startOrUpdateCollaboration(remoteUserLongId);\n\t\t\t});\n\n\t\t\tit(\"Should be able to find remotely inserted marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst markerMsg = client2.makeOpMessage(\n\t\t\t\t\tclient2.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\t++seq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(markerMsg);\n\t\t\t\tclient2.applyMsg(markerMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert(marker, \"Returned marker undefined\");\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t\t});\n\n\t\t\tit(\"Should not be able to find remotely removed marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst mInsertMsg = client.makeOpMessage(\n\t\t\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\t++seq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(mInsertMsg);\n\t\t\t\tclient2.applyMsg(mInsertMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst mRemoveMsg = client2.makeOpMessage(client2.removeRangeLocal(0, 1), ++seq);\n\t\t\t\tclient.applyMsg(mRemoveMsg);\n\t\t\t\tclient2.applyMsg(mRemoveMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 3, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 3, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t\t});\n\t\t});\n\t});\n\tdescribe(\".getMarkerById\", () => {\n\t\tit(\"removed marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState({ initialState: \"hello world\" }, \"A\", \"B\");\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.removeRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove after ack\",\n\t\t\t);\n\t\t});\n\t\tit(\"obliterate marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState(\n\t\t\t\t{ initialState: \"hello world\", options: { mergeTreeEnableObliterate: true } },\n\t\t\t\t\"A\",\n\t\t\t\t\"B\",\n\t\t\t);\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.obliterateRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate after ack\",\n\t\t\t);\n\t\t});\n\t});\n});\n"]}
|
package/dist/test/index.d.ts
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export { createRevertDriver, getStats, MergeTreeStats, specToSegment, TestClient, TestClientRevertibleDriver, } from "./testClient.js";
|
|
6
6
|
export { checkTextMatchRelative, TestServer } from "./testServer.js";
|
|
7
|
-
export { countOperations,
|
|
7
|
+
export { countOperations, loadTextFromFile, loadTextFromFileWithMarkers, nodeOrdinalsHaveIntegrity, validatePartialLengths, useStrictPartialLengthChecks, } from "./testUtils.js";
|
|
8
8
|
export { annotateRange, applyMessages, doOverRange, generateClientNames, generateOperationMessagesForClients, IConfigRange, IMergeTreeOperationRunnerConfig, insertAtRefPos, removeRange, ReplayGroup, replayResultsPath, runMergeTreeOperationRunner, TestOperation, } from "./mergeTreeOperationRunner.js";
|
|
9
9
|
export { LRUSegment, MergeTree, IMergeTreeOptions, IMergeTreeOptionsInternal, } from "../mergeTree.js";
|
|
10
10
|
export { MergeTreeTextHelper } from "../MergeTreeTextHelper.js";
|
|
11
11
|
export { SnapshotLegacy } from "../snapshotlegacy.js";
|
|
12
|
-
export { addProperties, appendToMergeTreeDeltaRevertibles, BaseSegment, Client, CollaborationWindow, compareReferencePositions, ConflictAction, createAnnotateRangeOp, createDetachedLocalReferencePosition, createGroupOp, createInsertOp, createInsertSegmentOp, createMap, createRemoveRangeOp, DetachedReferencePosition, discardMergeTreeDeltaRevertible, IJSONMarkerSegment, IJSONSegment, IMarkerDef, IMergeTreeAnnotateMsg,
|
|
12
|
+
export { addProperties, appendToMergeTreeDeltaRevertibles, BaseSegment, Client, CollaborationWindow, compareReferencePositions, ConflictAction, createAnnotateRangeOp, createDetachedLocalReferencePosition, createGroupOp, createInsertOp, createInsertSegmentOp, createMap, createRemoveRangeOp, DetachedReferencePosition, discardMergeTreeDeltaRevertible, IJSONMarkerSegment, IJSONSegment, IMarkerDef, IMergeTreeAnnotateMsg, IMergeTreeDelta, IMergeTreeDeltaCallbackArgs, IMergeTreeDeltaOp, IMergeTreeDeltaOpArgs, IMergeTreeGroupMsg, IMergeTreeInsertMsg, IMergeTreeMaintenanceCallbackArgs, IMergeTreeOp, IMergeTreeRemoveMsg, IMergeTreeSegmentDelta, IMergeTreeTextHelper, IRBAugmentation, IRBMatcher, IRelativePosition, ISegment, ISegmentAction, KeyComparer, LocalReferenceCollection, LocalReferencePosition, MapLike, Marker, matchProperties, maxReferencePosition, MergeTreeDeltaOperationType, MergeTreeDeltaOperationTypes, MergeTreeDeltaRevertible, MergeTreeDeltaType, MergeTreeMaintenanceType, MergeTreeRevertibleDriver, minReferencePosition, PropertiesManager, Property, PropertyAction, PropertySet, RBNode, RBNodeActions, RedBlackTree, ReferencePosition, ReferenceType, refGetTileLabels, refHasTileLabel, refHasTileLabels, refTypeIncludesFlag, reservedMarkerIdKey, reservedMarkerSimpleTypeKey, reservedTileLabelsKey, revertMergeTreeDeltaRevertibles, SortedSegmentSet, SortedSegmentSetItem, SortedSet, TextSegment, Trackable, TrackingGroup, TrackingGroupCollection, UnassignedSequenceNumber, UniversalSequenceNumber, } from "../index.js";
|
|
13
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/test/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,aAAa,EACb,UAAU,EACV,0BAA0B,GAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACN,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,aAAa,EACb,UAAU,EACV,0BAA0B,GAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,aAAa,EACb,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,mCAAmC,EACnC,YAAY,EACZ,+BAA+B,EAC/B,cAAc,EACd,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,2BAA2B,EAC3B,aAAa,GACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,yBAAyB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,aAAa,EACb,iCAAiC,EACjC,WAAW,EACX,MAAM,EACN,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACrB,oCAAoC,EACpC,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,SAAS,EACT,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,eAAe,EACf,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,iCAAiC,EACjC,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,cAAc,EACd,WAAW,EACX,wBAAwB,EACxB,sBAAsB,EACtB,OAAO,EACP,MAAM,EACN,eAAe,EACf,oBAAoB,EACpB,2BAA2B,EAC3B,4BAA4B,EAC5B,wBAAwB,EACxB,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,QAAQ,EACR,cAAc,EACd,WAAW,EACX,MAAM,EACN,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,EACrB,+BAA+B,EAC/B,gBAAgB,EAChB,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,GACvB,MAAM,aAAa,CAAC"}
|
package/dist/test/index.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.minReferencePosition = exports.MergeTreeMaintenanceType = exports.MergeTreeDeltaType = exports.maxReferencePosition = exports.matchProperties = exports.Marker = exports.LocalReferenceCollection = exports.discardMergeTreeDeltaRevertible = exports.DetachedReferencePosition = exports.createRemoveRangeOp = exports.createMap = exports.createInsertSegmentOp = exports.createInsertOp = exports.createGroupOp = exports.createDetachedLocalReferencePosition = exports.createAnnotateRangeOp = exports.compareReferencePositions = exports.CollaborationWindow = exports.Client = exports.BaseSegment = exports.appendToMergeTreeDeltaRevertibles = exports.addProperties = exports.SnapshotLegacy = exports.MergeTreeTextHelper = exports.MergeTree = exports.runMergeTreeOperationRunner = exports.replayResultsPath = exports.removeRange = exports.insertAtRefPos = exports.generateOperationMessagesForClients = exports.generateClientNames = exports.doOverRange = exports.applyMessages = exports.annotateRange = exports.useStrictPartialLengthChecks = exports.validatePartialLengths = exports.nodeOrdinalsHaveIntegrity = exports.
|
|
8
|
-
exports.UniversalSequenceNumber = exports.UnassignedSequenceNumber = exports.TrackingGroupCollection = exports.TrackingGroup = exports.TextSegment = exports.SortedSet = exports.SortedSegmentSet = exports.revertMergeTreeDeltaRevertibles = exports.reservedTileLabelsKey = exports.reservedMarkerSimpleTypeKey = exports.reservedMarkerIdKey = exports.refTypeIncludesFlag = exports.refHasTileLabels = exports.refHasTileLabel =
|
|
7
|
+
exports.refGetTileLabels = exports.ReferenceType = exports.RedBlackTree = exports.PropertiesManager = exports.minReferencePosition = exports.MergeTreeMaintenanceType = exports.MergeTreeDeltaType = exports.maxReferencePosition = exports.matchProperties = exports.Marker = exports.LocalReferenceCollection = exports.discardMergeTreeDeltaRevertible = exports.DetachedReferencePosition = exports.createRemoveRangeOp = exports.createMap = exports.createInsertSegmentOp = exports.createInsertOp = exports.createGroupOp = exports.createDetachedLocalReferencePosition = exports.createAnnotateRangeOp = exports.compareReferencePositions = exports.CollaborationWindow = exports.Client = exports.BaseSegment = exports.appendToMergeTreeDeltaRevertibles = exports.addProperties = exports.SnapshotLegacy = exports.MergeTreeTextHelper = exports.MergeTree = exports.runMergeTreeOperationRunner = exports.replayResultsPath = exports.removeRange = exports.insertAtRefPos = exports.generateOperationMessagesForClients = exports.generateClientNames = exports.doOverRange = exports.applyMessages = exports.annotateRange = exports.useStrictPartialLengthChecks = exports.validatePartialLengths = exports.nodeOrdinalsHaveIntegrity = exports.loadTextFromFileWithMarkers = exports.loadTextFromFile = exports.countOperations = exports.TestServer = exports.checkTextMatchRelative = exports.TestClient = exports.specToSegment = exports.getStats = exports.createRevertDriver = void 0;
|
|
8
|
+
exports.UniversalSequenceNumber = exports.UnassignedSequenceNumber = exports.TrackingGroupCollection = exports.TrackingGroup = exports.TextSegment = exports.SortedSet = exports.SortedSegmentSet = exports.revertMergeTreeDeltaRevertibles = exports.reservedTileLabelsKey = exports.reservedMarkerSimpleTypeKey = exports.reservedMarkerIdKey = exports.refTypeIncludesFlag = exports.refHasTileLabels = exports.refHasTileLabel = void 0;
|
|
9
9
|
var testClient_js_1 = require("./testClient.js");
|
|
10
10
|
Object.defineProperty(exports, "createRevertDriver", { enumerable: true, get: function () { return testClient_js_1.createRevertDriver; } });
|
|
11
11
|
Object.defineProperty(exports, "getStats", { enumerable: true, get: function () { return testClient_js_1.getStats; } });
|
|
@@ -16,12 +16,8 @@ Object.defineProperty(exports, "checkTextMatchRelative", { enumerable: true, get
|
|
|
16
16
|
Object.defineProperty(exports, "TestServer", { enumerable: true, get: function () { return testServer_js_1.TestServer; } });
|
|
17
17
|
var testUtils_js_1 = require("./testUtils.js");
|
|
18
18
|
Object.defineProperty(exports, "countOperations", { enumerable: true, get: function () { return testUtils_js_1.countOperations; } });
|
|
19
|
-
Object.defineProperty(exports, "insertMarker", { enumerable: true, get: function () { return testUtils_js_1.insertMarker; } });
|
|
20
|
-
Object.defineProperty(exports, "insertSegments", { enumerable: true, get: function () { return testUtils_js_1.insertSegments; } });
|
|
21
|
-
Object.defineProperty(exports, "insertText", { enumerable: true, get: function () { return testUtils_js_1.insertText; } });
|
|
22
19
|
Object.defineProperty(exports, "loadTextFromFile", { enumerable: true, get: function () { return testUtils_js_1.loadTextFromFile; } });
|
|
23
20
|
Object.defineProperty(exports, "loadTextFromFileWithMarkers", { enumerable: true, get: function () { return testUtils_js_1.loadTextFromFileWithMarkers; } });
|
|
24
|
-
Object.defineProperty(exports, "markRangeRemoved", { enumerable: true, get: function () { return testUtils_js_1.markRangeRemoved; } });
|
|
25
21
|
Object.defineProperty(exports, "nodeOrdinalsHaveIntegrity", { enumerable: true, get: function () { return testUtils_js_1.nodeOrdinalsHaveIntegrity; } });
|
|
26
22
|
Object.defineProperty(exports, "validatePartialLengths", { enumerable: true, get: function () { return testUtils_js_1.validatePartialLengths; } });
|
|
27
23
|
Object.defineProperty(exports, "useStrictPartialLengthChecks", { enumerable: true, get: function () { return testUtils_js_1.useStrictPartialLengthChecks; } });
|
package/dist/test/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;AAEH,iDAOyB;AANxB,mHAAA,kBAAkB,OAAA;AAClB,yGAAA,QAAQ,OAAA;AAER,8GAAA,aAAa,OAAA;AACb,2GAAA,UAAU,OAAA;AAGX,iDAAqE;AAA5D,uHAAA,sBAAsB,OAAA;AAAE,2GAAA,UAAU,OAAA;AAC3C,+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;AAEH,iDAOyB;AANxB,mHAAA,kBAAkB,OAAA;AAClB,yGAAA,QAAQ,OAAA;AAER,8GAAA,aAAa,OAAA;AACb,2GAAA,UAAU,OAAA;AAGX,iDAAqE;AAA5D,uHAAA,sBAAsB,OAAA;AAAE,2GAAA,UAAU,OAAA;AAC3C,+CAOwB;AANvB,+GAAA,eAAe,OAAA;AACf,gHAAA,gBAAgB,OAAA;AAChB,2HAAA,2BAA2B,OAAA;AAC3B,yHAAA,yBAAyB,OAAA;AACzB,sHAAA,sBAAsB,OAAA;AACtB,4HAAA,4BAA4B,OAAA;AAE7B,6EAcuC;AAbtC,4HAAA,aAAa,OAAA;AACb,4HAAA,aAAa,OAAA;AACb,0HAAA,WAAW,OAAA;AACX,kIAAA,mBAAmB,OAAA;AACnB,kJAAA,mCAAmC,OAAA;AAGnC,6HAAA,cAAc,OAAA;AACd,0HAAA,WAAW,OAAA;AAEX,gIAAA,iBAAiB,OAAA;AACjB,0IAAA,2BAA2B,OAAA;AAG5B,gDAKyB;AAHxB,yGAAA,SAAS,OAAA;AAIV,oEAAgE;AAAvD,6HAAA,mBAAmB,OAAA;AAC5B,0DAAsD;AAA7C,mHAAA,cAAc,OAAA;AACvB,wCA6EqB;AA5EpB,yGAAA,aAAa,OAAA;AACb,6HAAA,iCAAiC,OAAA;AACjC,uGAAA,WAAW,OAAA;AACX,kGAAA,MAAM,OAAA;AACN,+GAAA,mBAAmB,OAAA;AACnB,qHAAA,yBAAyB,OAAA;AAEzB,iHAAA,qBAAqB,OAAA;AACrB,gIAAA,oCAAoC,OAAA;AACpC,yGAAA,aAAa,OAAA;AACb,0GAAA,cAAc,OAAA;AACd,iHAAA,qBAAqB,OAAA;AACrB,qGAAA,SAAS,OAAA;AACT,+GAAA,mBAAmB,OAAA;AACnB,qHAAA,yBAAyB,OAAA;AACzB,2HAAA,+BAA+B,OAAA;AAsB/B,oHAAA,wBAAwB,OAAA;AAGxB,kGAAA,MAAM,OAAA;AACN,2GAAA,eAAe,OAAA;AACf,gHAAA,oBAAoB,OAAA;AAIpB,8GAAA,kBAAkB,OAAA;AAClB,oHAAA,wBAAwB,OAAA;AAExB,gHAAA,oBAAoB,OAAA;AACpB,6GAAA,iBAAiB,OAAA;AAMjB,wGAAA,YAAY,OAAA;AAEZ,yGAAA,aAAa,OAAA;AACb,4GAAA,gBAAgB,OAAA;AAChB,2GAAA,eAAe,OAAA;AACf,4GAAA,gBAAgB,OAAA;AAChB,+GAAA,mBAAmB,OAAA;AACnB,+GAAA,mBAAmB,OAAA;AACnB,uHAAA,2BAA2B,OAAA;AAC3B,iHAAA,qBAAqB,OAAA;AACrB,2HAAA,+BAA+B,OAAA;AAC/B,4GAAA,gBAAgB,OAAA;AAEhB,qGAAA,SAAS,OAAA;AACT,uGAAA,WAAW,OAAA;AAEX,yGAAA,aAAa,OAAA;AACb,mHAAA,uBAAuB,OAAA;AACvB,oHAAA,wBAAwB,OAAA;AACxB,mHAAA,uBAAuB,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\tcreateRevertDriver,\n\tgetStats,\n\tMergeTreeStats,\n\tspecToSegment,\n\tTestClient,\n\tTestClientRevertibleDriver,\n} from \"./testClient.js\";\nexport { checkTextMatchRelative, TestServer } from \"./testServer.js\";\nexport {\n\tcountOperations,\n\tloadTextFromFile,\n\tloadTextFromFileWithMarkers,\n\tnodeOrdinalsHaveIntegrity,\n\tvalidatePartialLengths,\n\tuseStrictPartialLengthChecks,\n} from \"./testUtils.js\";\nexport {\n\tannotateRange,\n\tapplyMessages,\n\tdoOverRange,\n\tgenerateClientNames,\n\tgenerateOperationMessagesForClients,\n\tIConfigRange,\n\tIMergeTreeOperationRunnerConfig,\n\tinsertAtRefPos,\n\tremoveRange,\n\tReplayGroup,\n\treplayResultsPath,\n\trunMergeTreeOperationRunner,\n\tTestOperation,\n} from \"./mergeTreeOperationRunner.js\";\nexport {\n\tLRUSegment,\n\tMergeTree,\n\tIMergeTreeOptions,\n\tIMergeTreeOptionsInternal,\n} from \"../mergeTree.js\";\nexport { MergeTreeTextHelper } from \"../MergeTreeTextHelper.js\";\nexport { SnapshotLegacy } from \"../snapshotlegacy.js\";\nexport {\n\taddProperties,\n\tappendToMergeTreeDeltaRevertibles,\n\tBaseSegment,\n\tClient,\n\tCollaborationWindow,\n\tcompareReferencePositions,\n\tConflictAction,\n\tcreateAnnotateRangeOp,\n\tcreateDetachedLocalReferencePosition,\n\tcreateGroupOp,\n\tcreateInsertOp,\n\tcreateInsertSegmentOp,\n\tcreateMap,\n\tcreateRemoveRangeOp,\n\tDetachedReferencePosition,\n\tdiscardMergeTreeDeltaRevertible,\n\tIJSONMarkerSegment,\n\tIJSONSegment,\n\tIMarkerDef,\n\tIMergeTreeAnnotateMsg,\n\tIMergeTreeDelta,\n\tIMergeTreeDeltaCallbackArgs,\n\tIMergeTreeDeltaOp,\n\tIMergeTreeDeltaOpArgs,\n\tIMergeTreeGroupMsg,\n\tIMergeTreeInsertMsg,\n\tIMergeTreeMaintenanceCallbackArgs,\n\tIMergeTreeOp,\n\tIMergeTreeRemoveMsg,\n\tIMergeTreeSegmentDelta,\n\tIMergeTreeTextHelper,\n\tIRBAugmentation,\n\tIRBMatcher,\n\tIRelativePosition,\n\tISegment,\n\tISegmentAction,\n\tKeyComparer,\n\tLocalReferenceCollection,\n\tLocalReferencePosition,\n\tMapLike,\n\tMarker,\n\tmatchProperties,\n\tmaxReferencePosition,\n\tMergeTreeDeltaOperationType,\n\tMergeTreeDeltaOperationTypes,\n\tMergeTreeDeltaRevertible,\n\tMergeTreeDeltaType,\n\tMergeTreeMaintenanceType,\n\tMergeTreeRevertibleDriver,\n\tminReferencePosition,\n\tPropertiesManager,\n\tProperty,\n\tPropertyAction,\n\tPropertySet,\n\tRBNode,\n\tRBNodeActions,\n\tRedBlackTree,\n\tReferencePosition,\n\tReferenceType,\n\trefGetTileLabels,\n\trefHasTileLabel,\n\trefHasTileLabels,\n\trefTypeIncludesFlag,\n\treservedMarkerIdKey,\n\treservedMarkerSimpleTypeKey,\n\treservedTileLabelsKey,\n\trevertMergeTreeDeltaRevertibles,\n\tSortedSegmentSet,\n\tSortedSegmentSetItem,\n\tSortedSet,\n\tTextSegment,\n\tTrackable,\n\tTrackingGroup,\n\tTrackingGroupCollection,\n\tUnassignedSequenceNumber,\n\tUniversalSequenceNumber,\n} from \"../index.js\";\n"]}
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
const node_assert_1 = require("node:assert");
|
|
8
|
-
const constants_js_1 = require("../constants.js");
|
|
9
8
|
const mergeTree_js_1 = require("../mergeTree.js");
|
|
10
9
|
const mergeTreeDeltaCallback_js_1 = require("../mergeTreeDeltaCallback.js");
|
|
11
10
|
const ops_js_1 = require("../ops.js");
|
|
@@ -17,15 +16,7 @@ describe("MergeTree", () => {
|
|
|
17
16
|
let currentSequenceNumber;
|
|
18
17
|
beforeEach(() => {
|
|
19
18
|
mergeTree = new mergeTree_js_1.MergeTree();
|
|
20
|
-
(0,
|
|
21
|
-
mergeTree,
|
|
22
|
-
pos: 0,
|
|
23
|
-
segments: [textSegment_js_1.TextSegment.make("hello world")],
|
|
24
|
-
refSeq: constants_js_1.UniversalSequenceNumber,
|
|
25
|
-
clientId: constants_js_1.LocalClientId,
|
|
26
|
-
seq: constants_js_1.UniversalSequenceNumber,
|
|
27
|
-
opArgs: undefined,
|
|
28
|
-
});
|
|
19
|
+
mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("hello world")], mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
29
20
|
currentSequenceNumber = 0;
|
|
30
21
|
mergeTree.startCollaboration(localClientId,
|
|
31
22
|
/* minSeq: */ currentSequenceNumber,
|
|
@@ -36,7 +27,7 @@ describe("MergeTree", () => {
|
|
|
36
27
|
const count = (0, testUtils_js_1.countOperations)(mergeTree);
|
|
37
28
|
mergeTree.annotateRange(4, 6, {
|
|
38
29
|
props: { foo: "bar" },
|
|
39
|
-
},
|
|
30
|
+
}, mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
40
31
|
node_assert_1.strict.deepStrictEqual(count, {
|
|
41
32
|
[ops_js_1.MergeTreeDeltaType.ANNOTATE]: 1,
|
|
42
33
|
[mergeTreeDeltaCallback_js_1.MergeTreeMaintenanceType.SPLIT]: 2,
|
|
@@ -46,92 +37,56 @@ describe("MergeTree", () => {
|
|
|
46
37
|
const count = (0, testUtils_js_1.countOperations)(mergeTree);
|
|
47
38
|
mergeTree.annotateRange(3, 3, {
|
|
48
39
|
props: { foo: "bar" },
|
|
49
|
-
},
|
|
40
|
+
}, mergeTree.localPerspective, { seq: ++currentSequenceNumber, clientId: localClientId }, undefined);
|
|
50
41
|
node_assert_1.strict.deepStrictEqual(count, {
|
|
51
42
|
[mergeTreeDeltaCallback_js_1.MergeTreeMaintenanceType.SPLIT]: 1,
|
|
52
43
|
});
|
|
53
44
|
});
|
|
54
45
|
it("Annotate over local insertion", () => {
|
|
55
|
-
(
|
|
56
|
-
mergeTree,
|
|
57
|
-
pos: 4,
|
|
58
|
-
refSeq: currentSequenceNumber,
|
|
59
|
-
clientId: localClientId,
|
|
60
|
-
seq: constants_js_1.UnassignedSequenceNumber,
|
|
61
|
-
text: "a",
|
|
62
|
-
props: undefined,
|
|
63
|
-
opArgs: undefined,
|
|
64
|
-
});
|
|
46
|
+
mergeTree.insertSegments(4, [textSegment_js_1.TextSegment.make("a")], mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
65
47
|
const count = (0, testUtils_js_1.countOperations)(mergeTree);
|
|
66
48
|
mergeTree.annotateRange(3, 8, {
|
|
67
49
|
props: { foo: "bar" },
|
|
68
|
-
},
|
|
50
|
+
}, mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
69
51
|
node_assert_1.strict.deepStrictEqual(count, {
|
|
70
52
|
[ops_js_1.MergeTreeDeltaType.ANNOTATE]: 1,
|
|
71
53
|
[mergeTreeDeltaCallback_js_1.MergeTreeMaintenanceType.SPLIT]: 2,
|
|
72
54
|
});
|
|
73
55
|
});
|
|
74
56
|
it("Annotate over remote insertion", () => {
|
|
75
|
-
const
|
|
57
|
+
const remoteClient = (0, testUtils_js_1.makeRemoteClient)({ clientId: 35 });
|
|
76
58
|
let remoteSequenceNumber = currentSequenceNumber;
|
|
77
|
-
(
|
|
78
|
-
mergeTree,
|
|
79
|
-
pos: 4,
|
|
80
|
-
refSeq: remoteSequenceNumber,
|
|
81
|
-
clientId: remoteClientId,
|
|
82
|
-
seq: ++remoteSequenceNumber,
|
|
83
|
-
text: "a",
|
|
84
|
-
props: undefined,
|
|
85
|
-
opArgs: undefined,
|
|
86
|
-
});
|
|
59
|
+
mergeTree.insertSegments(4, [textSegment_js_1.TextSegment.make("a")], remoteClient.perspectiveAt({ refSeq: remoteSequenceNumber }), remoteClient.stampAt({ seq: ++remoteSequenceNumber }), undefined);
|
|
87
60
|
const count = (0, testUtils_js_1.countOperations)(mergeTree);
|
|
88
61
|
mergeTree.annotateRange(3, 8, {
|
|
89
62
|
props: { foo: "bar" },
|
|
90
|
-
},
|
|
63
|
+
}, mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
91
64
|
node_assert_1.strict.deepStrictEqual(count, {
|
|
92
65
|
[ops_js_1.MergeTreeDeltaType.ANNOTATE]: 1,
|
|
93
66
|
[mergeTreeDeltaCallback_js_1.MergeTreeMaintenanceType.SPLIT]: 2,
|
|
94
67
|
});
|
|
95
68
|
});
|
|
96
69
|
it("Annotate over remote deletion", () => {
|
|
97
|
-
const
|
|
70
|
+
const remoteClient = (0, testUtils_js_1.makeRemoteClient)({ clientId: 35 });
|
|
98
71
|
let remoteSequenceNumber = currentSequenceNumber;
|
|
99
|
-
(
|
|
100
|
-
mergeTree,
|
|
101
|
-
start: 4,
|
|
102
|
-
end: 6,
|
|
103
|
-
refSeq: remoteSequenceNumber,
|
|
104
|
-
clientId: remoteClientId,
|
|
105
|
-
seq: ++remoteSequenceNumber,
|
|
106
|
-
overwrite: false,
|
|
107
|
-
opArgs: undefined,
|
|
108
|
-
});
|
|
72
|
+
mergeTree.markRangeRemoved(4, 6, remoteClient.perspectiveAt({ refSeq: remoteSequenceNumber }), remoteClient.stampAt({ seq: ++remoteSequenceNumber }), undefined);
|
|
109
73
|
const count = (0, testUtils_js_1.countOperations)(mergeTree);
|
|
110
74
|
mergeTree.annotateRange(3, 8, {
|
|
111
75
|
props: { foo: "bar" },
|
|
112
|
-
},
|
|
76
|
+
}, mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
113
77
|
node_assert_1.strict.deepStrictEqual(count, {
|
|
114
78
|
[ops_js_1.MergeTreeDeltaType.ANNOTATE]: 1,
|
|
115
79
|
[mergeTreeDeltaCallback_js_1.MergeTreeMaintenanceType.SPLIT]: 2,
|
|
116
80
|
});
|
|
117
81
|
});
|
|
118
82
|
it("Remote annotate within local deletion", () => {
|
|
119
|
-
const
|
|
83
|
+
const remoteClient = (0, testUtils_js_1.makeRemoteClient)({ clientId: 35 });
|
|
120
84
|
let remoteSequenceNumber = currentSequenceNumber;
|
|
121
|
-
(
|
|
122
|
-
mergeTree,
|
|
123
|
-
start: 3,
|
|
124
|
-
end: 8,
|
|
125
|
-
refSeq: currentSequenceNumber,
|
|
126
|
-
clientId: localClientId,
|
|
127
|
-
seq: constants_js_1.UnassignedSequenceNumber,
|
|
128
|
-
overwrite: false,
|
|
129
|
-
opArgs: undefined,
|
|
130
|
-
});
|
|
85
|
+
mergeTree.markRangeRemoved(3, 8, mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
131
86
|
const count = (0, testUtils_js_1.countOperations)(mergeTree);
|
|
132
87
|
mergeTree.annotateRange(4, 6, {
|
|
133
88
|
props: { foo: "bar" },
|
|
134
|
-
}, remoteSequenceNumber
|
|
89
|
+
}, remoteClient.perspectiveAt({ refSeq: remoteSequenceNumber }), remoteClient.stampAt({ seq: ++remoteSequenceNumber }), undefined);
|
|
135
90
|
node_assert_1.strict.deepStrictEqual(count, {
|
|
136
91
|
[mergeTreeDeltaCallback_js_1.MergeTreeMaintenanceType.SPLIT]: 2,
|
|
137
92
|
});
|