@fluid-experimental/tree 0.59.4001 → 1.1.0-75972

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.
Files changed (77) hide show
  1. package/dist/EditLog.d.ts.map +1 -1
  2. package/dist/EditLog.js +4 -7
  3. package/dist/EditLog.js.map +1 -1
  4. package/dist/LogViewer.d.ts.map +1 -1
  5. package/dist/LogViewer.js +1 -7
  6. package/dist/LogViewer.js.map +1 -1
  7. package/dist/SharedTree.d.ts +89 -30
  8. package/dist/SharedTree.d.ts.map +1 -1
  9. package/dist/SharedTree.js +97 -62
  10. package/dist/SharedTree.js.map +1 -1
  11. package/dist/SharedTreeEncoder.d.ts +1 -1
  12. package/dist/SharedTreeEncoder.d.ts.map +1 -1
  13. package/dist/SharedTreeEncoder.js +6 -12
  14. package/dist/SharedTreeEncoder.js.map +1 -1
  15. package/dist/TransactionInternal.d.ts.map +1 -1
  16. package/dist/TransactionInternal.js +4 -7
  17. package/dist/TransactionInternal.js.map +1 -1
  18. package/dist/id-compressor/IdCompressor.d.ts +3 -1
  19. package/dist/id-compressor/IdCompressor.d.ts.map +1 -1
  20. package/dist/id-compressor/IdCompressor.js +45 -17
  21. package/dist/id-compressor/IdCompressor.js.map +1 -1
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js.map +1 -1
  25. package/lib/EditLog.d.ts.map +1 -1
  26. package/lib/EditLog.js +4 -7
  27. package/lib/EditLog.js.map +1 -1
  28. package/lib/LogViewer.d.ts.map +1 -1
  29. package/lib/LogViewer.js +1 -7
  30. package/lib/LogViewer.js.map +1 -1
  31. package/lib/SharedTree.d.ts +89 -30
  32. package/lib/SharedTree.d.ts.map +1 -1
  33. package/lib/SharedTree.js +98 -63
  34. package/lib/SharedTree.js.map +1 -1
  35. package/lib/SharedTreeEncoder.d.ts +1 -1
  36. package/lib/SharedTreeEncoder.d.ts.map +1 -1
  37. package/lib/SharedTreeEncoder.js +6 -12
  38. package/lib/SharedTreeEncoder.js.map +1 -1
  39. package/lib/TransactionInternal.d.ts.map +1 -1
  40. package/lib/TransactionInternal.js +4 -7
  41. package/lib/TransactionInternal.js.map +1 -1
  42. package/lib/id-compressor/IdCompressor.d.ts +3 -1
  43. package/lib/id-compressor/IdCompressor.d.ts.map +1 -1
  44. package/lib/id-compressor/IdCompressor.js +45 -17
  45. package/lib/id-compressor/IdCompressor.js.map +1 -1
  46. package/lib/index.d.ts +1 -1
  47. package/lib/index.d.ts.map +1 -1
  48. package/lib/index.js.map +1 -1
  49. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js +1 -1
  50. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js.map +1 -1
  51. package/lib/test/SessionIdNormalizer.tests.js +4 -6
  52. package/lib/test/SessionIdNormalizer.tests.js.map +1 -1
  53. package/lib/test/Summary.tests.js +3 -6
  54. package/lib/test/Summary.tests.js.map +1 -1
  55. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +1 -1
  56. package/lib/test/fuzz/SharedTreeFuzzTests.js +3 -1
  57. package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -1
  58. package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
  59. package/lib/test/utilities/SharedTreeTests.js +59 -60
  60. package/lib/test/utilities/SharedTreeTests.js.map +1 -1
  61. package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -1
  62. package/lib/test/utilities/SharedTreeVersioningTests.js +19 -19
  63. package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -1
  64. package/lib/test/utilities/TestNode.d.ts.map +1 -1
  65. package/lib/test/utilities/TestNode.js +2 -12
  66. package/lib/test/utilities/TestNode.js.map +1 -1
  67. package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
  68. package/lib/test/utilities/TestUtilities.js +11 -11
  69. package/lib/test/utilities/TestUtilities.js.map +1 -1
  70. package/package.json +19 -32
  71. package/src/EditLog.ts +21 -23
  72. package/src/LogViewer.ts +1 -6
  73. package/src/SharedTree.ts +200 -50
  74. package/src/SharedTreeEncoder.ts +7 -18
  75. package/src/TransactionInternal.ts +11 -13
  76. package/src/id-compressor/IdCompressor.ts +46 -15
  77. package/src/index.ts +4 -0
