@fluid-experimental/property-changeset 0.58.1001 → 0.58.2001

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 (100) hide show
  1. package/dist/changeset.d.ts.map +1 -1
  2. package/dist/changeset.js +1 -18
  3. package/dist/changeset.js.map +1 -1
  4. package/dist/changeset_operations/array.d.ts.map +1 -1
  5. package/dist/changeset_operations/array.js +0 -3
  6. package/dist/changeset_operations/array.js.map +1 -1
  7. package/dist/changeset_operations/arrayChangesetIterator.d.ts +4 -4
  8. package/dist/changeset_operations/arrayChangesetIterator.d.ts.map +1 -1
  9. package/dist/changeset_operations/arrayChangesetIterator.js +1 -5
  10. package/dist/changeset_operations/arrayChangesetIterator.js.map +1 -1
  11. package/dist/changeset_operations/changesetConflictTypes.d.ts.map +1 -1
  12. package/dist/changeset_operations/changesetConflictTypes.js +0 -1
  13. package/dist/changeset_operations/changesetConflictTypes.js.map +1 -1
  14. package/dist/changeset_operations/indexedCollection.d.ts.map +1 -1
  15. package/dist/changeset_operations/indexedCollection.js +1 -3
  16. package/dist/changeset_operations/indexedCollection.js.map +1 -1
  17. package/dist/changeset_operations/isEmptyChangeset.js.map +1 -1
  18. package/dist/changeset_operations/operationTypes.js +0 -1
  19. package/dist/changeset_operations/operationTypes.js.map +1 -1
  20. package/dist/helpers/typeidHelper.d.ts.map +1 -1
  21. package/dist/helpers/typeidHelper.js +4 -5
  22. package/dist/helpers/typeidHelper.js.map +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/pathHelper.d.ts +2 -2
  27. package/dist/pathHelper.d.ts.map +1 -1
  28. package/dist/pathHelper.js +0 -2
  29. package/dist/pathHelper.js.map +1 -1
  30. package/dist/rebase.js +0 -1
  31. package/dist/rebase.js.map +1 -1
  32. package/dist/templateValidator.d.ts +3 -3
  33. package/dist/templateValidator.d.ts.map +1 -1
  34. package/dist/templateValidator.js +10 -12
  35. package/dist/templateValidator.js.map +1 -1
  36. package/dist/test/array.spec.js +56 -56
  37. package/dist/test/array.spec.js.map +1 -1
  38. package/dist/test/pathHelper.spec.js +14 -14
  39. package/dist/test/pathHelper.spec.js.map +1 -1
  40. package/dist/test/schemaValidator.js +2 -8
  41. package/dist/test/schemaValidator.js.map +1 -1
  42. package/dist/test/schemas/badBothPropertiesAndTypeid.js +3 -3
  43. package/dist/test/schemas/badBothPropertiesAndTypeid.js.map +1 -1
  44. package/dist/test/schemas/badInvalidSemverInTypeid.js +9 -9
  45. package/dist/test/schemas/badInvalidSemverInTypeid.js.map +1 -1
  46. package/dist/test/schemas/badMissingSemverInTypeid.js +9 -9
  47. package/dist/test/schemas/badMissingSemverInTypeid.js.map +1 -1
  48. package/dist/test/schemas/badNestedProperties.js +9 -9
  49. package/dist/test/schemas/badNestedProperties.js.map +1 -1
  50. package/dist/test/schemas/badPrimitiveTypeid.js +5 -5
  51. package/dist/test/schemas/badPrimitiveTypeid.js.map +1 -1
  52. package/dist/test/schemas/badVersionedTypeid.js +9 -9
  53. package/dist/test/schemas/badVersionedTypeid.js.map +1 -1
  54. package/dist/test/schemas/goodColorPalette.js +2 -2
  55. package/dist/test/schemas/goodColorPalette.js.map +1 -1
  56. package/dist/test/schemas/goodDraftAsVersion.js +2 -2
  57. package/dist/test/schemas/goodDraftAsVersion.js.map +1 -1
  58. package/dist/test/schemas/goodPointId.js +9 -9
  59. package/dist/test/schemas/goodPointId.js.map +1 -1
  60. package/dist/test/schemas/goodReferenceAndRegular.js +2 -2
  61. package/dist/test/schemas/goodReferenceAndRegular.js.map +1 -1
  62. package/dist/test/schemas/goodReservedTypes.js +4 -4
  63. package/dist/test/schemas/goodReservedTypes.js.map +1 -1
  64. package/dist/test/schemas/goodUIBorder.js +7 -7
  65. package/dist/test/schemas/goodUIBorder.js.map +1 -1
  66. package/dist/test/tsconfig.tsbuildinfo +23 -23
  67. package/dist/test/validator/templateValidator.spec.js +27 -27
  68. package/dist/test/validator/templateValidator.spec.js.map +1 -1
  69. package/dist/test/validator/typeidHelper.spec.js +2 -2
  70. package/dist/test/validator/typeidHelper.spec.js.map +1 -1
  71. package/dist/utils.d.ts +1 -1
  72. package/dist/utils.d.ts.map +1 -1
  73. package/dist/utils.js +2 -4
  74. package/dist/utils.js.map +1 -1
  75. package/lib/changeset.js +1 -18
  76. package/lib/changeset.js.map +1 -1
  77. package/lib/changeset_operations/array.js +0 -3
  78. package/lib/changeset_operations/array.js.map +1 -1
  79. package/lib/changeset_operations/arrayChangesetIterator.js +1 -5
  80. package/lib/changeset_operations/arrayChangesetIterator.js.map +1 -1
  81. package/lib/changeset_operations/changesetConflictTypes.js +0 -1
  82. package/lib/changeset_operations/changesetConflictTypes.js.map +1 -1
  83. package/lib/changeset_operations/indexedCollection.js +1 -3
  84. package/lib/changeset_operations/indexedCollection.js.map +1 -1
  85. package/lib/changeset_operations/isEmptyChangeset.js.map +1 -1
  86. package/lib/changeset_operations/operationTypes.js +0 -1
  87. package/lib/changeset_operations/operationTypes.js.map +1 -1
  88. package/lib/helpers/typeidHelper.js +4 -5
  89. package/lib/helpers/typeidHelper.js.map +1 -1
  90. package/lib/index.js +1 -1
  91. package/lib/index.js.map +1 -1
  92. package/lib/pathHelper.js +0 -2
  93. package/lib/pathHelper.js.map +1 -1
  94. package/lib/rebase.js +0 -1
  95. package/lib/rebase.js.map +1 -1
  96. package/lib/templateValidator.js +10 -12
  97. package/lib/templateValidator.js.map +1 -1
  98. package/lib/utils.js +2 -4
  99. package/lib/utils.js.map +1 -1
  100. package/package.json +8 -4
@@ -1 +1 @@
1
- {"version":3,"file":"array.spec.js","sourceRoot":"","sources":["../../src/test/array.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 no-unused-expressions */\n/**\n * @fileoverview Tests for the array changeset operations\n */\nimport isEmpty from \"lodash/isEmpty\";\nimport isNumber from \"lodash/isNumber\";\nimport {copy as cloneDeep} from \"fastest-json-copy\";\nimport range from \"lodash/range\";\n\n\nimport { ChangeSet, SerializedChangeSet } from \"../changeset\";\nimport { expect, assert } from \"chai\";\n\ndescribe(\"Array Operations\", function() {\n let guidCounter = 1;\n\n const generateNamedEntities = (count, offsets?, type?) => range(count).map((i) => {\n const offsetShift = offsets !== undefined ? offsets.shift() : undefined;\n const id = offsetShift !== undefined ? guidCounter - offsetShift : guidCounter++;\n if (type === undefined) {\n return {\n String: {\n guid: `00000000-0000-0000-0000-${(`000000000000${id}`).substr(-12)}`,\n },\n typeid: \"test:namedEntry-1.0.0\",\n };\n } else if (type === \"number\") {\n return id;\n }\n });\n\n function createArrayCS(arrayOperations, baseOperation?, type?): SerializedChangeSet {\n baseOperation = baseOperation || \"modify\";\n type = type || \"array<test:namedEntry-1.0.0>\";\n return {\n [baseOperation]: {\n [type]: {\n array: arrayOperations,\n },\n },\n };\n }\n\n function getArrayCS(CS): SerializedChangeSet {\n if (CS instanceof ChangeSet) {\n CS = CS.getSerializedChangeSet();\n }\n if (isEmpty(CS)) {\n return {};\n }\n const first = (x) => Object.values(x)[0];\n return first(first(first(CS)));\n }\n\n it(\"Avoid merging of adjacent remove operations with an insert in between\", () => {\n // This test creates a condition where there are two adjacent removes, with an insert\n // in between. Those two removes must not be merged when applying the two changesets\n // as otherwise overlapping ranges would be created in the result, which are not allowed\n // by the spec\n const op1 = createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n remove: [\n [1, generateNamedEntities(1)],\n ],\n });\n\n const op2 = createArrayCS({\n remove: [\n [0, generateNamedEntities(2)],\n ],\n });\n\n const result = new ChangeSet(op1);\n result.applyChangeSet(op2);\n\n // We expect the two ranges to be non overlapping\n const arrayCS = result.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n const removeStart = arrayCS.remove[0][0];\n const removeEnd = arrayCS.remove[0][0] + arrayCS.remove[0][1].length;\n const insertStart = arrayCS.insert[0][0];\n\n expect(insertStart <= removeStart || insertStart >= removeEnd).to.be.true;\n });\n\n it(\"Rebasing with a base changeset containing adjacent removes and inserts\", () => {\n const base = createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n remove: [\n [0, generateNamedEntities(1)],\n ],\n });\n\n const rebaseCS = createArrayCS({\n insert: [\n [0, generateNamedEntities(1)],\n ],\n });\n\n const conflicts = [];\n const CS = new ChangeSet(base);\n CS._rebaseChangeSet(rebaseCS, conflicts);\n\n // We expect the rebase to keep the insert at position 0. The base changeSet contains an\n // insert at position 3. There is also a remove within the same CS, which causes both\n // inserts to be with respect to the same position in the resulting array, but we have\n // to keep the order of the inserts, since we can only guarantee the distributivity of\n // the rebase this way. The CS above could have been generated by a combination of a\n // I(1,3) followed by a R(0,1). If the rebase CS would have been rebased separately\n // with respect to those two CS, it would have remained a I(0,3).\n expect((rebaseCS as SerializedChangeSet).modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(0);\n });\n\n for (const i of [0, 3]) {\n it(`Rebasing an insert behind a remove insert base changeset with insert position ${i}`, () => {\n const base = createArrayCS({\n insert: [\n [i, generateNamedEntities(3)],\n ],\n remove: [\n [0, generateNamedEntities(3)],\n ],\n });\n const rebaseCS = createArrayCS({\n insert: [\n [0, generateNamedEntities(1)],\n ],\n });\n\n const originalRebaseCS = cloneDeep(rebaseCS);\n const conflicts = [];\n const applyAfterMetaInformation = new Map();\n const CS = new ChangeSet(base);\n CS._rebaseChangeSet(rebaseCS, conflicts, { applyAfterMetaInformation });\n\n // Whether the insert in the rebaseCS is moved depends on the insert in the base CS. If the base CS\n // is the result of an I(3, 3) followed by a R(0,3), it would not be moved since the insert in the baseCS\n // is behind the insert in the rebase CS. Otherwise, if it is an I(0, 0) our rebase rules would move it\n // to index 3 behind the other insert\n expect(rebaseCS.modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(i === 0 ? 3 : 0);\n\n const combinedCS = new ChangeSet(originalRebaseCS);\n combinedCS.toInverseChangeSet();\n combinedCS.applyChangeSet(base);\n combinedCS.applyChangeSet(rebaseCS, { applyAfterMetaInformation });\n\n const finalCs = combinedCS.getSerializedChangeSet();\n // The insert above should cancel out. If the original insert was at position 0, we moved the rebased\n // insert behind the original insert. This means the original insert should now be at position 0,\n // before the insert that canceled out. Otherwise, it should be at position 4 (behind the removed\n // range, as it was in the original CS, but now shifted by 1).\n expect(finalCs.modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(i === 0 ? 0 : 4);\n });\n }\n\n it(\"Inserts should happen at the beginning of a remove range\", () => {\n const op1 = createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n remove: [\n [1, generateNamedEntities(1)],\n ],\n });\n const op2 = createArrayCS({\n insert: [\n [4, generateNamedEntities(2)],\n ],\n });\n\n const combinedCS = new ChangeSet(op1);\n combinedCS.applyChangeSet(op2);\n\n const arrayCS = combinedCS.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n expect(arrayCS.insert.length).to.equal(1);\n });\n\n function testRebasedApplies(localBranchChangeSet, baseChangeSet, baseState) {\n const conflicts = [];\n const rebaseMetaInformation = new Map();\n const originalRebaseChangeSet = cloneDeep(localBranchChangeSet);\n const deltaChangeSet = new ChangeSet(cloneDeep(localBranchChangeSet));\n deltaChangeSet.toInverseChangeSet();\n\n const rebaseChangeSet = cloneDeep(localBranchChangeSet);\n new ChangeSet(baseChangeSet)._rebaseChangeSet(rebaseChangeSet, conflicts, {\n applyAfterMetaInformation: rebaseMetaInformation,\n });\n\n deltaChangeSet.applyChangeSet(baseChangeSet);\n validateChangeSet(deltaChangeSet);\n const copiedRebaseChangeSet = cloneDeep(rebaseChangeSet);\n deltaChangeSet.applyChangeSet(rebaseChangeSet, {\n applyAfterMetaInformation: rebaseMetaInformation,\n });\n validateChangeSet(deltaChangeSet);\n\n // This path first walks onto the local branch (applying the original changeset from the local branch)\n // and then the delta to the new tip (going back one step, and then forward again)\n const deltaPath = new ChangeSet(cloneDeep(baseState));\n deltaPath.applyChangeSet(originalRebaseChangeSet);\n deltaPath.applyChangeSet(deltaChangeSet);\n\n // This computes the same state, but not starting from the local branch, but from the base commit itself\n const directPath = new ChangeSet(cloneDeep(baseState));\n directPath.applyChangeSet(baseChangeSet);\n directPath.applyChangeSet(rebaseChangeSet);\n expect(deltaPath.getSerializedChangeSet()).to.deep.equal(directPath.getSerializedChangeSet());\n\n // Make sure, the rebase changeset was not modified in the apply operation above\n expect(copiedRebaseChangeSet).to.deep.equal(rebaseChangeSet);\n\n return deltaChangeSet;\n }\n\n function runTestApplyingReverseAndRebasedChangesetForIndependentModifications(baseInsertPositions,\n rebasedInsertPositions,\n baseOperation = \"insert\",\n baseCount = 1) {\n\n const createInserts = (positions, count) => positions.map((x) => [\n x,\n generateNamedEntities(count),\n ]);\n\n const baseChangeSet = createArrayCS({\n [baseOperation]: createInserts(baseInsertPositions, baseCount),\n });\n\n const localBranchChangeSet = createArrayCS({\n insert: createInserts(rebasedInsertPositions, 1),\n });\n\n // Test whether the created changeset computes the same result as applying\n // the base and rebase changeset to the base state\n const baseState = createArrayCS({\n insert: createInserts([0], 20),\n });\n const deltaChangeSet = testRebasedApplies(localBranchChangeSet, baseChangeSet, baseState);\n\n // Make sure the delta changeset does not contain any other operations than the inserts from the base state\n const arrayChangeSet = deltaChangeSet.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n\n expect(arrayChangeSet[baseOperation].length).to.equal(baseInsertPositions.length);\n for (let i = 0; i < baseInsertPositions.length; i++) {\n expect(arrayChangeSet[baseOperation][i][1].length).to.equal(baseCount);\n }\n expect(arrayChangeSet).to.not.have.property(baseOperation === \"insert\" ? \"remove\" : \"insert\");\n }\n\n describe(\"Rebase test applying the reverse, base and then rebased changeset\", () => {\n for (const basePositions of [\n [0], [1], [2], [5], [13], [0, 2], [0, 5], [0, 5, 13],\n ]) {\n for (const rebasePositions of [\n [0], [1], [5, 9], [5, 9, 12],\n ]) {\n it(`with base positions ${basePositions} and rebase positions ${rebasePositions}`, () => {\n runTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n basePositions,\n rebasePositions,\n );\n });\n }\n }\n });\n\n describe(\"Rebase test applying the reverse, base and then rebased changeset2\", () => {\n it(`with removes in the base`, () => {\n runTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n [0], [2],\n \"remove\",\n 2,\n );\n });\n });\n\n function testRebaseDistributivity(baseChangesets, rebaseChangeSet, base) {\n // First rebase with each CS independently\n const rebasedCS1 = cloneDeep(rebaseChangeSet);\n for (const baseChangeSet of baseChangesets) {\n const conflicts = [];\n (new ChangeSet(baseChangeSet))._rebaseChangeSet(rebasedCS1, conflicts);\n validateChangeSet(rebasedCS1);\n }\n\n // Now rebase with respect to the squashed base ChangeSets\n const squashedBaseChangeSets = new ChangeSet();\n for (const baseChangeSet of baseChangesets) {\n squashedBaseChangeSets.applyChangeSet(baseChangeSet);\n }\n\n // Test whether squashed base changes are consistent\n const directApplication = new ChangeSet(cloneDeep(base));\n for (const baseChangeSet of baseChangesets) {\n directApplication.applyChangeSet(baseChangeSet);\n }\n const squashApplication = new ChangeSet(cloneDeep(base));\n squashApplication.applyChangeSet(squashedBaseChangeSets);\n expect(directApplication.getSerializedChangeSet()).to.deep.equal(\n squashApplication.getSerializedChangeSet(),\n );\n\n const conflicts2 = [];\n const rebasedCS2 = cloneDeep(rebaseChangeSet);\n (new ChangeSet(squashedBaseChangeSets))._rebaseChangeSet(rebasedCS2, conflicts2);\n validateChangeSet(rebasedCS2);\n\n expect(rebasedCS1).to.deep.equal(rebasedCS2);\n\n return testRebasedApplies(cloneDeep(rebaseChangeSet), squashedBaseChangeSets, base);\n }\n\n describe(\"Rebase Distributivity\", () => {\n describe(\"Multiple inserts in a remove range\", () => {\n for (const insertPosition of [0, 1, 3, 5, 7, 12]) {\n it(`Position ${insertPosition}`, () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [1, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [6, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [9, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n remove: [\n [2, generateNamedEntities(4)],\n [7, generateNamedEntities(2)],\n [10, generateNamedEntities(2)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [insertPosition, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n }\n });\n it(\"Rebasing an insert with respect to a remove + insert\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ]\n }),\n ],\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ]\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n it(\"remove + insert at start of array\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ]\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n it(\"Rebased remove that cancels out\", () => {\n const deltacS = testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ]\n }),\n ],\n createArrayCS({\n remove: [\n [1, generateNamedEntities(2)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n const arrayCS = getArrayCS(deltacS);\n expect(arrayCS.insert[0][1].length).to.equal(3);\n expect(arrayCS.remove[0][1].length).to.equal(1);\n });\n it(\"Insert in between two removes 1\", () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [2, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n remove: [\n [0, generateNamedEntities(2)],\n ]\n }),\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(2)],\n ]\n }),\n ],\n createArrayCS({\n insert: [\n [1, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n it(\"Insert in between two removes 2\", () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [4, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n remove: [\n [2, generateNamedEntities(2)],\n ]\n }),\n createArrayCS({\n remove: [\n [3, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [2, generateNamedEntities(2)],\n ]\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n it(\"Inserts in between three removes\", () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [4, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [6, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n remove: [\n [2, generateNamedEntities(2)],\n ]\n }),\n createArrayCS({\n remove: [\n [3, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n remove: [\n [4, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [2, generateNamedEntities(2)],\n ]\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n it(\"Adjacent remove with insert at the beginning of the remove range\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1)],\n ]\n }),\n createArrayCS({\n insert: [\n [1, generateNamedEntities(2)],\n ]\n }),\n ],\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1, [3])],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ]\n }),\n );\n });\n it(\"Remove operation that cancels out\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [8, generateNamedEntities(2)],\n ]\n }),\n createArrayCS({\n insert: [\n [8, generateNamedEntities(1)],\n ]\n }),\n ],\n createArrayCS({\n remove: [\n [8, generateNamedEntities(1, [3])],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(14)],\n ]\n }),\n );\n });\n it(\"Remove operation that cancels out 2\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [8, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n // [8, generateNamedEntities(1)],\n [8, generateNamedEntities(1)],\n [17, generateNamedEntities(1)],\n ],\n }),\n ],\n createArrayCS({\n remove: [\n [8, generateNamedEntities(1, [3])],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(14)],\n ]\n }),\n );\n });\n it(\"Remove operation that cancels out in the middle of a range\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [4, generateNamedEntities(1)],\n ]\n }),\n ],\n createArrayCS({\n remove: [\n [3, generateNamedEntities(3)],\n ]\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(14)],\n ]\n }),\n );\n });\n });\n\n function validateChangeSet(CS) {\n const arrayCS = getArrayCS(CS);\n\n const insertPositions = new Set();\n if (arrayCS.insert) {\n arrayCS.insert.forEach((x) => insertPositions.add(x[0]));\n }\n for (const type of [\"insert\", \"modify\", \"remove\"]) {\n const changes = arrayCS[type];\n\n // Make sure the entries are sorted\n if (changes !== undefined) {\n let lastIndex = -5;\n let lastLength = 0;\n for (const entry of changes) {\n // Ranges should not be adjacent. However, they might be interrupted, if there is an insert\n // inside the range\n let indexOffset = 1;\n if (type === \"remove\" || type === \"modify\") {\n indexOffset = lastLength;\n if (!insertPositions.has(lastIndex + indexOffset)) {\n indexOffset += 1;\n }\n }\n assert(entry[0] >= lastIndex + indexOffset, \"Changeset operations are not sorted or not merged\");\n lastIndex = entry[0];\n lastLength = !isNumber(entry[1]) ? entry[1].length : entry[1];\n\n // Inserts must not lie within modify or remove ranges\n if (type === \"remove\" || type === \"modify\") {\n insertPositions.forEach(\n (i) => assert(i <= lastIndex || i >= lastIndex + lastLength, `Insert within ${type} range.`),\n );\n }\n }\n }\n }\n }\n\n function testApplyAssociativity(base, operations, customValidator?) {\n const combinedCS = new ChangeSet();\n operations.forEach(combinedCS.applyChangeSet.bind(combinedCS));\n validateChangeSet(combinedCS);\n\n // Individually apply the operations\n const separateApplysResult = new ChangeSet(cloneDeep(base));\n operations.forEach(separateApplysResult.applyChangeSet.bind(separateApplysResult));\n validateChangeSet(separateApplysResult);\n\n // And apply the combined CS\n const combinedApplyResult = new ChangeSet(cloneDeep(base));\n combinedApplyResult.applyChangeSet(combinedCS);\n\n if (customValidator !== undefined) {\n customValidator(combinedCS, separateApplysResult, combinedApplyResult);\n }\n\n expect(separateApplysResult.getSerializedChangeSet())\n .to.deep.equal(combinedApplyResult.getSerializedChangeSet());\n }\n\n describe(\"Apply Associativity\", () => {\n it(\"insert + remove + insert\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }, \"insert\");\n\n const ops = [\n createArrayCS({\n insert: [\n [2, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n remove: [\n [3, generateNamedEntities(2, [1, 3])],\n ],\n }),\n createArrayCS({\n insert: [\n [2, generateNamedEntities(1)],\n ],\n }),\n ];\n\n testApplyAssociativity(initial, ops);\n });\n\n describe(\"Inserting into a remove range with deletes on both sides\", () => {\n for (const additionalInserts of [\"\", \" with insert at the beginning\", \" with insert at the end\"]) {\n const offset = additionalInserts === \" with insert at the beginning\" ? 2 : 0;\n for (const i of range(1, 9)) {\n it(`at postion ${i + offset}${additionalInserts}`, () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n let initialInserts = [];\n let finalInserts = [];\n if (additionalInserts === \" with insert at the beginning\") {\n initialInserts = [\n [0, generateNamedEntities(2, undefined, \"number\")],\n ];\n }\n if (additionalInserts === \" with insert at the end\") {\n finalInserts = [\n [10, generateNamedEntities(2, undefined, \"number\")],\n ];\n }\n const ops = [createArrayCS({\n insert: [\n ...initialInserts, [\n 2,\n generateNamedEntities(2, undefined, \"number\"),\n ],\n [\n 7,\n generateNamedEntities(3, undefined, \"number\"),\n ],\n ...finalInserts,\n ],\n remove: [\n [\n 2,\n generateNamedEntities(5, undefined, \"number\"),\n ],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n insert: [\n [\n i + offset,\n generateNamedEntities(2, undefined, \"number\"),\n ],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops, (combinedCS) => {\n const arrayCS = getArrayCS(combinedCS);\n expect(arrayCS.insert.length).to.equal((i >= 2 && i < 8 ? 2 : 3) +\n (additionalInserts !== \"\" ? 1 : 0));\n\n const insertOffset = additionalInserts == \" with insert at the beginning\" ? 1 : 0;\n if (i >= 2 && i <= 4) {\n expect(arrayCS.insert[0 + insertOffset][1].length).to.equal(4);\n expect(arrayCS.insert[1 + insertOffset][1].length).to.equal(3);\n }\n if (i > 4 && i < 8) {\n expect(arrayCS.insert[0 + insertOffset][1].length).to.equal(2);\n expect(arrayCS.insert[1 + insertOffset][1].length).to.equal(5);\n }\n });\n });\n }\n }\n });\n\n it(\"remove overlapping insert and remove ranges\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(1, undefined, \"number\")],\n [1, generateNamedEntities(1, undefined, \"number\")],\n [4, generateNamedEntities(6, undefined, \"number\")],\n ],\n remove: [\n [1, generateNamedEntities(1, undefined, \"number\")],\n [2, generateNamedEntities(2, undefined, \"number\")],\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [\n 0,\n generateNamedEntities(2, undefined, \"number\"),\n ],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n\n it(\"Overlapping remove / insert\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(2, undefined, \"number\")],\n [4, generateNamedEntities(2, undefined, \"number\")],\n ],\n remove: [\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [4, generateNamedEntities(2, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n it(\"Removing multiple inserts and removes\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [1, generateNamedEntities(2, undefined, \"number\")],\n [4, generateNamedEntities(4, undefined, \"number\")],\n ],\n remove: [\n [0, generateNamedEntities(1, undefined, \"number\")],\n [1, generateNamedEntities(3, undefined, \"number\")],\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [0, generateNamedEntities(6, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n it(\"Removing insert/removes at the end\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(2, undefined, \"number\")],\n [1, generateNamedEntities(1, undefined, \"number\")],\n [4, generateNamedEntities(4, undefined, \"number\")],\n ],\n remove: [\n [1, generateNamedEntities(3, undefined, \"number\")],\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [6, generateNamedEntities(2, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n it(\"Insert with overlapping remove\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }, \"insert\");\n\n const ops = [createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1)],\n ],\n insert: [\n [1, generateNamedEntities(3)],\n ],\n }),\n ];\n testApplyAssociativity(initial, ops);\n });\n\n it(\"Failed case\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }, \"insert\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(7)],\n ],\n }),\n createArrayCS({\n remove: [\n [0, generateNamedEntities(1)],\n ],\n insert: [\n [1, generateNamedEntities(2)],\n ],\n }),\n ];\n testApplyAssociativity(initial, ops);\n });\n\n it(\"Failed case\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }, \"insert\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(5)],\n ],\n }),\n createArrayCS({\n remove: [\n [4, generateNamedEntities(1)],\n ],\n insert: [\n [5, generateNamedEntities(3)],\n ],\n }),\n ];\n testApplyAssociativity(initial, ops);\n });\n });\n\n describe(\"Apply with removes in both changesets\", () => {\n for (const startInsertA of [true, false]) {\n for (const startInsertB of [true, false]) {\n for (const removeInsertA of [true, false]) {\n for (const removeInsertB of [true, false]) {\n for (const removeInsideInsertB of [\"adjacent\", \"separate\", false]) {\n const insertNames = [];\n if (startInsertA) {\n insertNames.push(\"at start of A\");\n }\n if (startInsertB) {\n insertNames.push(\"at start of B\");\n }\n if (removeInsertA) {\n insertNames.push(\"before remove in A\");\n }\n if (removeInsertB) {\n insertNames.push(\"before remove in B\");\n }\n if (removeInsideInsertB) {\n insertNames.push(`inside remove range in B (${removeInsideInsertB})`);\n }\n let title = \"with \";\n if (insertNames.length === 0) {\n title += \"no inserts\";\n } else {\n title += `inserts ${insertNames.join(\", \")}`;\n }\n it(title, () => {\n const insertsA = [];\n const insertsB = [];\n let offset = 0;\n if (startInsertA) {\n insertsA.push([0, generateNamedEntities(1)]);\n offset += 1;\n }\n if (removeInsertA) {\n insertsA.push([5, generateNamedEntities(1)]);\n offset += 1;\n }\n\n let removesB = [\n [5 + offset, generateNamedEntities(3)],\n ];\n if (startInsertB) {\n insertsB.push([0, generateNamedEntities(1)]);\n }\n if (removeInsertB) {\n insertsB.push([5 + offset, generateNamedEntities(1)]);\n }\n if (removeInsideInsertB) {\n const removeOffset = removeInsideInsertB === \"separate\" ? 1 : 0;\n\n insertsB.push([6 + offset + removeOffset, generateNamedEntities(1)]);\n removesB = [\n [5 + offset + removeOffset, generateNamedEntities(1)],\n [6 + offset + removeOffset, generateNamedEntities(1)],\n ];\n }\n const CS1 = createArrayCS({\n insert: insertsA,\n remove: [\n [5, generateNamedEntities(3)],\n ],\n });\n const CS2 = createArrayCS({\n insert: insertsB,\n remove: removesB,\n });\n\n const CS = new ChangeSet(CS1);\n CS.applyChangeSet(CS2);\n validateChangeSet(CS.getSerializedChangeSet());\n });\n }\n }\n }\n }\n }\n });\n});\n"]}
1
+ {"version":3,"file":"array.spec.js","sourceRoot":"","sources":["../../src/test/array.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 no-unused-expressions */\n/**\n * @fileoverview Tests for the array changeset operations\n */\nimport isEmpty from \"lodash/isEmpty\";\nimport isNumber from \"lodash/isNumber\";\nimport {copy as cloneDeep} from \"fastest-json-copy\";\nimport range from \"lodash/range\";\n\nimport { expect, assert } from \"chai\";\nimport { ChangeSet, SerializedChangeSet } from \"../changeset\";\n\ndescribe(\"Array Operations\", function() {\n let guidCounter = 1;\n\n const generateNamedEntities = (count, offsets?, type?) => range(count).map((i) => {\n const offsetShift = offsets !== undefined ? offsets.shift() : undefined;\n const id = offsetShift !== undefined ? guidCounter - offsetShift : guidCounter++;\n if (type === undefined) {\n return {\n String: {\n guid: `00000000-0000-0000-0000-${(`000000000000${id}`).substr(-12)}`,\n },\n typeid: \"test:namedEntry-1.0.0\",\n };\n } else if (type === \"number\") {\n return id;\n }\n });\n\n function createArrayCS(arrayOperations, baseOperation?, type?): SerializedChangeSet {\n baseOperation = baseOperation || \"modify\";\n type = type || \"array<test:namedEntry-1.0.0>\";\n return {\n [baseOperation]: {\n [type]: {\n array: arrayOperations,\n },\n },\n };\n }\n\n function getArrayCS(CS): SerializedChangeSet {\n if (CS instanceof ChangeSet) {\n CS = CS.getSerializedChangeSet();\n }\n if (isEmpty(CS)) {\n return {};\n }\n const first = (x) => Object.values(x)[0];\n return first(first(first(CS)));\n }\n\n it(\"Avoid merging of adjacent remove operations with an insert in between\", () => {\n // This test creates a condition where there are two adjacent removes, with an insert\n // in between. Those two removes must not be merged when applying the two changesets\n // as otherwise overlapping ranges would be created in the result, which are not allowed\n // by the spec\n const op1 = createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n remove: [\n [1, generateNamedEntities(1)],\n ],\n });\n\n const op2 = createArrayCS({\n remove: [\n [0, generateNamedEntities(2)],\n ],\n });\n\n const result = new ChangeSet(op1);\n result.applyChangeSet(op2);\n\n // We expect the two ranges to be non overlapping\n const arrayCS = result.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n const removeStart = arrayCS.remove[0][0];\n const removeEnd = arrayCS.remove[0][0] + arrayCS.remove[0][1].length;\n const insertStart = arrayCS.insert[0][0];\n\n expect(insertStart <= removeStart || insertStart >= removeEnd).to.be.true;\n });\n\n it(\"Rebasing with a base changeset containing adjacent removes and inserts\", () => {\n const base = createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n remove: [\n [0, generateNamedEntities(1)],\n ],\n });\n\n const rebaseCS = createArrayCS({\n insert: [\n [0, generateNamedEntities(1)],\n ],\n });\n\n const conflicts = [];\n const CS = new ChangeSet(base);\n CS._rebaseChangeSet(rebaseCS, conflicts);\n\n // We expect the rebase to keep the insert at position 0. The base changeSet contains an\n // insert at position 3. There is also a remove within the same CS, which causes both\n // inserts to be with respect to the same position in the resulting array, but we have\n // to keep the order of the inserts, since we can only guarantee the distributivity of\n // the rebase this way. The CS above could have been generated by a combination of a\n // I(1,3) followed by a R(0,1). If the rebase CS would have been rebased separately\n // with respect to those two CS, it would have remained a I(0,3).\n expect((rebaseCS as SerializedChangeSet).modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(0);\n });\n\n for (const i of [0, 3]) {\n it(`Rebasing an insert behind a remove insert base changeset with insert position ${i}`, () => {\n const base = createArrayCS({\n insert: [\n [i, generateNamedEntities(3)],\n ],\n remove: [\n [0, generateNamedEntities(3)],\n ],\n });\n const rebaseCS = createArrayCS({\n insert: [\n [0, generateNamedEntities(1)],\n ],\n });\n\n const originalRebaseCS = cloneDeep(rebaseCS);\n const conflicts = [];\n const applyAfterMetaInformation = new Map();\n const CS = new ChangeSet(base);\n CS._rebaseChangeSet(rebaseCS, conflicts, { applyAfterMetaInformation });\n\n // Whether the insert in the rebaseCS is moved depends on the insert in the base CS. If the base CS\n // is the result of an I(3, 3) followed by a R(0,3), it would not be moved since the insert in the baseCS\n // is behind the insert in the rebase CS. Otherwise, if it is an I(0, 0) our rebase rules would move it\n // to index 3 behind the other insert\n expect(rebaseCS.modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(i === 0 ? 3 : 0);\n\n const combinedCS = new ChangeSet(originalRebaseCS);\n combinedCS.toInverseChangeSet();\n combinedCS.applyChangeSet(base);\n combinedCS.applyChangeSet(rebaseCS, { applyAfterMetaInformation });\n\n const finalCs = combinedCS.getSerializedChangeSet();\n // The insert above should cancel out. If the original insert was at position 0, we moved the rebased\n // insert behind the original insert. This means the original insert should now be at position 0,\n // before the insert that canceled out. Otherwise, it should be at position 4 (behind the removed\n // range, as it was in the original CS, but now shifted by 1).\n expect(finalCs.modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(i === 0 ? 0 : 4);\n });\n }\n\n it(\"Inserts should happen at the beginning of a remove range\", () => {\n const op1 = createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n remove: [\n [1, generateNamedEntities(1)],\n ],\n });\n const op2 = createArrayCS({\n insert: [\n [4, generateNamedEntities(2)],\n ],\n });\n\n const combinedCS = new ChangeSet(op1);\n combinedCS.applyChangeSet(op2);\n\n const arrayCS = combinedCS.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n expect(arrayCS.insert.length).to.equal(1);\n });\n\n function testRebasedApplies(localBranchChangeSet, baseChangeSet, baseState) {\n const conflicts = [];\n const rebaseMetaInformation = new Map();\n const originalRebaseChangeSet = cloneDeep(localBranchChangeSet);\n const deltaChangeSet = new ChangeSet(cloneDeep(localBranchChangeSet));\n deltaChangeSet.toInverseChangeSet();\n\n const rebaseChangeSet = cloneDeep(localBranchChangeSet);\n new ChangeSet(baseChangeSet)._rebaseChangeSet(rebaseChangeSet, conflicts, {\n applyAfterMetaInformation: rebaseMetaInformation,\n });\n\n deltaChangeSet.applyChangeSet(baseChangeSet);\n validateChangeSet(deltaChangeSet);\n const copiedRebaseChangeSet = cloneDeep(rebaseChangeSet);\n deltaChangeSet.applyChangeSet(rebaseChangeSet, {\n applyAfterMetaInformation: rebaseMetaInformation,\n });\n validateChangeSet(deltaChangeSet);\n\n // This path first walks onto the local branch (applying the original changeset from the local branch)\n // and then the delta to the new tip (going back one step, and then forward again)\n const deltaPath = new ChangeSet(cloneDeep(baseState));\n deltaPath.applyChangeSet(originalRebaseChangeSet);\n deltaPath.applyChangeSet(deltaChangeSet);\n\n // This computes the same state, but not starting from the local branch, but from the base commit itself\n const directPath = new ChangeSet(cloneDeep(baseState));\n directPath.applyChangeSet(baseChangeSet);\n directPath.applyChangeSet(rebaseChangeSet);\n expect(deltaPath.getSerializedChangeSet()).to.deep.equal(directPath.getSerializedChangeSet());\n\n // Make sure, the rebase changeset was not modified in the apply operation above\n expect(copiedRebaseChangeSet).to.deep.equal(rebaseChangeSet);\n\n return deltaChangeSet;\n }\n\n function runTestApplyingReverseAndRebasedChangesetForIndependentModifications(baseInsertPositions,\n rebasedInsertPositions,\n baseOperation = \"insert\",\n baseCount = 1,\n ) {\n const createInserts = (positions, count) => positions.map((x) => [\n x,\n generateNamedEntities(count),\n ]);\n\n const baseChangeSet = createArrayCS({\n [baseOperation]: createInserts(baseInsertPositions, baseCount),\n });\n\n const localBranchChangeSet = createArrayCS({\n insert: createInserts(rebasedInsertPositions, 1),\n });\n\n // Test whether the created changeset computes the same result as applying\n // the base and rebase changeset to the base state\n const baseState = createArrayCS({\n insert: createInserts([0], 20),\n });\n const deltaChangeSet = testRebasedApplies(localBranchChangeSet, baseChangeSet, baseState);\n\n // Make sure the delta changeset does not contain any other operations than the inserts from the base state\n const arrayChangeSet = deltaChangeSet.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n\n expect(arrayChangeSet[baseOperation].length).to.equal(baseInsertPositions.length);\n for (let i = 0; i < baseInsertPositions.length; i++) {\n expect(arrayChangeSet[baseOperation][i][1].length).to.equal(baseCount);\n }\n expect(arrayChangeSet).to.not.have.property(baseOperation === \"insert\" ? \"remove\" : \"insert\");\n }\n\n describe(\"Rebase test applying the reverse, base and then rebased changeset\", () => {\n for (const basePositions of [\n [0], [1], [2], [5], [13], [0, 2], [0, 5], [0, 5, 13],\n ]) {\n for (const rebasePositions of [\n [0], [1], [5, 9], [5, 9, 12],\n ]) {\n it(`with base positions ${basePositions} and rebase positions ${rebasePositions}`, () => {\n runTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n basePositions,\n rebasePositions,\n );\n });\n }\n }\n });\n\n describe(\"Rebase test applying the reverse, base and then rebased changeset2\", () => {\n it(`with removes in the base`, () => {\n runTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n [0], [2],\n \"remove\",\n 2,\n );\n });\n });\n\n function testRebaseDistributivity(baseChangesets, rebaseChangeSet, base) {\n // First rebase with each CS independently\n const rebasedCS1 = cloneDeep(rebaseChangeSet);\n for (const baseChangeSet of baseChangesets) {\n const conflicts = [];\n (new ChangeSet(baseChangeSet))._rebaseChangeSet(rebasedCS1, conflicts);\n validateChangeSet(rebasedCS1);\n }\n\n // Now rebase with respect to the squashed base ChangeSets\n const squashedBaseChangeSets = new ChangeSet();\n for (const baseChangeSet of baseChangesets) {\n squashedBaseChangeSets.applyChangeSet(baseChangeSet);\n }\n\n // Test whether squashed base changes are consistent\n const directApplication = new ChangeSet(cloneDeep(base));\n for (const baseChangeSet of baseChangesets) {\n directApplication.applyChangeSet(baseChangeSet);\n }\n const squashApplication = new ChangeSet(cloneDeep(base));\n squashApplication.applyChangeSet(squashedBaseChangeSets);\n expect(directApplication.getSerializedChangeSet()).to.deep.equal(\n squashApplication.getSerializedChangeSet(),\n );\n\n const conflicts2 = [];\n const rebasedCS2 = cloneDeep(rebaseChangeSet);\n (new ChangeSet(squashedBaseChangeSets))._rebaseChangeSet(rebasedCS2, conflicts2);\n validateChangeSet(rebasedCS2);\n\n expect(rebasedCS1).to.deep.equal(rebasedCS2);\n\n return testRebasedApplies(cloneDeep(rebaseChangeSet), squashedBaseChangeSets, base);\n }\n\n describe(\"Rebase Distributivity\", () => {\n describe(\"Multiple inserts in a remove range\", () => {\n for (const insertPosition of [0, 1, 3, 5, 7, 12]) {\n it(`Position ${insertPosition}`, () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [1, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [6, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [9, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n remove: [\n [2, generateNamedEntities(4)],\n [7, generateNamedEntities(2)],\n [10, generateNamedEntities(2)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [insertPosition, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n }\n });\n it(\"Rebasing an insert with respect to a remove + insert\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n it(\"remove + insert at start of array\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n it(\"Rebased remove that cancels out\", () => {\n const deltacS = testRebaseDistributivity([\n createArrayCS({\n remove: [\n [0, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }),\n ],\n createArrayCS({\n remove: [\n [1, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n const arrayCS = getArrayCS(deltacS);\n expect(arrayCS.insert[0][1].length).to.equal(3);\n expect(arrayCS.remove[0][1].length).to.equal(1);\n });\n it(\"Insert in between two removes 1\", () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [2, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n remove: [\n [0, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(2)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [1, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n it(\"Insert in between two removes 2\", () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [4, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n remove: [\n [2, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n remove: [\n [3, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [2, generateNamedEntities(2)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n it(\"Inserts in between three removes\", () => {\n testRebaseDistributivity([\n createArrayCS({\n insert: [\n [4, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [6, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n remove: [\n [2, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n remove: [\n [3, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n remove: [\n [4, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [2, generateNamedEntities(2)],\n ],\n }),\n ],\n createArrayCS({\n insert: [\n [3, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n it(\"Adjacent remove with insert at the beginning of the remove range\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1)],\n ],\n }),\n createArrayCS({\n insert: [\n [1, generateNamedEntities(2)],\n ],\n }),\n ],\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1, [3])],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }),\n );\n });\n it(\"Remove operation that cancels out\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [8, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n insert: [\n [8, generateNamedEntities(1)],\n ],\n }),\n ],\n createArrayCS({\n remove: [\n [8, generateNamedEntities(1, [3])],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(14)],\n ],\n }),\n );\n });\n it(\"Remove operation that cancels out 2\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [8, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n // [8, generateNamedEntities(1)],\n [8, generateNamedEntities(1)],\n [17, generateNamedEntities(1)],\n ],\n }),\n ],\n createArrayCS({\n remove: [\n [8, generateNamedEntities(1, [3])],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(14)],\n ],\n }),\n );\n });\n it(\"Remove operation that cancels out in the middle of a range\", () => {\n testRebaseDistributivity([\n createArrayCS({\n remove: [\n [4, generateNamedEntities(1)],\n ],\n }),\n ],\n createArrayCS({\n remove: [\n [3, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n insert: [\n [0, generateNamedEntities(14)],\n ],\n }),\n );\n });\n });\n\n function validateChangeSet(CS) {\n const arrayCS = getArrayCS(CS);\n\n const insertPositions = new Set();\n if (arrayCS.insert) {\n arrayCS.insert.forEach((x) => insertPositions.add(x[0]));\n }\n for (const type of [\"insert\", \"modify\", \"remove\"]) {\n const changes = arrayCS[type];\n\n // Make sure the entries are sorted\n if (changes !== undefined) {\n let lastIndex = -5;\n let lastLength = 0;\n for (const entry of changes) {\n // Ranges should not be adjacent. However, they might be interrupted, if there is an insert\n // inside the range\n let indexOffset = 1;\n if (type === \"remove\" || type === \"modify\") {\n indexOffset = lastLength;\n if (!insertPositions.has(lastIndex + indexOffset)) {\n indexOffset += 1;\n }\n }\n assert(entry[0] >= lastIndex + indexOffset, \"Changeset operations are not sorted or not merged\");\n lastIndex = entry[0];\n lastLength = !isNumber(entry[1]) ? entry[1].length : entry[1];\n\n // Inserts must not lie within modify or remove ranges\n if (type === \"remove\" || type === \"modify\") {\n insertPositions.forEach(\n (i) => assert(i <= lastIndex || i >= lastIndex + lastLength, `Insert within ${type} range.`),\n );\n }\n }\n }\n }\n }\n\n function testApplyAssociativity(base, operations, customValidator?) {\n const combinedCS = new ChangeSet();\n operations.forEach(combinedCS.applyChangeSet.bind(combinedCS));\n validateChangeSet(combinedCS);\n\n // Individually apply the operations\n const separateApplysResult = new ChangeSet(cloneDeep(base));\n operations.forEach(separateApplysResult.applyChangeSet.bind(separateApplysResult));\n validateChangeSet(separateApplysResult);\n\n // And apply the combined CS\n const combinedApplyResult = new ChangeSet(cloneDeep(base));\n combinedApplyResult.applyChangeSet(combinedCS);\n\n if (customValidator !== undefined) {\n customValidator(combinedCS, separateApplysResult, combinedApplyResult);\n }\n\n expect(separateApplysResult.getSerializedChangeSet())\n .to.deep.equal(combinedApplyResult.getSerializedChangeSet());\n }\n\n describe(\"Apply Associativity\", () => {\n it(\"insert + remove + insert\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(3)],\n ],\n }, \"insert\");\n\n const ops = [\n createArrayCS({\n insert: [\n [2, generateNamedEntities(2)],\n ],\n }),\n createArrayCS({\n remove: [\n [3, generateNamedEntities(2, [1, 3])],\n ],\n }),\n createArrayCS({\n insert: [\n [2, generateNamedEntities(1)],\n ],\n }),\n ];\n\n testApplyAssociativity(initial, ops);\n });\n\n describe(\"Inserting into a remove range with deletes on both sides\", () => {\n for (const additionalInserts of [\"\", \" with insert at the beginning\", \" with insert at the end\"]) {\n const offset = additionalInserts === \" with insert at the beginning\" ? 2 : 0;\n for (const i of range(1, 9)) {\n it(`at postion ${i + offset}${additionalInserts}`, () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n let initialInserts = [];\n let finalInserts = [];\n if (additionalInserts === \" with insert at the beginning\") {\n initialInserts = [\n [0, generateNamedEntities(2, undefined, \"number\")],\n ];\n }\n if (additionalInserts === \" with insert at the end\") {\n finalInserts = [\n [10, generateNamedEntities(2, undefined, \"number\")],\n ];\n }\n const ops = [createArrayCS({\n insert: [\n ...initialInserts, [\n 2,\n generateNamedEntities(2, undefined, \"number\"),\n ],\n [\n 7,\n generateNamedEntities(3, undefined, \"number\"),\n ],\n ...finalInserts,\n ],\n remove: [\n [\n 2,\n generateNamedEntities(5, undefined, \"number\"),\n ],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n insert: [\n [\n i + offset,\n generateNamedEntities(2, undefined, \"number\"),\n ],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops, (combinedCS) => {\n const arrayCS = getArrayCS(combinedCS);\n expect(arrayCS.insert.length).to.equal((i >= 2 && i < 8 ? 2 : 3) +\n (additionalInserts !== \"\" ? 1 : 0));\n\n const insertOffset = additionalInserts == \" with insert at the beginning\" ? 1 : 0;\n if (i >= 2 && i <= 4) {\n expect(arrayCS.insert[0 + insertOffset][1].length).to.equal(4);\n expect(arrayCS.insert[1 + insertOffset][1].length).to.equal(3);\n }\n if (i > 4 && i < 8) {\n expect(arrayCS.insert[0 + insertOffset][1].length).to.equal(2);\n expect(arrayCS.insert[1 + insertOffset][1].length).to.equal(5);\n }\n });\n });\n }\n }\n });\n\n it(\"remove overlapping insert and remove ranges\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(1, undefined, \"number\")],\n [1, generateNamedEntities(1, undefined, \"number\")],\n [4, generateNamedEntities(6, undefined, \"number\")],\n ],\n remove: [\n [1, generateNamedEntities(1, undefined, \"number\")],\n [2, generateNamedEntities(2, undefined, \"number\")],\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [\n 0,\n generateNamedEntities(2, undefined, \"number\"),\n ],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n\n it(\"Overlapping remove / insert\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(2, undefined, \"number\")],\n [4, generateNamedEntities(2, undefined, \"number\")],\n ],\n remove: [\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [4, generateNamedEntities(2, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n it(\"Removing multiple inserts and removes\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [1, generateNamedEntities(2, undefined, \"number\")],\n [4, generateNamedEntities(4, undefined, \"number\")],\n ],\n remove: [\n [0, generateNamedEntities(1, undefined, \"number\")],\n [1, generateNamedEntities(3, undefined, \"number\")],\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [0, generateNamedEntities(6, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n it(\"Removing insert/removes at the end\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10, undefined, \"number\")],\n ],\n }, \"insert\", \"array<Float64>\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(2, undefined, \"number\")],\n [1, generateNamedEntities(1, undefined, \"number\")],\n [4, generateNamedEntities(4, undefined, \"number\")],\n ],\n remove: [\n [1, generateNamedEntities(3, undefined, \"number\")],\n [4, generateNamedEntities(5, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n createArrayCS({\n remove: [\n [6, generateNamedEntities(2, undefined, \"number\")],\n ],\n }, undefined, \"array<Float64>\"),\n ];\n testApplyAssociativity(initial, ops);\n });\n it(\"Insert with overlapping remove\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }, \"insert\");\n\n const ops = [createArrayCS({\n insert: [\n [1, generateNamedEntities(3)],\n ],\n }),\n createArrayCS({\n remove: [\n [1, generateNamedEntities(1)],\n ],\n insert: [\n [1, generateNamedEntities(3)],\n ],\n }),\n ];\n testApplyAssociativity(initial, ops);\n });\n\n it(\"Failed case\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }, \"insert\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(7)],\n ],\n }),\n createArrayCS({\n remove: [\n [0, generateNamedEntities(1)],\n ],\n insert: [\n [1, generateNamedEntities(2)],\n ],\n }),\n ];\n testApplyAssociativity(initial, ops);\n });\n\n it(\"Failed case\", () => {\n const initial = createArrayCS({\n insert: [\n [0, generateNamedEntities(10)],\n ],\n }, \"insert\");\n\n const ops = [createArrayCS({\n insert: [\n [0, generateNamedEntities(5)],\n ],\n }),\n createArrayCS({\n remove: [\n [4, generateNamedEntities(1)],\n ],\n insert: [\n [5, generateNamedEntities(3)],\n ],\n }),\n ];\n testApplyAssociativity(initial, ops);\n });\n });\n\n describe(\"Apply with removes in both changesets\", () => {\n for (const startInsertA of [true, false]) {\n for (const startInsertB of [true, false]) {\n for (const removeInsertA of [true, false]) {\n for (const removeInsertB of [true, false]) {\n for (const removeInsideInsertB of [\"adjacent\", \"separate\", false]) {\n const insertNames = [];\n if (startInsertA) {\n insertNames.push(\"at start of A\");\n }\n if (startInsertB) {\n insertNames.push(\"at start of B\");\n }\n if (removeInsertA) {\n insertNames.push(\"before remove in A\");\n }\n if (removeInsertB) {\n insertNames.push(\"before remove in B\");\n }\n if (removeInsideInsertB) {\n insertNames.push(`inside remove range in B (${removeInsideInsertB})`);\n }\n let title = \"with \";\n if (insertNames.length === 0) {\n title += \"no inserts\";\n } else {\n title += `inserts ${insertNames.join(\", \")}`;\n }\n it(title, () => {\n const insertsA = [];\n const insertsB = [];\n let offset = 0;\n if (startInsertA) {\n insertsA.push([0, generateNamedEntities(1)]);\n offset += 1;\n }\n if (removeInsertA) {\n insertsA.push([5, generateNamedEntities(1)]);\n offset += 1;\n }\n\n let removesB = [\n [5 + offset, generateNamedEntities(3)],\n ];\n if (startInsertB) {\n insertsB.push([0, generateNamedEntities(1)]);\n }\n if (removeInsertB) {\n insertsB.push([5 + offset, generateNamedEntities(1)]);\n }\n if (removeInsideInsertB) {\n const removeOffset = removeInsideInsertB === \"separate\" ? 1 : 0;\n\n insertsB.push([6 + offset + removeOffset, generateNamedEntities(1)]);\n removesB = [\n [5 + offset + removeOffset, generateNamedEntities(1)],\n [6 + offset + removeOffset, generateNamedEntities(1)],\n ];\n }\n const CS1 = createArrayCS({\n insert: insertsA,\n remove: [\n [5, generateNamedEntities(3)],\n ],\n });\n const CS2 = createArrayCS({\n insert: insertsB,\n remove: removesB,\n });\n\n const CS = new ChangeSet(CS1);\n CS.applyChangeSet(CS2);\n validateChangeSet(CS.getSerializedChangeSet());\n });\n }\n }\n }\n }\n }\n });\n});\n"]}
@@ -3,7 +3,7 @@
3
3
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
4
  * Licensed under the MIT License.