@@ -1 +1 @@
1
- {"version":3,"file":"SharedTreeVersioningTests.d.ts","sourceRoot":"","sources":["../../../src/test/utilities/SharedTreeVersioningTests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,OAAO,EAIN,2BAA2B,EAC3B,wBAAwB,EAIxB,MAAM,iBAAiB,CAAC;AAOzB;;;GAGG;AACH,wBAAgB,4BAA4B,CAC3C,KAAK,EAAE,MAAM,EACb,mBAAmB,EAAE,CAAC,OAAO,CAAC,EAAE,wBAAwB,KAAK,2BAA2B,QAufxF"}
1
+ {"version":3,"file":"SharedTreeVersioningTests.d.ts","sourceRoot":"","sources":["../../../src/test/utilities/SharedTreeVersioningTests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,OAAO,EAIN,2BAA2B,EAC3B,wBAAwB,EAIxB,MAAM,iBAAiB,CAAC;AAOzB;;;GAGG;AACH,wBAAgB,4BAA4B,CAC3C,KAAK,EAAE,MAAM,EACb,mBAAmB,EAAE,CAAC,OAAO,CAAC,EAAE,wBAAwB,KAAK,2BAA2B,QA0fxF"}
@@ -9,6 +9,7 @@ import { areRevisionViewsSemanticallyEqual } from '../../EditUtilities';
9
9
  import { SharedTreeDiagnosticEvent } from '../../EventTypes';
10
10
  import { SharedTreeOpType, WriteFormat } from '../../persisted-types';
11
11
  import { TreeNodeHandle } from '../../TreeNodeHandle';
12
+ import { nilUuid } from '../../UuidUtilities';
12
13
  import { applyTestEdits } from '../Summary.tests';
13
14
  import { buildLeaf } from './TestNode';
14
15
  import { applyNoop, setUpLocalServerTestSharedTree, setUpTestTree, spyOnSubmittedOps, testTrait, waitForSummary, } from './TestUtilities';
@@ -320,25 +321,24 @@ export function runSharedTreeVersioningTests(title, setUpTestSharedTree) {
320
321
  await testObjectProvider.ensureSynchronized();
321
322
  expect(areRevisionViewsSemanticallyEqual(tree1.currentView, tree1, tree2.currentView, tree2)).to.be.true;
322
323
  }).timeout(10000);
323
- // TODO:#461: Reenable
324
- it.skip('attributes all pre-upgrade IDs to the nil UUID after upgrading from 0.0.2', async () => {
325
- // const { testObjectProvider, tree: tree } = await setUpLocalServerTestSharedTree({
326
- // writeFormat: WriteFormat.v0_0_2,
327
- // });
328
- // const attributionId = tree.attributionId;
329
- // expect(attributionId).to.equal(nilUuid);
330
- // const nodeId = tree.generateNodeId();
331
- // const stableNodeId = tree.convertToStableNodeId(nodeId);
332
- // tree.applyEdit(Change.insertTree(buildLeaf(nodeId), StablePlace.atStartOf(testTrait(tree.currentView))));
333
- // // New tree joins, causes an upgrade
334
- // const { tree: tree2 } = await setUpLocalServerTestSharedTree({
335
- // writeFormat: WriteFormat.v0_1_1,
336
- // testObjectProvider,
337
- // });
338
- // await testObjectProvider.ensureSynchronized();
339
- // expect(tree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);
340
- // expect(tree.attributeNodeId(nodeId)).to.equal(attributionId);
341
- // expect(tree2.attributeNodeId(tree2.convertToNodeId(stableNodeId))).to.equal(attributionId);
324
+ it('attributes all pre-upgrade IDs to the nil UUID after upgrading from 0.0.2', async () => {
325
+ const { testObjectProvider, tree: tree } = await setUpLocalServerTestSharedTree({
326
+ writeFormat: WriteFormat.v0_0_2,
327
+ });
328
+ const attributionId = tree.attributionId;
329
+ expect(attributionId).to.equal(nilUuid);
330
+ const nodeId = tree.generateNodeId();
331
+ const stableNodeId = tree.convertToStableNodeId(nodeId);
332
+ tree.applyEdit(Change.insertTree(buildLeaf(nodeId), StablePlace.atStartOf(testTrait(tree.currentView))));
333
+ // New tree joins, causes an upgrade
334
+ const { tree: tree2 } = await setUpLocalServerTestSharedTree({
335
+ writeFormat: WriteFormat.v0_1_1,
336
+ testObjectProvider,
337
+ });
338
+ await testObjectProvider.ensureSynchronized();
339
+ expect(tree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);
340
+ expect(tree.attributeNodeId(nodeId)).to.equal(attributionId);
341
+ expect(tree2.attributeNodeId(tree2.convertToNodeId(stableNodeId))).to.equal(attributionId);
342
342
  });
343
343
  describe('telemetry', () => {
344
344
  const events = [];
@@ -1 +1 @@
1
- {"version":3,"file":"SharedTreeVersioningTests.js","sourceRoot":"","sources":["../../../src/test/utilities/SharedTreeVersioningTests.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 { ITelemetryBaseEvent } from '@fluidframework/common-definitions';\nimport { LoaderHeader } from '@fluidframework/container-definitions';\nimport { expect } from 'chai';\nimport { StableRange, StablePlace, BuildNode, Change } from '../../ChangeTypes';\nimport { Mutable } from '../../Common';\nimport { EditLog } from '../../EditLog';\nimport { areRevisionViewsSemanticallyEqual } from '../../EditUtilities';\nimport { SharedTreeDiagnosticEvent } from '../../EventTypes';\nimport { NodeId, StableNodeId, TraitLabel } from '../../Identifiers';\nimport { SharedTreeOpType, SharedTreeUpdateOp, TreeNodeSequence, WriteFormat } from '../../persisted-types';\nimport { SharedTree } from '../../SharedTree';\nimport { TreeNodeHandle } from '../../TreeNodeHandle';\nimport { nilUuid } from '../../UuidUtilities';\nimport { applyTestEdits } from '../Summary.tests';\nimport { buildLeaf } from './TestNode';\nimport {\n\tapplyNoop,\n\tsetUpLocalServerTestSharedTree,\n\tsetUpTestTree,\n\tSharedTreeTestingComponents,\n\tSharedTreeTestingOptions,\n\tspyOnSubmittedOps,\n\ttestTrait,\n\twaitForSummary,\n} from './TestUtilities';\n\nfunction spyOnVersionChanges(tree: SharedTree): WriteFormat[] {\n\tconst versions: WriteFormat[] = [];\n\ttree.on(SharedTreeDiagnosticEvent.WriteVersionChanged, (version) => versions.push(version));\n\treturn versions;\n}\n/**\n * Runs a test suite for operations on `SharedTree` that depend on correct versioning.\n * This suite can be used to test other implementations that aim to fulfill `SharedTree`'s contract.\n */\nexport function runSharedTreeVersioningTests(\n\ttitle: string,\n\tsetUpTestSharedTree: (options?: SharedTreeTestingOptions) => SharedTreeTestingComponents\n) {\n\tdescribe(title, () => {\n\t\tconst oldVersion = WriteFormat.v0_0_2;\n\t\tconst newVersion = WriteFormat.v0_1_1;\n\t\tconst treeOptions = { localMode: false, writeFormat: oldVersion };\n\t\tconst secondTreeOptions = {\n\t\t\tid: 'secondTestSharedTree',\n\t\t\tlocalMode: false,\n\t\t\twriteFormat: newVersion,\n\t\t};\n\n\t\tit('only processes edit ops if they have the same version', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\tconst { tree: newerTree } = setUpTestSharedTree({ containerRuntimeFactory, ...secondTreeOptions });\n\n\t\t\texpect(tree.edits.length).to.equal(0);\n\t\t\texpect(newerTree.edits.length).to.equal(0);\n\n\t\t\t// Process an edit\n\t\t\tapplyNoop(tree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t// The newer tree should have ignored the first edit\n\t\t\texpect(tree.edits.length).to.equal(1);\n\t\t\texpect(newerTree.edits.length).to.equal(0);\n\t\t});\n\n\t\tit('resubmits ops concurrent to an update op using the new format', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\tconst { tree: newerTree } = setUpTestSharedTree({\n\t\t\t\t...treeOptions,\n\t\t\t\tcontainerRuntimeFactory,\n\t\t\t\twriteFormat: newVersion,\n\t\t\t});\n\n\t\t\tconst testTree = setUpTestTree(tree);\n\t\t\tconst rootStableId = testTree.stable.identifier;\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst summary = tree.saveSummary();\n\t\t\tconst ops = spyOnSubmittedOps(containerRuntimeFactory);\n\t\t\tnewerTree.loadSummary(summary);\n\t\t\ttree.applyEdit(...Change.move(StableRange.only(testTree.left), StablePlace.after(testTree.right)));\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t// Verify even though one edit was applied, 2 edit ops were sent due to the version upgrade.\n\t\t\texpect(ops.length).to.equal(3);\n\t\t\texpect(ops.map((op) => op.type)).to.eql([\n\t\t\t\tSharedTreeOpType.Update,\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t]);\n\n\t\t\texpect(ops[1].version).to.equal(oldVersion);\n\t\t\texpect(ops[2].version).to.equal(newVersion);\n\n\t\t\t// Verify both trees apply the updated op.\n\t\t\tconst handle = new TreeNodeHandle(tree.currentView, tree.convertToNodeId(rootStableId));\n\t\t\texpect(handle.traits[testTree.left.traitLabel]).to.equal(undefined);\n\t\t\texpect(handle.traits[testTree.right.traitLabel].length).to.equal(2);\n\t\t\tconst handle2 = new TreeNodeHandle(newerTree.currentView, newerTree.convertToNodeId(rootStableId));\n\t\t\texpect(handle2.traits[testTree.left.traitLabel]).to.equal(undefined);\n\t\t\texpect(handle2.traits[testTree.right.traitLabel].length).to.equal(2);\n\t\t});\n\n\t\tit('throws if an edit op with a newer version than the write version is received', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\tconst { tree: newerTree } = setUpTestSharedTree({ containerRuntimeFactory, ...secondTreeOptions });\n\n\t\t\texpect(tree.edits.length).to.equal(0);\n\t\t\texpect(newerTree.edits.length).to.equal(0);\n\n\t\t\t// Process an edit and expect it to throw\n\t\t\tapplyNoop(newerTree);\n\t\t\texpect(() => containerRuntimeFactory.processAllMessages()).to.throw(\n\t\t\t\t'Newer op version received by a client that has yet to be updated.'\n\t\t\t);\n\t\t});\n\n\t\tit('ignores duplicate update ops', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\t// Process an edit\n\t\t\tapplyNoop(tree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst summary = tree.saveSummary();\n\n\t\t\t// Load the summary into multiple newer trees to trigger version update ops\n\t\t\tconst { tree: newerTree, containerRuntimeFactory: newerContainerRuntimeFactory } =\n\t\t\t\tsetUpTestSharedTree(secondTreeOptions);\n\t\t\tconst { tree: newerTree2 } = setUpTestSharedTree({\n\t\t\t\tcontainerRuntimeFactory: newerContainerRuntimeFactory,\n\t\t\t\t...secondTreeOptions,\n\t\t\t});\n\t\t\tconst { tree: newerTree3 } = setUpTestSharedTree({\n\t\t\t\tcontainerRuntimeFactory: newerContainerRuntimeFactory,\n\t\t\t\t...secondTreeOptions,\n\t\t\t});\n\n\t\t\tconst versions = spyOnVersionChanges(newerTree);\n\t\t\tconst versions2 = spyOnVersionChanges(newerTree2);\n\t\t\tconst versions3 = spyOnVersionChanges(newerTree3);\n\n\t\t\tnewerTree.loadSummary(summary);\n\t\t\tnewerTree2.loadSummary(summary);\n\t\t\tnewerTree3.loadSummary(summary);\n\t\t\tnewerContainerRuntimeFactory.processAllMessages();\n\n\t\t\t// Each tree should have processed a version update once\n\t\t\texpect(versions).to.deep.equal([oldVersion, newVersion]);\n\t\t\texpect(versions2).to.deep.equal([oldVersion, newVersion]);\n\t\t\texpect(versions3).to.deep.equal([oldVersion, newVersion]);\n\t\t});\n\n\t\tit('maintains custom EditLog and LogViewer callbacks when updating', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst summary = tree.saveSummary();\n\n\t\t\tlet editAdded = 0;\n\n\t\t\t// Load the summary into multiple newer trees to trigger version update ops\n\t\t\tconst { tree: newerTree, containerRuntimeFactory: newerContainerRuntimeFactory } =\n\t\t\t\tsetUpTestSharedTree(secondTreeOptions);\n\n\t\t\tconst versions = spyOnVersionChanges(newerTree);\n\n\t\t\tnewerTree.loadSummary(summary);\n\t\t\t(newerTree.edits as EditLog).registerEditAddedHandler(() => editAdded++);\n\n\t\t\texpect(versions).to.have.length(1);\n\t\t\texpect(versions[0]).to.equal(oldVersion);\n\n\t\t\t// Update occurs after the handler is added to the old edit log\n\t\t\tnewerContainerRuntimeFactory.processAllMessages();\n\t\t\texpect(newerTree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(versions).to.have.length(2);\n\t\t\texpect(versions[1]).to.equal(newVersion);\n\n\t\t\tconst additionalEdits = 5;\n\t\t\tfor (let i = 0; i < additionalEdits; i++) {\n\t\t\t\tapplyNoop(newerTree);\n\t\t\t}\n\t\t\tnewerContainerRuntimeFactory.processAllMessages();\n\n\t\t\t// The edit added handler should run twice for each additional edit (once when applying locally and once when applying the sequenced edit)\n\t\t\texpect(editAdded).to.equal(additionalEdits * 2);\n\t\t});\n\n\t\tit('begins writing the new version only after updating', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\t// Process an edit\n\t\t\tapplyNoop(tree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst summary = tree.saveSummary();\n\n\t\t\t// Load the summary into a newer tree to trigger a version update op\n\t\t\tconst { tree: newerTree, containerRuntimeFactory: newerContainerRuntimeFactory } =\n\t\t\t\tsetUpTestSharedTree(secondTreeOptions);\n\n\t\t\tconst ops = spyOnSubmittedOps(newerContainerRuntimeFactory);\n\n\t\t\tnewerTree.loadSummary(summary);\n\t\t\tapplyNoop(newerTree);\n\t\t\tnewerContainerRuntimeFactory.processAllMessages();\n\t\t\texpect(newerTree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\tapplyNoop(newerTree);\n\n\t\t\texpect(ops.length).to.equal(4);\n\t\t\texpect(ops.map((op) => op.type)).to.eql([\n\t\t\t\tSharedTreeOpType.Update,\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t]);\n\t\t\t// Because the first op was submitted before the Update message was sequenced, it should use\n\t\t\t// the same write format as the loaded summary.\n\t\t\texpect(ops[1].version).to.equal(oldVersion);\n\t\t\texpect(ops[2].version).to.equal(newVersion);\n\t\t\texpect(ops[3].version).to.equal(newVersion);\n\t\t});\n\n\t\tit('Existing client can update to a write version higher than the initialized write version', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\tconst versions = spyOnVersionChanges(tree);\n\t\t\tconst ops = spyOnSubmittedOps(containerRuntimeFactory);\n\n\t\t\t// Process an edit\n\t\t\tapplyNoop(tree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst summary = tree.saveSummary();\n\n\t\t\t// Load the summary into a newer tree to trigger a version update op\n\t\t\tconst { tree: newerTree } = setUpTestSharedTree({ containerRuntimeFactory, ...secondTreeOptions });\n\t\t\tnewerTree.loadSummary(summary);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\texpect(tree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(newerTree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\n\t\t\t// Apply another arbitrary edit to the initial tree, which should now be using the new write version.\n\t\t\tapplyNoop(tree);\n\n\t\t\texpect(versions).to.eql([newVersion]);\n\t\t\texpect(ops.length).to.equal(3);\n\t\t\texpect(ops.map((op) => op.type)).to.eql([\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t\tSharedTreeOpType.Update,\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t]);\n\n\t\t\texpect(ops[0].version).to.equal(oldVersion);\n\t\t\texpect(ops[2].version).to.equal(newVersion);\n\t\t});\n\n\t\tit('New client can update to a write version higher than the initialized version on summary load', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree({\n\t\t\t\t...treeOptions,\n\t\t\t\twriteFormat: newVersion,\n\t\t\t});\n\t\t\tconst ops = spyOnSubmittedOps(containerRuntimeFactory);\n\n\t\t\tapplyNoop(tree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst summary = tree.saveSummary();\n\n\t\t\t// Load the summary into a tree with older write version; it should recognize the document is already using\n\t\t\t// the new write version and use that instead.\n\t\t\tconst { tree: olderTree } = setUpTestSharedTree({\n\t\t\t\t...treeOptions,\n\t\t\t\tcontainerRuntimeFactory,\n\t\t\t\twriteFormat: oldVersion,\n\t\t\t});\n\n\t\t\tolderTree.loadSummary(summary);\n\t\t\tapplyNoop(olderTree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\texpect(ops.length).to.equal(2);\n\t\t\texpect(ops.map((op) => op.type)).to.eql([SharedTreeOpType.Edit, SharedTreeOpType.Edit]);\n\t\t\texpect(ops.map((op) => op.version)).to.eql([newVersion, newVersion]);\n\t\t});\n\n\t\tit('can load a 0.1.1 summary and access the current view', () => {\n\t\t\t// This is a regression test for the logic initializing SharedTree's EditLog from a summary.\n\t\t\t// The 0.1.1 format omits `currentTree`, but EditLog should still tolerate synchronous access\n\t\t\t// of the first edit in the session (which is a single insert containing that tree).\n\t\t\tconst options: SharedTreeTestingOptions = {\n\t\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t\t\tsummarizeHistory: false,\n\t\t\t\tlocalMode: false,\n\t\t\t};\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(options);\n\t\t\tapplyNoop(tree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst summary = tree.saveSummary();\n\t\t\tconst { tree: newTree } = setUpTestSharedTree({ containerRuntimeFactory, ...options });\n\t\t\tnewTree.loadSummary(summary);\n\t\t\texpect(newTree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(() => newTree.currentView).to.not.throw();\n\t\t});\n\n\t\tit('upgrades properly when no edits are sent', async () => {\n\t\t\t// Starts in 0.0.2 (so no upgrade)\n\t\t\tconst { testObjectProvider, tree: tree1 } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_0_2,\n\t\t\t});\n\n\t\t\tconst { tree: tree2 } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t\t\ttestObjectProvider,\n\t\t\t});\n\n\t\t\texpect(tree1.getWriteFormat()).to.equal(WriteFormat.v0_0_2);\n\t\t\texpect(tree2.getWriteFormat()).to.equal(WriteFormat.v0_0_2);\n\n\t\t\tawait testObjectProvider.ensureSynchronized();\n\n\t\t\texpect(tree1.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(tree1.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(tree1.equals(tree2)).to.be.true;\n\t\t});\n\n\t\tit('generates unique IDs after upgrading from 0.0.2', async () => {\n\t\t\tconst idCount = 100;\n\n\t\t\tconst { testObjectProvider, tree: tree } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_0_2,\n\t\t\t});\n\n\t\t\tapplyTestEdits(tree);\n\n\t\t\tconst nodeIds = new Set<NodeId>();\n\t\t\tconst stableIds = new Set<StableNodeId>();\n\t\t\tfor (let i = 0; i < idCount; i++) {\n\t\t\t\tconst id = tree.generateNodeId();\n\t\t\t\tnodeIds.add(id);\n\t\t\t\tstableIds.add(tree.convertToStableNodeId(id));\n\t\t\t}\n\n\t\t\t// New tree joins, causes an upgrade\n\t\t\tawait setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t\t\ttestObjectProvider,\n\t\t\t});\n\n\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\texpect(tree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\n\t\t\tfor (let i = 0; i < idCount; i++) {\n\t\t\t\t// No IDs should be generated that were already generated before the update\n\t\t\t\tconst id = tree.generateNodeId();\n\t\t\t\texpect(nodeIds.has(id)).to.be.false;\n\t\t\t\texpect(stableIds.has(tree.convertToStableNodeId(id))).to.be.false;\n\t\t\t}\n\t\t\texpect(tree.equals(tree)).to.be.true;\n\t\t});\n\n\t\tit('converts IDs correctly after upgrading from 0.0.2', async () => {\n\t\t\tconst { testObjectProvider, tree: tree1 } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_0_2,\n\t\t\t});\n\n\t\t\tconst idCount = 10;\n\t\t\tconst ids: [NodeId, StableNodeId][] = [];\n\t\t\tfor (let i = 0; i < idCount; i++) {\n\t\t\t\tconst id = tree1.generateNodeId();\n\t\t\t\tids.push([id, tree1.convertToStableNodeId(id)]);\n\t\t\t}\n\n\t\t\t// Use some of the IDs in edits, but leave others unused.\n\t\t\t// They should all be valid and usable after upgrade.\n\t\t\tconst builds: Mutable<TreeNodeSequence<BuildNode>> = [];\n\t\t\tfor (let i = 1; i < ids.length; i += 2) {\n\t\t\t\tbuilds.push(buildLeaf(ids[i][0], i));\n\t\t\t}\n\t\t\ttree1.applyEdit(\n\t\t\t\t...Change.insertTree(\n\t\t\t\t\tbuilds,\n\t\t\t\t\tStablePlace.atEndOf({ parent: tree1.currentView.root, label: 'foo' as TraitLabel })\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tconst { tree: tree2 } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t\t\ttestObjectProvider,\n\t\t\t});\n\n\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\texpect(tree1.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(tree2.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\n\t\t\tconst view = tree1.currentView;\n\t\t\tfor (let i = 0; i < ids.length; i++) {\n\t\t\t\tconst [nodeIdBefore, stableIdBefore] = ids[i];\n\t\t\t\texpect(tree1.convertToStableNodeId(nodeIdBefore)).to.equal(stableIdBefore);\n\t\t\t\tif (i % 2 === 0) {\n\t\t\t\t\texpect(view.hasNode(nodeIdBefore)).to.be.false;\n\t\t\t\t} else {\n\t\t\t\t\texpect(view.hasNode(nodeIdBefore)).to.be.true;\n\t\t\t\t\tconst node = view.getViewNode(nodeIdBefore);\n\t\t\t\t\texpect(node.payload).to.equal(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\texpect(tree1.equals(tree2)).to.be.true;\n\t\t});\n\n\t\tit('interns strings correctly after upgrading from 0.0.2', async () => {\n\t\t\tconst {\n\t\t\t\ttestObjectProvider,\n\t\t\t\ttree: tree1,\n\t\t\t\tcontainer,\n\t\t\t} = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_0_2,\n\t\t\t\tsummarizeHistory: false,\n\t\t\t});\n\n\t\t\tconst internedDefinition = 'internedDefinition';\n\n\t\t\tconst id = tree1.generateNodeId();\n\t\t\ttree1.applyEdit(\n\t\t\t\t...Change.insertTree(\n\t\t\t\t\t{ definition: internedDefinition, identifier: id },\n\t\t\t\t\tStablePlace.atStartOf(testTrait(tree1.currentView))\n\t\t\t\t)\n\t\t\t);\n\t\t\ttree1.applyEdit(Change.delete(StableRange.only(id)));\n\n\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\tconst summaryVersion = await waitForSummary(container);\n\n\t\t\tconst { tree: tree2 } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t\t\ttestObjectProvider,\n\t\t\t\theaders: { [LoaderHeader.version]: summaryVersion },\n\t\t\t});\n\n\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\texpect(tree1.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(tree2.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\n\t\t\ttree1.applyEdit(\n\t\t\t\t...Change.insertTree(\n\t\t\t\t\t{ definition: internedDefinition, identifier: tree1.generateNodeId() },\n\t\t\t\t\tStablePlace.atStartOf(testTrait(tree1.currentView))\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\texpect(areRevisionViewsSemanticallyEqual(tree1.currentView, tree1, tree2.currentView, tree2)).to.be.true;\n\t\t}).timeout(10000);\n\n\t\t// TODO:#461: Reenable\n\t\tit.skip('attributes all pre-upgrade IDs to the nil UUID after upgrading from 0.0.2', async () => {\n\t\t\t// const { testObjectProvider, tree: tree } = await setUpLocalServerTestSharedTree({\n\t\t\t// \twriteFormat: WriteFormat.v0_0_2,\n\t\t\t// });\n\t\t\t// const attributionId = tree.attributionId;\n\t\t\t// expect(attributionId).to.equal(nilUuid);\n\t\t\t// const nodeId = tree.generateNodeId();\n\t\t\t// const stableNodeId = tree.convertToStableNodeId(nodeId);\n\t\t\t// tree.applyEdit(Change.insertTree(buildLeaf(nodeId), StablePlace.atStartOf(testTrait(tree.currentView))));\n\t\t\t// // New tree joins, causes an upgrade\n\t\t\t// const { tree: tree2 } = await setUpLocalServerTestSharedTree({\n\t\t\t// \twriteFormat: WriteFormat.v0_1_1,\n\t\t\t// \ttestObjectProvider,\n\t\t\t// });\n\t\t\t// await testObjectProvider.ensureSynchronized();\n\t\t\t// expect(tree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\t// expect(tree.attributeNodeId(nodeId)).to.equal(attributionId);\n\t\t\t// expect(tree2.attributeNodeId(tree2.convertToNodeId(stableNodeId))).to.equal(attributionId);\n\t\t});\n\n\t\tdescribe('telemetry', () => {\n\t\t\tconst events: ITelemetryBaseEvent[] = [];\n\t\t\tconst logger = { send: (event) => events.push(event) };\n\t\t\tbeforeEach(() => {\n\t\t\t\tevents.length = 0;\n\t\t\t});\n\n\t\t\tit('emits RequestVersionUpdate events', () => {\n\t\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree({ ...treeOptions, logger });\n\t\t\t\tconst { tree: newerTree } = setUpTestSharedTree({\n\t\t\t\t\tcontainerRuntimeFactory,\n\t\t\t\t\t...secondTreeOptions,\n\t\t\t\t\tlogger,\n\t\t\t\t});\n\n\t\t\t\tnewerTree.loadSummary(tree.saveSummary());\n\t\t\t\texpect(\n\t\t\t\t\tevents.some(\n\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\tevent.eventName === 'SharedTree:RequestVersionUpdate' &&\n\t\t\t\t\t\t\tevent.versionTo === newVersion &&\n\t\t\t\t\t\t\tevent.versionFrom === oldVersion &&\n\t\t\t\t\t\t\tevent.category === 'generic'\n\t\t\t\t\t)\n\t\t\t\t).to.equal(true);\n\t\t\t});\n\n\t\t\tit('emits VersionUpdate events', () => {\n\t\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree({ ...treeOptions, logger });\n\t\t\t\tconst { tree: newerTree } = setUpTestSharedTree({\n\t\t\t\t\tcontainerRuntimeFactory,\n\t\t\t\t\t...secondTreeOptions,\n\t\t\t\t\tlogger,\n\t\t\t\t});\n\n\t\t\t\tnewerTree.loadSummary(tree.saveSummary());\n\t\t\t\tconst matchesVersionUpdate = (event: ITelemetryBaseEvent) =>\n\t\t\t\t\tevent.eventName === 'SharedTree:VersionUpdate_end' &&\n\t\t\t\t\tevent.version === newVersion &&\n\t\t\t\t\tevent.category === 'performance' &&\n\t\t\t\t\ttypeof event.duration === 'number';\n\n\t\t\t\texpect(events.some(matchesVersionUpdate)).to.equal(false);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\texpect(events.some(matchesVersionUpdate)).to.equal(true);\n\t\t\t});\n\n\t\t\tit('emits error events on VersionUpdate failure', () => {\n\t\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree({ ...treeOptions, logger });\n\t\t\t\tconst op: SharedTreeUpdateOp = {\n\t\t\t\t\ttype: SharedTreeOpType.Update,\n\t\t\t\t\tversion: newVersion,\n\t\t\t\t};\n\t\t\t\tcontainerRuntimeFactory.pushMessage({ contents: op });\n\t\t\t\t(tree.edits as EditLog).getLocalEdits = () => {\n\t\t\t\t\tthrow new Error('Simulated issue in update');\n\t\t\t\t};\n\t\t\t\tconst matchesFailedVersionUpdate = (event: ITelemetryBaseEvent) =>\n\t\t\t\t\tevent.eventName === 'SharedTree:VersionUpdate_cancel' &&\n\t\t\t\t\tevent.category === 'error' &&\n\t\t\t\t\tevent.error === 'Simulated issue in update';\n\n\t\t\t\texpect(events.some(matchesFailedVersionUpdate)).to.equal(false);\n\t\t\t\texpect(() => containerRuntimeFactory.processAllMessages()).to.throw(/Simulated issue in update/);\n\t\t\t\texpect(events.some(matchesFailedVersionUpdate)).to.equal(true);\n\t\t\t});\n\t\t});\n\t});\n}\n"]}
1
+ {"version":3,"file":"SharedTreeVersioningTests.js","sourceRoot":"","sources":["../../../src/test/utilities/SharedTreeVersioningTests.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 { ITelemetryBaseEvent } from '@fluidframework/common-definitions';\nimport { LoaderHeader } from '@fluidframework/container-definitions';\nimport { expect } from 'chai';\nimport { StableRange, StablePlace, BuildNode, Change } from '../../ChangeTypes';\nimport { Mutable } from '../../Common';\nimport { EditLog } from '../../EditLog';\nimport { areRevisionViewsSemanticallyEqual } from '../../EditUtilities';\nimport { SharedTreeDiagnosticEvent } from '../../EventTypes';\nimport { NodeId, StableNodeId, TraitLabel } from '../../Identifiers';\nimport { SharedTreeOpType, SharedTreeUpdateOp, TreeNodeSequence, WriteFormat } from '../../persisted-types';\nimport { SharedTree } from '../../SharedTree';\nimport { TreeNodeHandle } from '../../TreeNodeHandle';\nimport { nilUuid } from '../../UuidUtilities';\nimport { applyTestEdits } from '../Summary.tests';\nimport { buildLeaf } from './TestNode';\nimport {\n\tapplyNoop,\n\tsetUpLocalServerTestSharedTree,\n\tsetUpTestTree,\n\tSharedTreeTestingComponents,\n\tSharedTreeTestingOptions,\n\tspyOnSubmittedOps,\n\ttestTrait,\n\twaitForSummary,\n} from './TestUtilities';\n\nfunction spyOnVersionChanges(tree: SharedTree): WriteFormat[] {\n\tconst versions: WriteFormat[] = [];\n\ttree.on(SharedTreeDiagnosticEvent.WriteVersionChanged, (version) => versions.push(version));\n\treturn versions;\n}\n/**\n * Runs a test suite for operations on `SharedTree` that depend on correct versioning.\n * This suite can be used to test other implementations that aim to fulfill `SharedTree`'s contract.\n */\nexport function runSharedTreeVersioningTests(\n\ttitle: string,\n\tsetUpTestSharedTree: (options?: SharedTreeTestingOptions) => SharedTreeTestingComponents\n) {\n\tdescribe(title, () => {\n\t\tconst oldVersion = WriteFormat.v0_0_2;\n\t\tconst newVersion = WriteFormat.v0_1_1;\n\t\tconst treeOptions = { localMode: false, writeFormat: oldVersion };\n\t\tconst secondTreeOptions = {\n\t\t\tid: 'secondTestSharedTree',\n\t\t\tlocalMode: false,\n\t\t\twriteFormat: newVersion,\n\t\t};\n\n\t\tit('only processes edit ops if they have the same version', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\tconst { tree: newerTree } = setUpTestSharedTree({ containerRuntimeFactory, ...secondTreeOptions });\n\n\t\t\texpect(tree.edits.length).to.equal(0);\n\t\t\texpect(newerTree.edits.length).to.equal(0);\n\n\t\t\t// Process an edit\n\t\t\tapplyNoop(tree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t// The newer tree should have ignored the first edit\n\t\t\texpect(tree.edits.length).to.equal(1);\n\t\t\texpect(newerTree.edits.length).to.equal(0);\n\t\t});\n\n\t\tit('resubmits ops concurrent to an update op using the new format', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\tconst { tree: newerTree } = setUpTestSharedTree({\n\t\t\t\t...treeOptions,\n\t\t\t\tcontainerRuntimeFactory,\n\t\t\t\twriteFormat: newVersion,\n\t\t\t});\n\n\t\t\tconst testTree = setUpTestTree(tree);\n\t\t\tconst rootStableId = testTree.stable.identifier;\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst summary = tree.saveSummary();\n\t\t\tconst ops = spyOnSubmittedOps(containerRuntimeFactory);\n\t\t\tnewerTree.loadSummary(summary);\n\t\t\ttree.applyEdit(...Change.move(StableRange.only(testTree.left), StablePlace.after(testTree.right)));\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t// Verify even though one edit was applied, 2 edit ops were sent due to the version upgrade.\n\t\t\texpect(ops.length).to.equal(3);\n\t\t\texpect(ops.map((op) => op.type)).to.eql([\n\t\t\t\tSharedTreeOpType.Update,\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t]);\n\n\t\t\texpect(ops[1].version).to.equal(oldVersion);\n\t\t\texpect(ops[2].version).to.equal(newVersion);\n\n\t\t\t// Verify both trees apply the updated op.\n\t\t\tconst handle = new TreeNodeHandle(tree.currentView, tree.convertToNodeId(rootStableId));\n\t\t\texpect(handle.traits[testTree.left.traitLabel]).to.equal(undefined);\n\t\t\texpect(handle.traits[testTree.right.traitLabel].length).to.equal(2);\n\t\t\tconst handle2 = new TreeNodeHandle(newerTree.currentView, newerTree.convertToNodeId(rootStableId));\n\t\t\texpect(handle2.traits[testTree.left.traitLabel]).to.equal(undefined);\n\t\t\texpect(handle2.traits[testTree.right.traitLabel].length).to.equal(2);\n\t\t});\n\n\t\tit('throws if an edit op with a newer version than the write version is received', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\tconst { tree: newerTree } = setUpTestSharedTree({ containerRuntimeFactory, ...secondTreeOptions });\n\n\t\t\texpect(tree.edits.length).to.equal(0);\n\t\t\texpect(newerTree.edits.length).to.equal(0);\n\n\t\t\t// Process an edit and expect it to throw\n\t\t\tapplyNoop(newerTree);\n\t\t\texpect(() => containerRuntimeFactory.processAllMessages()).to.throw(\n\t\t\t\t'Newer op version received by a client that has yet to be updated.'\n\t\t\t);\n\t\t});\n\n\t\tit('ignores duplicate update ops', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\t// Process an edit\n\t\t\tapplyNoop(tree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst summary = tree.saveSummary();\n\n\t\t\t// Load the summary into multiple newer trees to trigger version update ops\n\t\t\tconst { tree: newerTree, containerRuntimeFactory: newerContainerRuntimeFactory } =\n\t\t\t\tsetUpTestSharedTree(secondTreeOptions);\n\t\t\tconst { tree: newerTree2 } = setUpTestSharedTree({\n\t\t\t\tcontainerRuntimeFactory: newerContainerRuntimeFactory,\n\t\t\t\t...secondTreeOptions,\n\t\t\t});\n\t\t\tconst { tree: newerTree3 } = setUpTestSharedTree({\n\t\t\t\tcontainerRuntimeFactory: newerContainerRuntimeFactory,\n\t\t\t\t...secondTreeOptions,\n\t\t\t});\n\n\t\t\tconst versions = spyOnVersionChanges(newerTree);\n\t\t\tconst versions2 = spyOnVersionChanges(newerTree2);\n\t\t\tconst versions3 = spyOnVersionChanges(newerTree3);\n\n\t\t\tnewerTree.loadSummary(summary);\n\t\t\tnewerTree2.loadSummary(summary);\n\t\t\tnewerTree3.loadSummary(summary);\n\t\t\tnewerContainerRuntimeFactory.processAllMessages();\n\n\t\t\t// Each tree should have processed a version update once\n\t\t\texpect(versions).to.deep.equal([oldVersion, newVersion]);\n\t\t\texpect(versions2).to.deep.equal([oldVersion, newVersion]);\n\t\t\texpect(versions3).to.deep.equal([oldVersion, newVersion]);\n\t\t});\n\n\t\tit('maintains custom EditLog and LogViewer callbacks when updating', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst summary = tree.saveSummary();\n\n\t\t\tlet editAdded = 0;\n\n\t\t\t// Load the summary into multiple newer trees to trigger version update ops\n\t\t\tconst { tree: newerTree, containerRuntimeFactory: newerContainerRuntimeFactory } =\n\t\t\t\tsetUpTestSharedTree(secondTreeOptions);\n\n\t\t\tconst versions = spyOnVersionChanges(newerTree);\n\n\t\t\tnewerTree.loadSummary(summary);\n\t\t\t(newerTree.edits as EditLog).registerEditAddedHandler(() => editAdded++);\n\n\t\t\texpect(versions).to.have.length(1);\n\t\t\texpect(versions[0]).to.equal(oldVersion);\n\n\t\t\t// Update occurs after the handler is added to the old edit log\n\t\t\tnewerContainerRuntimeFactory.processAllMessages();\n\t\t\texpect(newerTree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(versions).to.have.length(2);\n\t\t\texpect(versions[1]).to.equal(newVersion);\n\n\t\t\tconst additionalEdits = 5;\n\t\t\tfor (let i = 0; i < additionalEdits; i++) {\n\t\t\t\tapplyNoop(newerTree);\n\t\t\t}\n\t\t\tnewerContainerRuntimeFactory.processAllMessages();\n\n\t\t\t// The edit added handler should run twice for each additional edit (once when applying locally and once when applying the sequenced edit)\n\t\t\texpect(editAdded).to.equal(additionalEdits * 2);\n\t\t});\n\n\t\tit('begins writing the new version only after updating', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\t// Process an edit\n\t\t\tapplyNoop(tree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst summary = tree.saveSummary();\n\n\t\t\t// Load the summary into a newer tree to trigger a version update op\n\t\t\tconst { tree: newerTree, containerRuntimeFactory: newerContainerRuntimeFactory } =\n\t\t\t\tsetUpTestSharedTree(secondTreeOptions);\n\n\t\t\tconst ops = spyOnSubmittedOps(newerContainerRuntimeFactory);\n\n\t\t\tnewerTree.loadSummary(summary);\n\t\t\tapplyNoop(newerTree);\n\t\t\tnewerContainerRuntimeFactory.processAllMessages();\n\t\t\texpect(newerTree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\tapplyNoop(newerTree);\n\n\t\t\texpect(ops.length).to.equal(4);\n\t\t\texpect(ops.map((op) => op.type)).to.eql([\n\t\t\t\tSharedTreeOpType.Update,\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t]);\n\t\t\t// Because the first op was submitted before the Update message was sequenced, it should use\n\t\t\t// the same write format as the loaded summary.\n\t\t\texpect(ops[1].version).to.equal(oldVersion);\n\t\t\texpect(ops[2].version).to.equal(newVersion);\n\t\t\texpect(ops[3].version).to.equal(newVersion);\n\t\t});\n\n\t\tit('Existing client can update to a write version higher than the initialized write version', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\tconst versions = spyOnVersionChanges(tree);\n\t\t\tconst ops = spyOnSubmittedOps(containerRuntimeFactory);\n\n\t\t\t// Process an edit\n\t\t\tapplyNoop(tree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst summary = tree.saveSummary();\n\n\t\t\t// Load the summary into a newer tree to trigger a version update op\n\t\t\tconst { tree: newerTree } = setUpTestSharedTree({ containerRuntimeFactory, ...secondTreeOptions });\n\t\t\tnewerTree.loadSummary(summary);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\texpect(tree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(newerTree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\n\t\t\t// Apply another arbitrary edit to the initial tree, which should now be using the new write version.\n\t\t\tapplyNoop(tree);\n\n\t\t\texpect(versions).to.eql([newVersion]);\n\t\t\texpect(ops.length).to.equal(3);\n\t\t\texpect(ops.map((op) => op.type)).to.eql([\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t\tSharedTreeOpType.Update,\n\t\t\t\tSharedTreeOpType.Edit,\n\t\t\t]);\n\n\t\t\texpect(ops[0].version).to.equal(oldVersion);\n\t\t\texpect(ops[2].version).to.equal(newVersion);\n\t\t});\n\n\t\tit('New client can update to a write version higher than the initialized version on summary load', () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree({\n\t\t\t\t...treeOptions,\n\t\t\t\twriteFormat: newVersion,\n\t\t\t});\n\t\t\tconst ops = spyOnSubmittedOps(containerRuntimeFactory);\n\n\t\t\tapplyNoop(tree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst summary = tree.saveSummary();\n\n\t\t\t// Load the summary into a tree with older write version; it should recognize the document is already using\n\t\t\t// the new write version and use that instead.\n\t\t\tconst { tree: olderTree } = setUpTestSharedTree({\n\t\t\t\t...treeOptions,\n\t\t\t\tcontainerRuntimeFactory,\n\t\t\t\twriteFormat: oldVersion,\n\t\t\t});\n\n\t\t\tolderTree.loadSummary(summary);\n\t\t\tapplyNoop(olderTree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\texpect(ops.length).to.equal(2);\n\t\t\texpect(ops.map((op) => op.type)).to.eql([SharedTreeOpType.Edit, SharedTreeOpType.Edit]);\n\t\t\texpect(ops.map((op) => op.version)).to.eql([newVersion, newVersion]);\n\t\t});\n\n\t\tit('can load a 0.1.1 summary and access the current view', () => {\n\t\t\t// This is a regression test for the logic initializing SharedTree's EditLog from a summary.\n\t\t\t// The 0.1.1 format omits `currentTree`, but EditLog should still tolerate synchronous access\n\t\t\t// of the first edit in the session (which is a single insert containing that tree).\n\t\t\tconst options: SharedTreeTestingOptions = {\n\t\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t\t\tsummarizeHistory: false,\n\t\t\t\tlocalMode: false,\n\t\t\t};\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(options);\n\t\t\tapplyNoop(tree);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst summary = tree.saveSummary();\n\t\t\tconst { tree: newTree } = setUpTestSharedTree({ containerRuntimeFactory, ...options });\n\t\t\tnewTree.loadSummary(summary);\n\t\t\texpect(newTree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(() => newTree.currentView).to.not.throw();\n\t\t});\n\n\t\tit('upgrades properly when no edits are sent', async () => {\n\t\t\t// Starts in 0.0.2 (so no upgrade)\n\t\t\tconst { testObjectProvider, tree: tree1 } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_0_2,\n\t\t\t});\n\n\t\t\tconst { tree: tree2 } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t\t\ttestObjectProvider,\n\t\t\t});\n\n\t\t\texpect(tree1.getWriteFormat()).to.equal(WriteFormat.v0_0_2);\n\t\t\texpect(tree2.getWriteFormat()).to.equal(WriteFormat.v0_0_2);\n\n\t\t\tawait testObjectProvider.ensureSynchronized();\n\n\t\t\texpect(tree1.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(tree1.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(tree1.equals(tree2)).to.be.true;\n\t\t});\n\n\t\tit('generates unique IDs after upgrading from 0.0.2', async () => {\n\t\t\tconst idCount = 100;\n\n\t\t\tconst { testObjectProvider, tree: tree } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_0_2,\n\t\t\t});\n\n\t\t\tapplyTestEdits(tree);\n\n\t\t\tconst nodeIds = new Set<NodeId>();\n\t\t\tconst stableIds = new Set<StableNodeId>();\n\t\t\tfor (let i = 0; i < idCount; i++) {\n\t\t\t\tconst id = tree.generateNodeId();\n\t\t\t\tnodeIds.add(id);\n\t\t\t\tstableIds.add(tree.convertToStableNodeId(id));\n\t\t\t}\n\n\t\t\t// New tree joins, causes an upgrade\n\t\t\tawait setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t\t\ttestObjectProvider,\n\t\t\t});\n\n\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\texpect(tree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\n\t\t\tfor (let i = 0; i < idCount; i++) {\n\t\t\t\t// No IDs should be generated that were already generated before the update\n\t\t\t\tconst id = tree.generateNodeId();\n\t\t\t\texpect(nodeIds.has(id)).to.be.false;\n\t\t\t\texpect(stableIds.has(tree.convertToStableNodeId(id))).to.be.false;\n\t\t\t}\n\t\t\texpect(tree.equals(tree)).to.be.true;\n\t\t});\n\n\t\tit('converts IDs correctly after upgrading from 0.0.2', async () => {\n\t\t\tconst { testObjectProvider, tree: tree1 } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_0_2,\n\t\t\t});\n\n\t\t\tconst idCount = 10;\n\t\t\tconst ids: [NodeId, StableNodeId][] = [];\n\t\t\tfor (let i = 0; i < idCount; i++) {\n\t\t\t\tconst id = tree1.generateNodeId();\n\t\t\t\tids.push([id, tree1.convertToStableNodeId(id)]);\n\t\t\t}\n\n\t\t\t// Use some of the IDs in edits, but leave others unused.\n\t\t\t// They should all be valid and usable after upgrade.\n\t\t\tconst builds: Mutable<TreeNodeSequence<BuildNode>> = [];\n\t\t\tfor (let i = 1; i < ids.length; i += 2) {\n\t\t\t\tbuilds.push(buildLeaf(ids[i][0], i));\n\t\t\t}\n\t\t\ttree1.applyEdit(\n\t\t\t\t...Change.insertTree(\n\t\t\t\t\tbuilds,\n\t\t\t\t\tStablePlace.atEndOf({ parent: tree1.currentView.root, label: 'foo' as TraitLabel })\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tconst { tree: tree2 } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t\t\ttestObjectProvider,\n\t\t\t});\n\n\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\texpect(tree1.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(tree2.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\n\t\t\tconst view = tree1.currentView;\n\t\t\tfor (let i = 0; i < ids.length; i++) {\n\t\t\t\tconst [nodeIdBefore, stableIdBefore] = ids[i];\n\t\t\t\texpect(tree1.convertToStableNodeId(nodeIdBefore)).to.equal(stableIdBefore);\n\t\t\t\tif (i % 2 === 0) {\n\t\t\t\t\texpect(view.hasNode(nodeIdBefore)).to.be.false;\n\t\t\t\t} else {\n\t\t\t\t\texpect(view.hasNode(nodeIdBefore)).to.be.true;\n\t\t\t\t\tconst node = view.getViewNode(nodeIdBefore);\n\t\t\t\t\texpect(node.payload).to.equal(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\texpect(tree1.equals(tree2)).to.be.true;\n\t\t});\n\n\t\tit('interns strings correctly after upgrading from 0.0.2', async () => {\n\t\t\tconst {\n\t\t\t\ttestObjectProvider,\n\t\t\t\ttree: tree1,\n\t\t\t\tcontainer,\n\t\t\t} = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_0_2,\n\t\t\t\tsummarizeHistory: false,\n\t\t\t});\n\n\t\t\tconst internedDefinition = 'internedDefinition';\n\n\t\t\tconst id = tree1.generateNodeId();\n\t\t\ttree1.applyEdit(\n\t\t\t\t...Change.insertTree(\n\t\t\t\t\t{ definition: internedDefinition, identifier: id },\n\t\t\t\t\tStablePlace.atStartOf(testTrait(tree1.currentView))\n\t\t\t\t)\n\t\t\t);\n\t\t\ttree1.applyEdit(Change.delete(StableRange.only(id)));\n\n\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\tconst summaryVersion = await waitForSummary(container);\n\n\t\t\tconst { tree: tree2 } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t\t\ttestObjectProvider,\n\t\t\t\theaders: { [LoaderHeader.version]: summaryVersion },\n\t\t\t});\n\n\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\texpect(tree1.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(tree2.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\n\t\t\ttree1.applyEdit(\n\t\t\t\t...Change.insertTree(\n\t\t\t\t\t{ definition: internedDefinition, identifier: tree1.generateNodeId() },\n\t\t\t\t\tStablePlace.atStartOf(testTrait(tree1.currentView))\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\texpect(areRevisionViewsSemanticallyEqual(tree1.currentView, tree1, tree2.currentView, tree2)).to.be.true;\n\t\t}).timeout(10000);\n\n\t\tit('attributes all pre-upgrade IDs to the nil UUID after upgrading from 0.0.2', async () => {\n\t\t\tconst { testObjectProvider, tree: tree } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_0_2,\n\t\t\t});\n\n\t\t\tconst attributionId = tree.attributionId;\n\t\t\texpect(attributionId).to.equal(nilUuid);\n\t\t\tconst nodeId = tree.generateNodeId();\n\t\t\tconst stableNodeId = tree.convertToStableNodeId(nodeId);\n\n\t\t\ttree.applyEdit(Change.insertTree(buildLeaf(nodeId), StablePlace.atStartOf(testTrait(tree.currentView))));\n\n\t\t\t// New tree joins, causes an upgrade\n\t\t\tconst { tree: tree2 } = await setUpLocalServerTestSharedTree({\n\t\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t\t\ttestObjectProvider,\n\t\t\t});\n\n\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\texpect(tree.getWriteFormat()).to.equal(WriteFormat.v0_1_1);\n\t\t\texpect(tree.attributeNodeId(nodeId)).to.equal(attributionId);\n\t\t\texpect(tree2.attributeNodeId(tree2.convertToNodeId(stableNodeId))).to.equal(attributionId);\n\t\t});\n\n\t\tdescribe('telemetry', () => {\n\t\t\tconst events: ITelemetryBaseEvent[] = [];\n\t\t\tconst logger = { send: (event) => events.push(event) };\n\t\t\tbeforeEach(() => {\n\t\t\t\tevents.length = 0;\n\t\t\t});\n\n\t\t\tit('emits RequestVersionUpdate events', () => {\n\t\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree({ ...treeOptions, logger });\n\t\t\t\tconst { tree: newerTree } = setUpTestSharedTree({\n\t\t\t\t\tcontainerRuntimeFactory,\n\t\t\t\t\t...secondTreeOptions,\n\t\t\t\t\tlogger,\n\t\t\t\t});\n\n\t\t\t\tnewerTree.loadSummary(tree.saveSummary());\n\t\t\t\texpect(\n\t\t\t\t\tevents.some(\n\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\tevent.eventName === 'SharedTree:RequestVersionUpdate' &&\n\t\t\t\t\t\t\tevent.versionTo === newVersion &&\n\t\t\t\t\t\t\tevent.versionFrom === oldVersion &&\n\t\t\t\t\t\t\tevent.category === 'generic'\n\t\t\t\t\t)\n\t\t\t\t).to.equal(true);\n\t\t\t});\n\n\t\t\tit('emits VersionUpdate events', () => {\n\t\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree({ ...treeOptions, logger });\n\t\t\t\tconst { tree: newerTree } = setUpTestSharedTree({\n\t\t\t\t\tcontainerRuntimeFactory,\n\t\t\t\t\t...secondTreeOptions,\n\t\t\t\t\tlogger,\n\t\t\t\t});\n\n\t\t\t\tnewerTree.loadSummary(tree.saveSummary());\n\t\t\t\tconst matchesVersionUpdate = (event: ITelemetryBaseEvent) =>\n\t\t\t\t\tevent.eventName === 'SharedTree:VersionUpdate_end' &&\n\t\t\t\t\tevent.version === newVersion &&\n\t\t\t\t\tevent.category === 'performance' &&\n\t\t\t\t\ttypeof event.duration === 'number';\n\n\t\t\t\texpect(events.some(matchesVersionUpdate)).to.equal(false);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\texpect(events.some(matchesVersionUpdate)).to.equal(true);\n\t\t\t});\n\n\t\t\tit('emits error events on VersionUpdate failure', () => {\n\t\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree({ ...treeOptions, logger });\n\t\t\t\tconst op: SharedTreeUpdateOp = {\n\t\t\t\t\ttype: SharedTreeOpType.Update,\n\t\t\t\t\tversion: newVersion,\n\t\t\t\t};\n\t\t\t\tcontainerRuntimeFactory.pushMessage({ contents: op });\n\t\t\t\t(tree.edits as EditLog).getLocalEdits = () => {\n\t\t\t\t\tthrow new Error('Simulated issue in update');\n\t\t\t\t};\n\t\t\t\tconst matchesFailedVersionUpdate = (event: ITelemetryBaseEvent) =>\n\t\t\t\t\tevent.eventName === 'SharedTree:VersionUpdate_cancel' &&\n\t\t\t\t\tevent.category === 'error' &&\n\t\t\t\t\tevent.error === 'Simulated issue in update';\n\n\t\t\t\texpect(events.some(matchesFailedVersionUpdate)).to.equal(false);\n\t\t\t\texpect(() => containerRuntimeFactory.processAllMessages()).to.throw(/Simulated issue in update/);\n\t\t\t\texpect(events.some(matchesFailedVersionUpdate)).to.equal(true);\n\t\t\t});\n\t\t});\n\t});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TestNode.d.ts","sourceRoot":"","sources":["../../../src/test/utilities/TestNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TestNode.d.ts","sourceRoot":"","sources":["../../../src/test/utilities/TestNode.ts"],"names":[],"mappings":"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"}
@@ -118,12 +118,7 @@ export class SimpleTestTree {
118
118
  return convertTreeNodes(this, (node) => convertNodeDataIds(node, identity));
119
119
  }
120
120
  buildLeaf(id, payload) {
121
- if (id === undefined) {
122
- return buildLeaf(undefined, payload);
123
- }
124
- else {
125
- return buildLeaf(id, payload);
126
- }
121
+ return id === undefined ? buildLeaf(undefined, payload) : buildLeaf(id, payload);
127
122
  }
128
123
  buildLeafInternal(id, payload) {
129
124
  return buildLeafInternal(this, id, payload);
@@ -206,12 +201,7 @@ export class RefreshingTestTree {
206
201
  return convertTreeNodes(this.testTree, (node) => convertNodeDataIds(node, identity));
207
202
  }
208
203
  buildLeaf(id, payload) {
209
- if (id === undefined) {
210
- return this.testTree.buildLeaf(undefined, payload);
211
- }
212
- else {
213
- return this.testTree.buildLeaf(id, payload);
214
- }
204
+ return id === undefined ? this.testTree.buildLeaf(undefined, payload) : this.testTree.buildLeaf(id, payload);
215
205
  }
216
206
  buildLeafInternal(id, payload) {
217
207
  return this.testTree.buildLeafInternal(id, payload);
@@ -1 +1 @@
1
- {"version":3,"file":"TestNode.js","sourceRoot":"","sources":["../../../src/test/utilities/TestNode.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 { BuildTreeNode } from '../../ChangeTypes';\nimport { memoizeGetter, fail, setPropertyIfDefined, identity } from '../../Common';\nimport { convertTreeNodes } from '../../EditUtilities';\nimport { convertNodeDataIds } from '../../IdConversion';\nimport { Definition, NodeId, OpSpaceNodeId, SessionId, StableNodeId, TraitLabel } from '../../Identifiers';\nimport { initialTree } from '../../InitialTree';\nimport { NodeIdContext, NodeIdConverter, NodeIdNormalizer } from '../../NodeIdUtilities';\nimport {\n\tBuildNodeInternal,\n\tChangeNode,\n\tPayload,\n\tTraitLocationInternal,\n\tTraitLocationInternal_0_0_2,\n\tTraitMap,\n\tTreeNode,\n} from '../../persisted-types';\nimport { RevisionView } from '../../RevisionView';\nimport { TraitLocation } from '../../TreeView';\n\n/** A legacy format of a `TestNode` */\nexport type TestNode_0_0_2 = TreeNode<TestNode_0_0_2, StableNodeId>;\n\n/**\n * A node with no children\n */\nexport type LeafNode<T> = Omit<T, 'traits'> & { traits: Record<string, never> };\n\n/**\n * Test extension of {@link TraitLocation} which can be converted to stable or legacy formats\n */\nexport interface TestTraitLocation extends TraitLocation {\n\tstable: TraitLocationInternal_0_0_2;\n\t/** Translate this location into the equivalent location in another ID context */\n\ttranslate(idConverter: NodeIdConverter): TestTraitLocation;\n}\n\n/**\n * An object containing useful properties for analyzing a node within a test context.\n */\nexport interface TestNode extends TreeNode<TestNode, NodeId> {\n\t/** The label of the trait under which this node resides */\n\ttraitLabel: TraitLabel;\n\t/** The trait location at which this node resides */\n\ttraitLocation: TestTraitLocation;\n\t/** A revision view of this node */\n\tview: RevisionView;\n\t/** A version of this tree with stable IDs */\n\tstable: TestNode_0_0_2;\n\t/** Translate this node's ID into the equivalent ID in another ID context */\n\ttranslateId(idConverter: NodeIdConverter): NodeId;\n\t/** Express this tree as a ChangeNode */\n\ttoChangeNode(): ChangeNode;\n}\n\n/**\n * A small tree of `TestNode`s consisting of a root/parent node, a \"left\" child and a \"right\" child. This is a useful tree for initializing\n * tests as it makes it ergonomic to retrieve various properties of the tree. Note that it only represents the initial state of the tree,\n * it does not update even if the SharedTree that it was the initial state for is mutated.\n */\nexport interface TestTree extends TestNode, NodeIdContext, NodeIdNormalizer<OpSpaceNodeId> {\n\t/** The left child node */\n\tleft: TestNode;\n\t/** The right child node */\n\tright: TestNode;\n\t/** Create an arbitrary unparented node with the given payload, if specified */\n\tbuildLeaf(id?: undefined, payload?: Payload): LeafNode<BuildTreeNode>;\n\t/** Create an arbitrary unparented node with the given identifier and payload, if specified */\n\tbuildLeaf(id: NodeId, payload?: Payload): LeafNode<ChangeNode>;\n\t/**\n\t * Generates a leaf node for use in internal build changes.\n\t * If no `id` is explicitly provided, one will be generated.\n\t * @param id - Explicit ID to use as the new node's identifier. If not provided, one will be generated.\n\t */\n\tbuildLeafInternal(id?: NodeId, payload?: Payload): LeafNode<TreeNode<BuildNodeInternal, NodeId>>;\n}\n\n/**\n * A TestTree for general use within the shared-tree package. The nodes in every `SimpleTestTree` will have unique identifiers - i.e. two\n * different instances of `SimpleTestTree` are never equivalent.\n */\nexport class SimpleTestTree implements TestTree {\n\tpublic static readonly definition = 'node' as Definition;\n\tpublic static readonly traitLabel = 'e276f382-fa99-49a1-ae81-42001791c733' as TraitLabel;\n\tpublic static readonly leftTraitLabel = 'left' as TraitLabel;\n\tpublic static readonly rightTraitLabel = 'right' as TraitLabel;\n\n\tprivate readonly root: TestNode;\n\tpublic readonly left: TestNode;\n\tpublic readonly right: TestNode;\n\tpublic readonly expensiveValidation;\n\n\tpublic constructor(\n\t\tprivate readonly nodeIdContext: NodeIdContext,\n\t\tprivate readonly nodeIdNormalizer: NodeIdNormalizer<OpSpaceNodeId>,\n\t\texpensiveValidation = true\n\t) {\n\t\tconst leftIdentifier = nodeIdContext.generateNodeId();\n\t\tconst rightIdentifier = nodeIdContext.generateNodeId();\n\t\tconst rootIdentifier = nodeIdContext.generateNodeId();\n\t\tthis.expensiveValidation = expensiveValidation;\n\t\tthis.left = {\n\t\t\tdefinition: SimpleTestTree.definition,\n\t\t\tidentifier: leftIdentifier,\n\t\t\ttraits: {},\n\t\t\ttraitLabel: SimpleTestTree.leftTraitLabel,\n\t\t\ttraitLocation: {\n\t\t\t\tparent: rootIdentifier,\n\t\t\t\tlabel: SimpleTestTree.leftTraitLabel,\n\t\t\t\tget stable() {\n\t\t\t\t\treturn memoizeGetter(this, 'stable', convertToTraitLocation_0_0_2(this, nodeIdContext));\n\t\t\t\t},\n\t\t\t\ttranslate: (idConverter: NodeIdConverter) =>\n\t\t\t\t\ttranslateTraitLocation(SimpleTestTree.leftTraitLabel, rootIdentifier, nodeIdContext, idConverter),\n\t\t\t},\n\t\t\tget view() {\n\t\t\t\treturn memoizeGetter(this, 'view', RevisionView.fromTree(this, expensiveValidation));\n\t\t\t},\n\t\t\tget stable() {\n\t\t\t\treturn memoizeGetter(this, 'stable', convertToTestNode_0_0_2(this, nodeIdContext));\n\t\t\t},\n\t\t\ttranslateId: (idConverter: NodeIdConverter) => translateId(leftIdentifier, nodeIdContext, idConverter),\n\t\t\ttoChangeNode: () =>\n\t\t\t\tconvertTreeNodes<ChangeNode, ChangeNode>(this.left, (node) => convertNodeDataIds(node, identity)),\n\t\t};\n\t\tthis.right = {\n\t\t\tdefinition: SimpleTestTree.definition,\n\t\t\tidentifier: rightIdentifier,\n\t\t\ttraits: {},\n\t\t\ttraitLabel: SimpleTestTree.rightTraitLabel,\n\t\t\ttraitLocation: {\n\t\t\t\tparent: rootIdentifier,\n\t\t\t\tlabel: SimpleTestTree.rightTraitLabel,\n\t\t\t\tget stable() {\n\t\t\t\t\treturn memoizeGetter(this, 'stable', convertToTraitLocation_0_0_2(this, nodeIdContext));\n\t\t\t\t},\n\t\t\t\ttranslate: (idConverter: NodeIdConverter) =>\n\t\t\t\t\ttranslateTraitLocation(SimpleTestTree.rightTraitLabel, rootIdentifier, nodeIdContext, idConverter),\n\t\t\t},\n\t\t\tget view() {\n\t\t\t\treturn memoizeGetter(this, 'view', RevisionView.fromTree(this, expensiveValidation));\n\t\t\t},\n\t\t\tget stable() {\n\t\t\t\treturn memoizeGetter(this, 'stable', convertToTestNode_0_0_2(this, nodeIdContext));\n\t\t\t},\n\t\t\ttranslateId: (idConverter: NodeIdConverter) => translateId(rightIdentifier, nodeIdContext, idConverter),\n\t\t\ttoChangeNode: () =>\n\t\t\t\tconvertTreeNodes<ChangeNode, ChangeNode>(this.right, (node) => convertNodeDataIds(node, identity)),\n\t\t};\n\t\tconst rootParent = nodeIdContext.convertToNodeId(initialTree.identifier);\n\t\tthis.root = {\n\t\t\tdefinition: SimpleTestTree.definition,\n\t\t\tidentifier: rootIdentifier,\n\t\t\ttraits: {\n\t\t\t\t[SimpleTestTree.leftTraitLabel]: [this.left],\n\t\t\t\t[SimpleTestTree.rightTraitLabel]: [this.right],\n\t\t\t},\n\t\t\ttraitLabel: SimpleTestTree.traitLabel,\n\t\t\ttraitLocation: {\n\t\t\t\tlabel: SimpleTestTree.traitLabel,\n\t\t\t\tparent: rootParent,\n\t\t\t\tget stable() {\n\t\t\t\t\treturn memoizeGetter(this, 'stable', convertToTraitLocation_0_0_2(this, nodeIdContext));\n\t\t\t\t},\n\t\t\t\ttranslate: (idConverter: NodeIdConverter) =>\n\t\t\t\t\ttranslateTraitLocation(SimpleTestTree.traitLabel, rootParent, nodeIdContext, idConverter),\n\t\t\t},\n\t\t\tget view() {\n\t\t\t\treturn memoizeGetter(this, 'view', RevisionView.fromTree(this, expensiveValidation));\n\t\t\t},\n\t\t\tget stable() {\n\t\t\t\treturn memoizeGetter(this, 'stable', convertToTestNode_0_0_2(this, nodeIdContext));\n\t\t\t},\n\t\t\ttranslateId: (idConverter: NodeIdConverter) => translateId(rootIdentifier, nodeIdContext, idConverter),\n\t\t\ttoChangeNode: () =>\n\t\t\t\tconvertTreeNodes<ChangeNode, ChangeNode>(this.root, (node) => convertNodeDataIds(node, identity)),\n\t\t};\n\t}\n\n\tpublic get definition(): Definition {\n\t\treturn this.root.definition;\n\t}\n\n\tpublic get identifier(): NodeId {\n\t\treturn this.root.identifier;\n\t}\n\n\tpublic get traits(): TraitMap<TestNode> {\n\t\treturn this.root.traits;\n\t}\n\n\tpublic get traitLabel(): TraitLabel {\n\t\treturn this.root.traitLabel;\n\t}\n\n\tpublic get traitLocation(): TestTraitLocation {\n\t\treturn this.root.traitLocation;\n\t}\n\n\tpublic get view(): RevisionView {\n\t\treturn this.root.view;\n\t}\n\n\tpublic get stable() {\n\t\treturn this.root.stable;\n\t}\n\n\tpublic translateId(idConverter: NodeIdConverter): NodeId {\n\t\treturn this.root.translateId(idConverter);\n\t}\n\n\tpublic toChangeNode(): ChangeNode {\n\t\treturn convertTreeNodes<ChangeNode, ChangeNode>(this, (node) => convertNodeDataIds(node, identity));\n\t}\n\n\tpublic buildLeaf(id?: undefined, payload?: Payload): LeafNode<BuildTreeNode>;\n\n\tpublic buildLeaf(id: NodeId, payload?: Payload): LeafNode<ChangeNode>;\n\n\tpublic buildLeaf(id?: NodeId, payload?: Payload): LeafNode<BuildTreeNode> | LeafNode<ChangeNode> {\n\t\tif (id === undefined) {\n\t\t\treturn buildLeaf(undefined, payload);\n\t\t} else {\n\t\t\treturn buildLeaf(id, payload);\n\t\t}\n\t}\n\n\tpublic buildLeafInternal(id?: NodeId, payload?: Payload): LeafNode<TreeNode<BuildNodeInternal, NodeId>> {\n\t\treturn buildLeafInternal(this, id, payload);\n\t}\n\n\tpublic generateNodeId(override?: string): NodeId {\n\t\treturn this.nodeIdContext.generateNodeId(override);\n\t}\n\n\tpublic convertToStableNodeId(id: NodeId): StableNodeId {\n\t\treturn this.nodeIdContext.convertToStableNodeId(id);\n\t}\n\n\tpublic tryConvertToStableNodeId(id: NodeId): StableNodeId | undefined {\n\t\treturn this.nodeIdContext.tryConvertToStableNodeId(id);\n\t}\n\n\tpublic convertToNodeId(id: StableNodeId): NodeId {\n\t\treturn this.nodeIdContext.convertToNodeId(id);\n\t}\n\n\tpublic tryConvertToNodeId(id: StableNodeId): NodeId | undefined {\n\t\treturn this.nodeIdContext.tryConvertToNodeId(id);\n\t}\n\n\tget localSessionId(): SessionId {\n\t\treturn this.nodeIdNormalizer.localSessionId;\n\t}\n\n\tnormalizeToOpSpace(id: NodeId): OpSpaceNodeId {\n\t\treturn this.nodeIdNormalizer.normalizeToOpSpace(id);\n\t}\n\tnormalizeToSessionSpace(id: OpSpaceNodeId, sessionId: SessionId): NodeId {\n\t\treturn this.nodeIdNormalizer.normalizeToSessionSpace(id, sessionId);\n\t}\n}\n\n/** A TestTree which resets before each test */\nexport class RefreshingTestTree<T extends TestTree> implements TestTree {\n\tprivate _testTree?: T;\n\n\tpublic constructor(createTestTree: () => T, fn?: (testTree: T) => void) {\n\t\tbeforeEach(() => {\n\t\t\tthis._testTree = createTestTree();\n\t\t\tfn?.(this._testTree);\n\t\t});\n\t\tafterEach(() => {\n\t\t\tthis._testTree = undefined;\n\t\t});\n\t}\n\n\tprivate get testTree(): T {\n\t\treturn (\n\t\t\tthis._testTree ??\n\t\t\tfail(\n\t\t\t\t'RefreshingTestTree should be created within a describe() block and should only be read within it() blocks'\n\t\t\t)\n\t\t);\n\t}\n\n\tpublic get left(): TestNode {\n\t\treturn this.testTree.left;\n\t}\n\n\tpublic get right(): TestNode {\n\t\treturn this.testTree.right;\n\t}\n\n\tpublic get definition(): Definition {\n\t\treturn this.testTree.definition;\n\t}\n\n\tpublic get identifier(): NodeId {\n\t\treturn this.testTree.identifier;\n\t}\n\n\tpublic get traits(): TraitMap<TestNode> {\n\t\treturn this.testTree.traits;\n\t}\n\n\tpublic get traitLabel(): TraitLabel {\n\t\treturn this.testTree.traitLabel;\n\t}\n\n\tpublic get traitLocation(): TestTraitLocation {\n\t\treturn this.testTree.traitLocation;\n\t}\n\n\tpublic get view(): RevisionView {\n\t\treturn this.testTree.view;\n\t}\n\n\tpublic get stable(): TestNode_0_0_2 {\n\t\treturn this.testTree.stable;\n\t}\n\n\tpublic translateId(idConverter: NodeIdConverter): NodeId {\n\t\treturn this.testTree.translateId(idConverter);\n\t}\n\n\tpublic toChangeNode(): ChangeNode {\n\t\treturn convertTreeNodes<ChangeNode, ChangeNode>(this.testTree, (node) => convertNodeDataIds(node, identity));\n\t}\n\n\tpublic buildLeaf(id?: undefined, payload?: Payload): LeafNode<BuildTreeNode>;\n\tpublic buildLeaf(id: NodeId, payload?: Payload): LeafNode<ChangeNode>;\n\tpublic buildLeaf(id?: NodeId, payload?: Payload): LeafNode<BuildTreeNode> | LeafNode<ChangeNode> {\n\t\tif (id === undefined) {\n\t\t\treturn this.testTree.buildLeaf(undefined, payload);\n\t\t} else {\n\t\t\treturn this.testTree.buildLeaf(id, payload);\n\t\t}\n\t}\n\n\tpublic buildLeafInternal(id?: NodeId, payload?: Payload): LeafNode<TreeNode<BuildNodeInternal, NodeId>> {\n\t\treturn this.testTree.buildLeafInternal(id, payload);\n\t}\n\n\tpublic generateNodeId(override?: string): NodeId {\n\t\treturn this.testTree.generateNodeId(override);\n\t}\n\n\tconvertToStableNodeId(id: NodeId): StableNodeId {\n\t\treturn this.testTree.convertToStableNodeId(id);\n\t}\n\n\ttryConvertToStableNodeId(id: NodeId): StableNodeId | undefined {\n\t\treturn this.testTree.convertToStableNodeId(id);\n\t}\n\n\tconvertToNodeId(id: StableNodeId): NodeId {\n\t\treturn this.testTree.convertToNodeId(id);\n\t}\n\n\ttryConvertToNodeId(id: StableNodeId): NodeId | undefined {\n\t\treturn this.testTree.tryConvertToNodeId(id);\n\t}\n\n\tget localSessionId(): SessionId {\n\t\treturn this.testTree.localSessionId;\n\t}\n\n\tnormalizeToOpSpace(id: NodeId): OpSpaceNodeId {\n\t\treturn this.testTree.normalizeToOpSpace(id);\n\t}\n\n\tnormalizeToSessionSpace(id: OpSpaceNodeId, sessionId: SessionId): NodeId {\n\t\treturn this.testTree.normalizeToSessionSpace(id, sessionId);\n\t}\n}\n\n/** Create a new node with an automatically generated ID and the given payload */\nexport function buildLeaf(id?: undefined, payload?: Payload): LeafNode<BuildTreeNode>;\n/** Create a new node with the given ID and payload */\nexport function buildLeaf(id: NodeId, payload?: Payload): LeafNode<ChangeNode>;\n/** Create a new node with the given ID and payload */\nexport function buildLeaf(id?: NodeId, payload?: Payload): LeafNode<BuildTreeNode> | LeafNode<ChangeNode> {\n\tconst node: LeafNode<BuildTreeNode> = {\n\t\tdefinition: SimpleTestTree.definition,\n\t\ttraits: {},\n\t};\n\tsetPropertyIfDefined(id, node, 'identifier');\n\tsetPropertyIfDefined(payload, node, 'payload');\n\treturn node;\n}\n\n/**\n * Generates a leaf {@link ChangeNode}.\n * If no `id` is explicitly provided, one will be generated.\n * @param id - Explicit ID to use as the new node's identifier. If not provided, one will be generated.\n */\nexport function buildLeafInternal(\n\tnodeIdContext: NodeIdContext,\n\tid?: NodeId,\n\tpayload?: Payload\n): LeafNode<TreeNode<BuildNodeInternal, NodeId>> {\n\tconst leaf = buildLeaf(undefined, payload);\n\treturn {\n\t\tdefinition: leaf.definition as Definition,\n\t\tidentifier: id ?? nodeIdContext.generateNodeId(),\n\t\ttraits: {},\n\t};\n}\n\n/** Translate an ID in one context to an ID in another */\nfunction translateId(id: NodeId, from: NodeIdConverter, to: NodeIdConverter): NodeId {\n\treturn to.convertToNodeId(from.convertToStableNodeId(id));\n}\n\nfunction translateTraitLocation(\n\tlabel: TraitLabel,\n\tparentId: NodeId,\n\tfrom: NodeIdConverter,\n\tto: NodeIdConverter\n): TestTraitLocation {\n\treturn {\n\t\tlabel,\n\t\tparent: translateId(parentId, from, to),\n\t\tget stable() {\n\t\t\treturn memoizeGetter(this, 'stable', convertToTraitLocation_0_0_2(this, to));\n\t\t},\n\t\ttranslate: (idManager) => translateTraitLocation(label, parentId, to, idManager),\n\t};\n}\n\nfunction convertToTestNode_0_0_2(node: TestNode, idConverter: NodeIdConverter): TestNode_0_0_2 {\n\t// This is equivalent to calling tryConvertToChangeNode_0_0_2 but that causes lint to stack overflow\n\treturn convertTreeNodes<TestNode, TestNode_0_0_2>(node, (nodeData) =>\n\t\tconvertNodeDataIds(nodeData, (id) => idConverter.convertToStableNodeId(id))\n\t);\n}\n\nfunction convertToTraitLocation_0_0_2(\n\ttraitLocation: TraitLocationInternal,\n\tidConverter: NodeIdConverter\n): TraitLocationInternal_0_0_2 {\n\tconst parent = idConverter.convertToStableNodeId(traitLocation.parent);\n\treturn {\n\t\tlabel: traitLocation.label,\n\t\tparent,\n\t};\n}\n"]}
1
+ {"version":3,"file":"TestNode.js","sourceRoot":"","sources":["../../../src/test/utilities/TestNode.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 { BuildTreeNode } from '../../ChangeTypes';\nimport { memoizeGetter, fail, setPropertyIfDefined, identity } from '../../Common';\nimport { convertTreeNodes } from '../../EditUtilities';\nimport { convertNodeDataIds } from '../../IdConversion';\nimport { Definition, NodeId, OpSpaceNodeId, SessionId, StableNodeId, TraitLabel } from '../../Identifiers';\nimport { initialTree } from '../../InitialTree';\nimport { NodeIdContext, NodeIdConverter, NodeIdNormalizer } from '../../NodeIdUtilities';\nimport {\n\tBuildNodeInternal,\n\tChangeNode,\n\tPayload,\n\tTraitLocationInternal,\n\tTraitLocationInternal_0_0_2,\n\tTraitMap,\n\tTreeNode,\n} from '../../persisted-types';\nimport { RevisionView } from '../../RevisionView';\nimport { TraitLocation } from '../../TreeView';\n\n/** A legacy format of a `TestNode` */\nexport type TestNode_0_0_2 = TreeNode<TestNode_0_0_2, StableNodeId>;\n\n/**\n * A node with no children\n */\nexport type LeafNode<T> = Omit<T, 'traits'> & { traits: Record<string, never> };\n\n/**\n * Test extension of {@link TraitLocation} which can be converted to stable or legacy formats\n */\nexport interface TestTraitLocation extends TraitLocation {\n\tstable: TraitLocationInternal_0_0_2;\n\t/** Translate this location into the equivalent location in another ID context */\n\ttranslate(idConverter: NodeIdConverter): TestTraitLocation;\n}\n\n/**\n * An object containing useful properties for analyzing a node within a test context.\n */\nexport interface TestNode extends TreeNode<TestNode, NodeId> {\n\t/** The label of the trait under which this node resides */\n\ttraitLabel: TraitLabel;\n\t/** The trait location at which this node resides */\n\ttraitLocation: TestTraitLocation;\n\t/** A revision view of this node */\n\tview: RevisionView;\n\t/** A version of this tree with stable IDs */\n\tstable: TestNode_0_0_2;\n\t/** Translate this node's ID into the equivalent ID in another ID context */\n\ttranslateId(idConverter: NodeIdConverter): NodeId;\n\t/** Express this tree as a ChangeNode */\n\ttoChangeNode(): ChangeNode;\n}\n\n/**\n * A small tree of `TestNode`s consisting of a root/parent node, a \"left\" child and a \"right\" child. This is a useful tree for initializing\n * tests as it makes it ergonomic to retrieve various properties of the tree. Note that it only represents the initial state of the tree,\n * it does not update even if the SharedTree that it was the initial state for is mutated.\n */\nexport interface TestTree extends TestNode, NodeIdContext, NodeIdNormalizer<OpSpaceNodeId> {\n\t/** The left child node */\n\tleft: TestNode;\n\t/** The right child node */\n\tright: TestNode;\n\t/** Create an arbitrary unparented node with the given payload, if specified */\n\tbuildLeaf(id?: undefined, payload?: Payload): LeafNode<BuildTreeNode>;\n\t/** Create an arbitrary unparented node with the given identifier and payload, if specified */\n\tbuildLeaf(id: NodeId, payload?: Payload): LeafNode<ChangeNode>;\n\t/**\n\t * Generates a leaf node for use in internal build changes.\n\t * If no `id` is explicitly provided, one will be generated.\n\t * @param id - Explicit ID to use as the new node's identifier. If not provided, one will be generated.\n\t */\n\tbuildLeafInternal(id?: NodeId, payload?: Payload): LeafNode<TreeNode<BuildNodeInternal, NodeId>>;\n}\n\n/**\n * A TestTree for general use within the shared-tree package. The nodes in every `SimpleTestTree` will have unique identifiers - i.e. two\n * different instances of `SimpleTestTree` are never equivalent.\n */\nexport class SimpleTestTree implements TestTree {\n\tpublic static readonly definition = 'node' as Definition;\n\tpublic static readonly traitLabel = 'e276f382-fa99-49a1-ae81-42001791c733' as TraitLabel;\n\tpublic static readonly leftTraitLabel = 'left' as TraitLabel;\n\tpublic static readonly rightTraitLabel = 'right' as TraitLabel;\n\n\tprivate readonly root: TestNode;\n\tpublic readonly left: TestNode;\n\tpublic readonly right: TestNode;\n\tpublic readonly expensiveValidation;\n\n\tpublic constructor(\n\t\tprivate readonly nodeIdContext: NodeIdContext,\n\t\tprivate readonly nodeIdNormalizer: NodeIdNormalizer<OpSpaceNodeId>,\n\t\texpensiveValidation = true\n\t) {\n\t\tconst leftIdentifier = nodeIdContext.generateNodeId();\n\t\tconst rightIdentifier = nodeIdContext.generateNodeId();\n\t\tconst rootIdentifier = nodeIdContext.generateNodeId();\n\t\tthis.expensiveValidation = expensiveValidation;\n\t\tthis.left = {\n\t\t\tdefinition: SimpleTestTree.definition,\n\t\t\tidentifier: leftIdentifier,\n\t\t\ttraits: {},\n\t\t\ttraitLabel: SimpleTestTree.leftTraitLabel,\n\t\t\ttraitLocation: {\n\t\t\t\tparent: rootIdentifier,\n\t\t\t\tlabel: SimpleTestTree.leftTraitLabel,\n\t\t\t\tget stable() {\n\t\t\t\t\treturn memoizeGetter(this, 'stable', convertToTraitLocation_0_0_2(this, nodeIdContext));\n\t\t\t\t},\n\t\t\t\ttranslate: (idConverter: NodeIdConverter) =>\n\t\t\t\t\ttranslateTraitLocation(SimpleTestTree.leftTraitLabel, rootIdentifier, nodeIdContext, idConverter),\n\t\t\t},\n\t\t\tget view() {\n\t\t\t\treturn memoizeGetter(this, 'view', RevisionView.fromTree(this, expensiveValidation));\n\t\t\t},\n\t\t\tget stable() {\n\t\t\t\treturn memoizeGetter(this, 'stable', convertToTestNode_0_0_2(this, nodeIdContext));\n\t\t\t},\n\t\t\ttranslateId: (idConverter: NodeIdConverter) => translateId(leftIdentifier, nodeIdContext, idConverter),\n\t\t\ttoChangeNode: () =>\n\t\t\t\tconvertTreeNodes<ChangeNode, ChangeNode>(this.left, (node) => convertNodeDataIds(node, identity)),\n\t\t};\n\t\tthis.right = {\n\t\t\tdefinition: SimpleTestTree.definition,\n\t\t\tidentifier: rightIdentifier,\n\t\t\ttraits: {},\n\t\t\ttraitLabel: SimpleTestTree.rightTraitLabel,\n\t\t\ttraitLocation: {\n\t\t\t\tparent: rootIdentifier,\n\t\t\t\tlabel: SimpleTestTree.rightTraitLabel,\n\t\t\t\tget stable() {\n\t\t\t\t\treturn memoizeGetter(this, 'stable', convertToTraitLocation_0_0_2(this, nodeIdContext));\n\t\t\t\t},\n\t\t\t\ttranslate: (idConverter: NodeIdConverter) =>\n\t\t\t\t\ttranslateTraitLocation(SimpleTestTree.rightTraitLabel, rootIdentifier, nodeIdContext, idConverter),\n\t\t\t},\n\t\t\tget view() {\n\t\t\t\treturn memoizeGetter(this, 'view', RevisionView.fromTree(this, expensiveValidation));\n\t\t\t},\n\t\t\tget stable() {\n\t\t\t\treturn memoizeGetter(this, 'stable', convertToTestNode_0_0_2(this, nodeIdContext));\n\t\t\t},\n\t\t\ttranslateId: (idConverter: NodeIdConverter) => translateId(rightIdentifier, nodeIdContext, idConverter),\n\t\t\ttoChangeNode: () =>\n\t\t\t\tconvertTreeNodes<ChangeNode, ChangeNode>(this.right, (node) => convertNodeDataIds(node, identity)),\n\t\t};\n\t\tconst rootParent = nodeIdContext.convertToNodeId(initialTree.identifier);\n\t\tthis.root = {\n\t\t\tdefinition: SimpleTestTree.definition,\n\t\t\tidentifier: rootIdentifier,\n\t\t\ttraits: {\n\t\t\t\t[SimpleTestTree.leftTraitLabel]: [this.left],\n\t\t\t\t[SimpleTestTree.rightTraitLabel]: [this.right],\n\t\t\t},\n\t\t\ttraitLabel: SimpleTestTree.traitLabel,\n\t\t\ttraitLocation: {\n\t\t\t\tlabel: SimpleTestTree.traitLabel,\n\t\t\t\tparent: rootParent,\n\t\t\t\tget stable() {\n\t\t\t\t\treturn memoizeGetter(this, 'stable', convertToTraitLocation_0_0_2(this, nodeIdContext));\n\t\t\t\t},\n\t\t\t\ttranslate: (idConverter: NodeIdConverter) =>\n\t\t\t\t\ttranslateTraitLocation(SimpleTestTree.traitLabel, rootParent, nodeIdContext, idConverter),\n\t\t\t},\n\t\t\tget view() {\n\t\t\t\treturn memoizeGetter(this, 'view', RevisionView.fromTree(this, expensiveValidation));\n\t\t\t},\n\t\t\tget stable() {\n\t\t\t\treturn memoizeGetter(this, 'stable', convertToTestNode_0_0_2(this, nodeIdContext));\n\t\t\t},\n\t\t\ttranslateId: (idConverter: NodeIdConverter) => translateId(rootIdentifier, nodeIdContext, idConverter),\n\t\t\ttoChangeNode: () =>\n\t\t\t\tconvertTreeNodes<ChangeNode, ChangeNode>(this.root, (node) => convertNodeDataIds(node, identity)),\n\t\t};\n\t}\n\n\tpublic get definition(): Definition {\n\t\treturn this.root.definition;\n\t}\n\n\tpublic get identifier(): NodeId {\n\t\treturn this.root.identifier;\n\t}\n\n\tpublic get traits(): TraitMap<TestNode> {\n\t\treturn this.root.traits;\n\t}\n\n\tpublic get traitLabel(): TraitLabel {\n\t\treturn this.root.traitLabel;\n\t}\n\n\tpublic get traitLocation(): TestTraitLocation {\n\t\treturn this.root.traitLocation;\n\t}\n\n\tpublic get view(): RevisionView {\n\t\treturn this.root.view;\n\t}\n\n\tpublic get stable() {\n\t\treturn this.root.stable;\n\t}\n\n\tpublic translateId(idConverter: NodeIdConverter): NodeId {\n\t\treturn this.root.translateId(idConverter);\n\t}\n\n\tpublic toChangeNode(): ChangeNode {\n\t\treturn convertTreeNodes<ChangeNode, ChangeNode>(this, (node) => convertNodeDataIds(node, identity));\n\t}\n\n\tpublic buildLeaf(id?: undefined, payload?: Payload): LeafNode<BuildTreeNode>;\n\n\tpublic buildLeaf(id: NodeId, payload?: Payload): LeafNode<ChangeNode>;\n\n\tpublic buildLeaf(id?: NodeId, payload?: Payload): LeafNode<BuildTreeNode> | LeafNode<ChangeNode> {\n\t\treturn id === undefined ? buildLeaf(undefined, payload) : buildLeaf(id, payload);\n\t}\n\n\tpublic buildLeafInternal(id?: NodeId, payload?: Payload): LeafNode<TreeNode<BuildNodeInternal, NodeId>> {\n\t\treturn buildLeafInternal(this, id, payload);\n\t}\n\n\tpublic generateNodeId(override?: string): NodeId {\n\t\treturn this.nodeIdContext.generateNodeId(override);\n\t}\n\n\tpublic convertToStableNodeId(id: NodeId): StableNodeId {\n\t\treturn this.nodeIdContext.convertToStableNodeId(id);\n\t}\n\n\tpublic tryConvertToStableNodeId(id: NodeId): StableNodeId | undefined {\n\t\treturn this.nodeIdContext.tryConvertToStableNodeId(id);\n\t}\n\n\tpublic convertToNodeId(id: StableNodeId): NodeId {\n\t\treturn this.nodeIdContext.convertToNodeId(id);\n\t}\n\n\tpublic tryConvertToNodeId(id: StableNodeId): NodeId | undefined {\n\t\treturn this.nodeIdContext.tryConvertToNodeId(id);\n\t}\n\n\tget localSessionId(): SessionId {\n\t\treturn this.nodeIdNormalizer.localSessionId;\n\t}\n\n\tnormalizeToOpSpace(id: NodeId): OpSpaceNodeId {\n\t\treturn this.nodeIdNormalizer.normalizeToOpSpace(id);\n\t}\n\tnormalizeToSessionSpace(id: OpSpaceNodeId, sessionId: SessionId): NodeId {\n\t\treturn this.nodeIdNormalizer.normalizeToSessionSpace(id, sessionId);\n\t}\n}\n\n/** A TestTree which resets before each test */\nexport class RefreshingTestTree<T extends TestTree> implements TestTree {\n\tprivate _testTree?: T;\n\n\tpublic constructor(createTestTree: () => T, fn?: (testTree: T) => void) {\n\t\tbeforeEach(() => {\n\t\t\tthis._testTree = createTestTree();\n\t\t\tfn?.(this._testTree);\n\t\t});\n\t\tafterEach(() => {\n\t\t\tthis._testTree = undefined;\n\t\t});\n\t}\n\n\tprivate get testTree(): T {\n\t\treturn (\n\t\t\tthis._testTree ??\n\t\t\tfail(\n\t\t\t\t'RefreshingTestTree should be created within a describe() block and should only be read within it() blocks'\n\t\t\t)\n\t\t);\n\t}\n\n\tpublic get left(): TestNode {\n\t\treturn this.testTree.left;\n\t}\n\n\tpublic get right(): TestNode {\n\t\treturn this.testTree.right;\n\t}\n\n\tpublic get definition(): Definition {\n\t\treturn this.testTree.definition;\n\t}\n\n\tpublic get identifier(): NodeId {\n\t\treturn this.testTree.identifier;\n\t}\n\n\tpublic get traits(): TraitMap<TestNode> {\n\t\treturn this.testTree.traits;\n\t}\n\n\tpublic get traitLabel(): TraitLabel {\n\t\treturn this.testTree.traitLabel;\n\t}\n\n\tpublic get traitLocation(): TestTraitLocation {\n\t\treturn this.testTree.traitLocation;\n\t}\n\n\tpublic get view(): RevisionView {\n\t\treturn this.testTree.view;\n\t}\n\n\tpublic get stable(): TestNode_0_0_2 {\n\t\treturn this.testTree.stable;\n\t}\n\n\tpublic translateId(idConverter: NodeIdConverter): NodeId {\n\t\treturn this.testTree.translateId(idConverter);\n\t}\n\n\tpublic toChangeNode(): ChangeNode {\n\t\treturn convertTreeNodes<ChangeNode, ChangeNode>(this.testTree, (node) => convertNodeDataIds(node, identity));\n\t}\n\n\tpublic buildLeaf(id?: undefined, payload?: Payload): LeafNode<BuildTreeNode>;\n\tpublic buildLeaf(id: NodeId, payload?: Payload): LeafNode<ChangeNode>;\n\tpublic buildLeaf(id?: NodeId, payload?: Payload): LeafNode<BuildTreeNode> | LeafNode<ChangeNode> {\n\t\treturn id === undefined ? this.testTree.buildLeaf(undefined, payload) : this.testTree.buildLeaf(id, payload);\n\t}\n\n\tpublic buildLeafInternal(id?: NodeId, payload?: Payload): LeafNode<TreeNode<BuildNodeInternal, NodeId>> {\n\t\treturn this.testTree.buildLeafInternal(id, payload);\n\t}\n\n\tpublic generateNodeId(override?: string): NodeId {\n\t\treturn this.testTree.generateNodeId(override);\n\t}\n\n\tconvertToStableNodeId(id: NodeId): StableNodeId {\n\t\treturn this.testTree.convertToStableNodeId(id);\n\t}\n\n\ttryConvertToStableNodeId(id: NodeId): StableNodeId | undefined {\n\t\treturn this.testTree.convertToStableNodeId(id);\n\t}\n\n\tconvertToNodeId(id: StableNodeId): NodeId {\n\t\treturn this.testTree.convertToNodeId(id);\n\t}\n\n\ttryConvertToNodeId(id: StableNodeId): NodeId | undefined {\n\t\treturn this.testTree.tryConvertToNodeId(id);\n\t}\n\n\tget localSessionId(): SessionId {\n\t\treturn this.testTree.localSessionId;\n\t}\n\n\tnormalizeToOpSpace(id: NodeId): OpSpaceNodeId {\n\t\treturn this.testTree.normalizeToOpSpace(id);\n\t}\n\n\tnormalizeToSessionSpace(id: OpSpaceNodeId, sessionId: SessionId): NodeId {\n\t\treturn this.testTree.normalizeToSessionSpace(id, sessionId);\n\t}\n}\n\n/** Create a new node with an automatically generated ID and the given payload */\nexport function buildLeaf(id?: undefined, payload?: Payload): LeafNode<BuildTreeNode>;\n/** Create a new node with the given ID and payload */\nexport function buildLeaf(id: NodeId, payload?: Payload): LeafNode<ChangeNode>;\n/** Create a new node with the given ID and payload */\nexport function buildLeaf(id?: NodeId, payload?: Payload): LeafNode<BuildTreeNode> | LeafNode<ChangeNode> {\n\tconst node: LeafNode<BuildTreeNode> = {\n\t\tdefinition: SimpleTestTree.definition,\n\t\ttraits: {},\n\t};\n\tsetPropertyIfDefined(id, node, 'identifier');\n\tsetPropertyIfDefined(payload, node, 'payload');\n\treturn node;\n}\n\n/**\n * Generates a leaf {@link ChangeNode}.\n * If no `id` is explicitly provided, one will be generated.\n * @param id - Explicit ID to use as the new node's identifier. If not provided, one will be generated.\n */\nexport function buildLeafInternal(\n\tnodeIdContext: NodeIdContext,\n\tid?: NodeId,\n\tpayload?: Payload\n): LeafNode<TreeNode<BuildNodeInternal, NodeId>> {\n\tconst leaf = buildLeaf(undefined, payload);\n\treturn {\n\t\tdefinition: leaf.definition as Definition,\n\t\tidentifier: id ?? nodeIdContext.generateNodeId(),\n\t\ttraits: {},\n\t};\n}\n\n/** Translate an ID in one context to an ID in another */\nfunction translateId(id: NodeId, from: NodeIdConverter, to: NodeIdConverter): NodeId {\n\treturn to.convertToNodeId(from.convertToStableNodeId(id));\n}\n\nfunction translateTraitLocation(\n\tlabel: TraitLabel,\n\tparentId: NodeId,\n\tfrom: NodeIdConverter,\n\tto: NodeIdConverter\n): TestTraitLocation {\n\treturn {\n\t\tlabel,\n\t\tparent: translateId(parentId, from, to),\n\t\tget stable() {\n\t\t\treturn memoizeGetter(this, 'stable', convertToTraitLocation_0_0_2(this, to));\n\t\t},\n\t\ttranslate: (idManager) => translateTraitLocation(label, parentId, to, idManager),\n\t};\n}\n\nfunction convertToTestNode_0_0_2(node: TestNode, idConverter: NodeIdConverter): TestNode_0_0_2 {\n\t// This is equivalent to calling tryConvertToChangeNode_0_0_2 but that causes lint to stack overflow\n\treturn convertTreeNodes<TestNode, TestNode_0_0_2>(node, (nodeData) =>\n\t\tconvertNodeDataIds(nodeData, (id) => idConverter.convertToStableNodeId(id))\n\t);\n}\n\nfunction convertToTraitLocation_0_0_2(\n\ttraitLocation: TraitLocationInternal,\n\tidConverter: NodeIdConverter\n): TraitLocationInternal_0_0_2 {\n\tconst parent = idConverter.convertToStableNodeId(traitLocation.parent);\n\treturn {\n\t\tlabel: traitLocation.label,\n\t\tparent,\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TestUtilities.d.ts","sourceRoot":"","sources":["../../../src/test/utilities/TestUtilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TestUtilities.d.ts","sourceRoot":"","sources":["../../../src/test/utilities/TestUtilities.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  import { resolve } from 'path';
6
6
  import { v5 as uuidv5 } from 'uuid';
7
7
  import { expect } from 'chai';
8
- import { SummaryCollection } from '@fluidframework/container-runtime';
8
+ import { SummaryCollection, DefaultSummaryConfiguration } from '@fluidframework/container-runtime';
9
9
  import { Loader, waitContainerToCatchUp } from '@fluidframework/container-loader';
10
10
  import { requestFluidObject } from '@fluidframework/runtime-utils';
11
11
  import { MockContainerRuntimeFactory, MockFluidDataStoreRuntime, MockStorage, } from '@fluidframework/test-runtime-utils';
@@ -52,16 +52,15 @@ export function setUpTestSharedTree(options = { localMode: true }) {
52
52
  }
53
53
  // Enable expensiveValidation
54
54
  let factory;
55
- // TODO:#461: Pass attribution ID to factory
56
55
  if (writeFormat === WriteFormat.v0_0_2) {
57
- factory = SharedTree.getFactory(writeFormat, (summarizeHistory !== null && summarizeHistory !== void 0 ? summarizeHistory : true) ? { uploadEditChunks: false } : false);
56
+ factory = SharedTree.getFactory(writeFormat, { summarizeHistory: summarizeHistory !== null && summarizeHistory !== void 0 ? summarizeHistory : true });
58
57
  }
59
58
  else {
60
59
  const options = {
61
60
  summarizeHistory: (summarizeHistory !== null && summarizeHistory !== void 0 ? summarizeHistory : true) ? { uploadEditChunks: true } : false,
62
61
  attributionId,
63
62
  };
64
- factory = SharedTree.getFactory(writeFormat !== null && writeFormat !== void 0 ? writeFormat : WriteFormat.v0_1_1, options.summarizeHistory);
63
+ factory = SharedTree.getFactory(writeFormat !== null && writeFormat !== void 0 ? writeFormat : WriteFormat.v0_1_1, options);
65
64
  }
66
65
  const tree = factory.create(componentRuntime, id === undefined ? 'testSharedTree' : id);
67
66
  if (options.allowInvalid === undefined || !options.allowInvalid) {
@@ -117,25 +116,26 @@ export async function setUpLocalServerTestSharedTree(options) {
117
116
  const { blobs, headers, id, initialTree, testObjectProvider, setupEditId, summarizeHistory, writeFormat, uploadEditChunks, attributionId, } = options;
118
117
  const treeId = id !== null && id !== void 0 ? id : 'test';
119
118
  let factory;
120
- // TODO:#461: Pass attribution ID to factory
121
119
  if (writeFormat === WriteFormat.v0_0_2) {
122
- factory = SharedTree.getFactory(writeFormat, (summarizeHistory !== null && summarizeHistory !== void 0 ? summarizeHistory : true) ? { uploadEditChunks: false } : false);
120
+ factory = SharedTree.getFactory(writeFormat, { summarizeHistory: summarizeHistory !== null && summarizeHistory !== void 0 ? summarizeHistory : true });
123
121
  }
124
122
  else {
125
123
  const options = {
126
124
  summarizeHistory: (summarizeHistory !== null && summarizeHistory !== void 0 ? summarizeHistory : true) ? { uploadEditChunks: uploadEditChunks !== null && uploadEditChunks !== void 0 ? uploadEditChunks : true } : false,
127
125
  attributionId,
128
126
  };
129
- factory = SharedTree.getFactory(writeFormat !== null && writeFormat !== void 0 ? writeFormat : WriteFormat.v0_1_1, options.summarizeHistory);
127
+ factory = SharedTree.getFactory(writeFormat !== null && writeFormat !== void 0 ? writeFormat : WriteFormat.v0_1_1, options);
130
128
  }
131
129
  const registry = [[treeId, factory]];
132
130
  const innerRequestHandler = async (request, runtime) => runtime.IFluidHandleContext.resolveHandle(request);
133
131
  const runtimeFactory = () => new TestContainerRuntimeFactory(TestDataStoreType, new TestFluidObjectFactory(registry), {
132
+ enableOfflineLoad: true,
134
133
  summaryOptions: {
135
- summaryConfigOverrides: {
136
- idleTime: 1000, // Current default idleTime is 15000 which will cause some SharedTree tests to timeout.
137
- },
138
- initialSummarizerDelayMs: 0,
134
+ summaryConfigOverrides: Object.assign(Object.assign({}, DefaultSummaryConfiguration), {
135
+ idleTime: 1000,
136
+ maxTime: 1000 * 12,
137
+ initialSummarizerDelayMs: 0,
138
+ }),
139
139
  },
140
140
  }, [innerRequestHandler]);
141
141
  const defaultCodeDetails = {