5
5
  */
6
- /* eslint-disable no-unused-expressions*/
6
+ /* eslint-disable no-unused-expressions */
7
7
  /**
8
8
  * @fileoverview In this file, we will test the path helper
9
9
  * functions described in /src/properties/path_helper.js
@@ -22,7 +22,7 @@ describe('PathHelper', function () {
22
22
  chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('test.test2', types)).to.deep.equal(['test', 'test2']);
23
23
  chai_1.expect(types).to.deep.equal([
24
24
  pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
25
- pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
25
+ pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
26
26
  ]);
27
27
  chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('.test2'); }).to.throw();
28
28
  chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('test2.'); }).to.throw();
@@ -51,7 +51,7 @@ describe('PathHelper', function () {
51
51
  pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
52
52
  pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
53
53
  pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
54
- pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN
54
+ pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
55
55
  ]);
56
56
  chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('[test]parameter'); }).to.throw();
57
57
  });
@@ -67,15 +67,15 @@ describe('PathHelper', function () {
67
67
  chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN]);
68
68
  chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('"test1".test2', types)).to.deep.equal(['test1', 'test2']);
69
69
  chai_1.expect(types).to.deep.equal([
70
- pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
70
+ pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
71
71
  ]);
72
72
  chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('"test1"."test2"', types)).to.deep.equal(['test1', 'test2']);
73
73
  chai_1.expect(types).to.deep.equal([
74
- pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
74
+ pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
75
75
  ]);
76
76
  chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('test1."test2"', types)).to.deep.equal(['test1', 'test2']);
77
77
  chai_1.expect(types).to.deep.equal([
78
- pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
78
+ pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
79
79
  ]);
80
80
  chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('test1["test2"]', types)).to.deep.equal(['test1', 'test2']);
81
81
  chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN]);
@@ -95,11 +95,11 @@ describe('PathHelper', function () {
95
95
  chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN]);
96
96
  chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('test*', types)).to.deep.equal(['test', '*']);
97
97
  chai_1.expect(types).to.deep.equal([
98
- pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN
98
+ pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,
99
99
  ]);
100
100
  chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('*.test', types)).to.deep.equal(['*', 'test']);
101
101
  chai_1.expect(types).to.deep.equal([
102
- pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
102
+ pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
103
103
  ]);
104
104
  chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('*test', types); }).to.throw();
105
105
  chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('test*test', types); }).to.throw();
@@ -109,7 +109,7 @@ describe('PathHelper', function () {
109
109
  pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
110
110
  pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,
111
111
  pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
112
- pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN
112
+ pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,
113
113
  ]);
114
114
  chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('/*', types)).to.deep.equal(['/', '*']);
115
115
  chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.PATH_ROOT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN]);
@@ -121,13 +121,13 @@ describe('PathHelper', function () {
121
121
  chai_1.expect(types).to.deep.equal([
122
122
  pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
123
123
  pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,
124
- pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
124
+ pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
125
125
  ]);
126
126
  chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('[test]*[test2]', types)).to.deep.equal(['test', '*', 'test2']);
127
127
  chai_1.expect(types).to.deep.equal([
128
128
  pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
129
129
  pathHelper_1.PathHelper.TOKEN_TYPES.DEREFERENCE_TOKEN,
130
- pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN
130
+ pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
131
131
  ]);
132
132
  chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('[test]*test', types); }).to.throw();
133
133
  chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('"'); }).to.throw();
@@ -139,16 +139,16 @@ describe('PathHelper', function () {
139
139
  let types = [];
140
140
  chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('../test', types)).to.deep.equal(['../', 'test']);
141
141
  chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN,
142
- pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
142
+ pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
143
143
  ]);
144
144
  chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('../../../test', types)).to.deep.equal(['../', '../', '../', 'test']);
145
145
  chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN,
146
- pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN
146
+ pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN,
147
147
  ]);
148
148
  chai_1.expect(pathHelper_1.PathHelper.tokenizePathString('../../test[0].test2[key]', types)).to.deep.equal(['../', '../', 'test', '0', 'test2', 'key']);
149
149
  chai_1.expect(types).to.deep.equal([pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.RAISE_LEVEL_TOKEN,
150
150
  pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
151
- pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN
151
+ pathHelper_1.PathHelper.TOKEN_TYPES.PATH_SEGMENT_TOKEN, pathHelper_1.PathHelper.TOKEN_TYPES.ARRAY_TOKEN,
152
152
  ]);
153
153
  chai_1.expect(function () { pathHelper_1.PathHelper.tokenizePathString('/../test2'); }).to.throw();
154
154
  });