@fluid-experimental/property-properties 2.0.0-internal.3.0.2 → 2.0.0-internal.3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/README.md +1 -0
  2. package/dist/containerSerializer.d.ts.map +1 -1
  3. package/dist/containerSerializer.js +5 -5
  4. package/dist/containerSerializer.js.map +1 -1
  5. package/dist/enableValidations.js.map +1 -1
  6. package/dist/index.d.ts +19 -19
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/properties/abstractStaticCollectionProperty.d.ts +10 -10
  10. package/dist/properties/abstractStaticCollectionProperty.d.ts.map +1 -1
  11. package/dist/properties/abstractStaticCollectionProperty.js +70 -53
  12. package/dist/properties/abstractStaticCollectionProperty.js.map +1 -1
  13. package/dist/properties/arrayProperty.d.ts.map +1 -1
  14. package/dist/properties/arrayProperty.js +152 -103
  15. package/dist/properties/arrayProperty.js.map +1 -1
  16. package/dist/properties/baseProperty.d.ts +4 -4
  17. package/dist/properties/baseProperty.d.ts.map +1 -1
  18. package/dist/properties/baseProperty.js +69 -47
  19. package/dist/properties/baseProperty.js.map +1 -1
  20. package/dist/properties/boolProperty.d.ts.map +1 -1
  21. package/dist/properties/boolProperty.js +3 -3
  22. package/dist/properties/boolProperty.js.map +1 -1
  23. package/dist/properties/containerProperty.d.ts +8 -8
  24. package/dist/properties/containerProperty.d.ts.map +1 -1
  25. package/dist/properties/containerProperty.js +33 -26
  26. package/dist/properties/containerProperty.js.map +1 -1
  27. package/dist/properties/enumArrayProperty.d.ts.map +1 -1
  28. package/dist/properties/enumArrayProperty.js +14 -14
  29. package/dist/properties/enumArrayProperty.js.map +1 -1
  30. package/dist/properties/enumProperty.d.ts.map +1 -1
  31. package/dist/properties/enumProperty.js +17 -17
  32. package/dist/properties/enumProperty.js.map +1 -1
  33. package/dist/properties/floatProperties.js +4 -4
  34. package/dist/properties/floatProperties.js.map +1 -1
  35. package/dist/properties/index.d.ts +23 -23
  36. package/dist/properties/index.d.ts.map +1 -1
  37. package/dist/properties/index.js.map +1 -1
  38. package/dist/properties/indexedCollectionBaseProperty.d.ts.map +1 -1
  39. package/dist/properties/indexedCollectionBaseProperty.js +47 -37
  40. package/dist/properties/indexedCollectionBaseProperty.js.map +1 -1
  41. package/dist/properties/intProperties.d.ts.map +1 -1
  42. package/dist/properties/intProperties.js +10 -10
  43. package/dist/properties/intProperties.js.map +1 -1
  44. package/dist/properties/lazyLoadedProperties.js.map +1 -1
  45. package/dist/properties/mapProperty.d.ts.map +1 -1
  46. package/dist/properties/mapProperty.js +21 -17
  47. package/dist/properties/mapProperty.js.map +1 -1
  48. package/dist/properties/namedNodeProperty.d.ts.map +1 -1
  49. package/dist/properties/namedNodeProperty.js +3 -3
  50. package/dist/properties/namedNodeProperty.js.map +1 -1
  51. package/dist/properties/namedProperty.d.ts.map +1 -1
  52. package/dist/properties/namedProperty.js +7 -5
  53. package/dist/properties/namedProperty.js.map +1 -1
  54. package/dist/properties/nodeProperty.d.ts.map +1 -1
  55. package/dist/properties/nodeProperty.js +5 -3
  56. package/dist/properties/nodeProperty.js.map +1 -1
  57. package/dist/properties/primitiveTypeCasts.d.ts.map +1 -1
  58. package/dist/properties/primitiveTypeCasts.js +9 -9
  59. package/dist/properties/primitiveTypeCasts.js.map +1 -1
  60. package/dist/properties/referenceArrayProperty.d.ts.map +1 -1
  61. package/dist/properties/referenceArrayProperty.js +31 -25
  62. package/dist/properties/referenceArrayProperty.js.map +1 -1
  63. package/dist/properties/referenceMapProperty.d.ts.map +1 -1
  64. package/dist/properties/referenceMapProperty.js +18 -18
  65. package/dist/properties/referenceMapProperty.js.map +1 -1
  66. package/dist/properties/referenceProperty.d.ts.map +1 -1
  67. package/dist/properties/referenceProperty.js +33 -29
  68. package/dist/properties/referenceProperty.js.map +1 -1
  69. package/dist/properties/setProperty.d.ts.map +1 -1
  70. package/dist/properties/setProperty.js +31 -29
  71. package/dist/properties/setProperty.js.map +1 -1
  72. package/dist/properties/stringProperty.d.ts.map +1 -1
  73. package/dist/properties/stringProperty.js +56 -40
  74. package/dist/properties/stringProperty.js.map +1 -1
  75. package/dist/properties/uintProperties.js +5 -5
  76. package/dist/properties/uintProperties.js.map +1 -1
  77. package/dist/properties/valueArrayProperty.d.ts +1 -1
  78. package/dist/properties/valueArrayProperty.d.ts.map +1 -1
  79. package/dist/properties/valueArrayProperty.js +30 -29
  80. package/dist/properties/valueArrayProperty.js.map +1 -1
  81. package/dist/properties/valueMapProperty.d.ts.map +1 -1
  82. package/dist/properties/valueMapProperty.js +31 -29
  83. package/dist/properties/valueMapProperty.js.map +1 -1
  84. package/dist/properties/valueProperty.d.ts.map +1 -1
  85. package/dist/properties/valueProperty.js +11 -9
  86. package/dist/properties/valueProperty.js.map +1 -1
  87. package/dist/propertyFactory.d.ts.map +1 -1
  88. package/dist/propertyFactory.js +309 -252
  89. package/dist/propertyFactory.js.map +1 -1
  90. package/dist/propertyTemplate.d.ts +17 -17
  91. package/dist/propertyTemplate.d.ts.map +1 -1
  92. package/dist/propertyTemplate.js +64 -45
  93. package/dist/propertyTemplate.js.map +1 -1
  94. package/dist/propertyTemplateWrapper.d.ts.map +1 -1
  95. package/dist/propertyTemplateWrapper.js +40 -25
  96. package/dist/propertyTemplateWrapper.js.map +1 -1
  97. package/dist/propertyUtils.d.ts.map +1 -1
  98. package/dist/propertyUtils.js.map +1 -1
  99. package/dist/test/properties/arrayProperty.spec.js +566 -490
  100. package/dist/test/properties/arrayProperty.spec.js.map +1 -1
  101. package/dist/test/properties/baseProperty.spec.js +293 -280
  102. package/dist/test/properties/baseProperty.spec.js.map +1 -1
  103. package/dist/test/properties/containerProperty.spec.js +100 -94
  104. package/dist/test/properties/containerProperty.spec.js.map +1 -1
  105. package/dist/test/properties/customArrayProperty.spec.js +174 -147
  106. package/dist/test/properties/customArrayProperty.spec.js.map +1 -1
  107. package/dist/test/properties/enumArrayProperty.spec.js +67 -63
  108. package/dist/test/properties/enumArrayProperty.spec.js.map +1 -1
  109. package/dist/test/properties/enumProperty.spec.js +115 -97
  110. package/dist/test/properties/enumProperty.spec.js.map +1 -1
  111. package/dist/test/properties/float32.spec.js +5 -5
  112. package/dist/test/properties/float32.spec.js.map +1 -1
  113. package/dist/test/properties/int64ArrayProperty.spec.js +157 -93
  114. package/dist/test/properties/int64ArrayProperty.spec.js.map +1 -1
  115. package/dist/test/properties/int64MapProperty.spec.js +185 -166
  116. package/dist/test/properties/int64MapProperty.spec.js.map +1 -1
  117. package/dist/test/properties/int64Property.spec.js +109 -109
  118. package/dist/test/properties/int64Property.spec.js.map +1 -1
  119. package/dist/test/properties/isLeafNode.spec.js +75 -76
  120. package/dist/test/properties/isLeafNode.spec.js.map +1 -1
  121. package/dist/test/properties/mapProperty.spec.js +571 -531
  122. package/dist/test/properties/mapProperty.spec.js.map +1 -1
  123. package/dist/test/properties/namedNodeProperty.spec.js +31 -31
  124. package/dist/test/properties/namedNodeProperty.spec.js.map +1 -1
  125. package/dist/test/properties/nodeProperty.spec.js +805 -795
  126. package/dist/test/properties/nodeProperty.spec.js.map +1 -1
  127. package/dist/test/properties/referenceProperty.spec.js +729 -679
  128. package/dist/test/properties/referenceProperty.spec.js.map +1 -1
  129. package/dist/test/properties/relationshipProperty.spec.js +16 -16
  130. package/dist/test/properties/relationshipProperty.spec.js.map +1 -1
  131. package/dist/test/properties/setProperty.spec.js +288 -227
  132. package/dist/test/properties/setProperty.spec.js.map +1 -1
  133. package/dist/test/properties/stringProperty.spec.js +326 -318
  134. package/dist/test/properties/stringProperty.spec.js.map +1 -1
  135. package/dist/test/properties/uint64Property.spec.js +46 -36
  136. package/dist/test/properties/uint64Property.spec.js.map +1 -1
  137. package/dist/test/properties/valueMapProperty.spec.js +259 -246
  138. package/dist/test/properties/valueMapProperty.spec.js.map +1 -1
  139. package/dist/test/properties/valueProperty.spec.js +49 -43
  140. package/dist/test/properties/valueProperty.spec.js.map +1 -1
  141. package/dist/test/propertyFactory.spec.js +2038 -1631
  142. package/dist/test/propertyFactory.spec.js.map +1 -1
  143. package/dist/test/propertyTemplateWrapper.spec.js +72 -102
  144. package/dist/test/propertyTemplateWrapper.spec.js.map +1 -1
  145. package/dist/test/propertyUtils.spec.js +22 -21
  146. package/dist/test/propertyUtils.spec.js.map +1 -1
  147. package/dist/test/reversibleChangeset.spec.js +857 -703
  148. package/dist/test/reversibleChangeset.spec.js.map +1 -1
  149. package/dist/test/setup.js +5 -5
  150. package/dist/test/setup.js.map +1 -1
  151. package/dist/test/tsconfig.tsbuildinfo +1 -1
  152. package/dist/test/utils.spec.js +1334 -1144
  153. package/dist/test/utils.spec.js.map +1 -1
  154. package/dist/test/validation/badMissingSemverInTypeid.js +20 -20
  155. package/dist/test/validation/badMissingSemverInTypeid.js.map +1 -1
  156. package/dist/test/validation/badPrimitiveTypeid.js +12 -12
  157. package/dist/test/validation/badPrimitiveTypeid.js.map +1 -1
  158. package/dist/test/validation/goodColorId.js +91 -91
  159. package/dist/test/validation/goodColorId.js.map +1 -1
  160. package/dist/test/validation/goodColorPalette.js +4 -4
  161. package/dist/test/validation/goodColorPalette.js.map +1 -1
  162. package/dist/test/validation/goodPointId.js +20 -20
  163. package/dist/test/validation/goodPointId.js.map +1 -1
  164. package/dist/test/validation/reversibleChangeSetTestData.js +23841 -2
  165. package/dist/test/validation/reversibleChangeSetTestData.js.map +1 -1
  166. package/lib/containerSerializer.d.ts.map +1 -1
  167. package/lib/containerSerializer.js +5 -5
  168. package/lib/containerSerializer.js.map +1 -1
  169. package/lib/enableValidations.js.map +1 -1
  170. package/lib/index.d.ts +19 -19
  171. package/lib/index.d.ts.map +1 -1
  172. package/lib/index.js +19 -19
  173. package/lib/index.js.map +1 -1
  174. package/lib/properties/abstractStaticCollectionProperty.d.ts +10 -10
  175. package/lib/properties/abstractStaticCollectionProperty.d.ts.map +1 -1
  176. package/lib/properties/abstractStaticCollectionProperty.js +70 -53
  177. package/lib/properties/abstractStaticCollectionProperty.js.map +1 -1
  178. package/lib/properties/arrayProperty.d.ts.map +1 -1
  179. package/lib/properties/arrayProperty.js +152 -103
  180. package/lib/properties/arrayProperty.js.map +1 -1
  181. package/lib/properties/baseProperty.d.ts +4 -4
  182. package/lib/properties/baseProperty.d.ts.map +1 -1
  183. package/lib/properties/baseProperty.js +73 -51
  184. package/lib/properties/baseProperty.js.map +1 -1
  185. package/lib/properties/boolProperty.d.ts.map +1 -1
  186. package/lib/properties/boolProperty.js +3 -3
  187. package/lib/properties/boolProperty.js.map +1 -1
  188. package/lib/properties/containerProperty.d.ts +8 -8
  189. package/lib/properties/containerProperty.d.ts.map +1 -1
  190. package/lib/properties/containerProperty.js +33 -26
  191. package/lib/properties/containerProperty.js.map +1 -1
  192. package/lib/properties/enumArrayProperty.d.ts.map +1 -1
  193. package/lib/properties/enumArrayProperty.js +14 -14
  194. package/lib/properties/enumArrayProperty.js.map +1 -1
  195. package/lib/properties/enumProperty.d.ts.map +1 -1
  196. package/lib/properties/enumProperty.js +17 -17
  197. package/lib/properties/enumProperty.js.map +1 -1
  198. package/lib/properties/floatProperties.js +4 -4
  199. package/lib/properties/floatProperties.js.map +1 -1
  200. package/lib/properties/index.d.ts +23 -23
  201. package/lib/properties/index.d.ts.map +1 -1
  202. package/lib/properties/index.js +23 -23
  203. package/lib/properties/index.js.map +1 -1
  204. package/lib/properties/indexedCollectionBaseProperty.d.ts.map +1 -1
  205. package/lib/properties/indexedCollectionBaseProperty.js +47 -37
  206. package/lib/properties/indexedCollectionBaseProperty.js.map +1 -1
  207. package/lib/properties/intProperties.d.ts.map +1 -1
  208. package/lib/properties/intProperties.js +10 -10
  209. package/lib/properties/intProperties.js.map +1 -1
  210. package/lib/properties/lazyLoadedProperties.js.map +1 -1
  211. package/lib/properties/mapProperty.d.ts.map +1 -1
  212. package/lib/properties/mapProperty.js +21 -17
  213. package/lib/properties/mapProperty.js.map +1 -1
  214. package/lib/properties/namedNodeProperty.d.ts.map +1 -1
  215. package/lib/properties/namedNodeProperty.js +3 -3
  216. package/lib/properties/namedNodeProperty.js.map +1 -1
  217. package/lib/properties/namedProperty.d.ts.map +1 -1
  218. package/lib/properties/namedProperty.js +7 -5
  219. package/lib/properties/namedProperty.js.map +1 -1
  220. package/lib/properties/nodeProperty.d.ts.map +1 -1
  221. package/lib/properties/nodeProperty.js +5 -3
  222. package/lib/properties/nodeProperty.js.map +1 -1
  223. package/lib/properties/primitiveTypeCasts.d.ts.map +1 -1
  224. package/lib/properties/primitiveTypeCasts.js +9 -9
  225. package/lib/properties/primitiveTypeCasts.js.map +1 -1
  226. package/lib/properties/referenceArrayProperty.d.ts.map +1 -1
  227. package/lib/properties/referenceArrayProperty.js +31 -25
  228. package/lib/properties/referenceArrayProperty.js.map +1 -1
  229. package/lib/properties/referenceMapProperty.d.ts.map +1 -1
  230. package/lib/properties/referenceMapProperty.js +18 -18
  231. package/lib/properties/referenceMapProperty.js.map +1 -1
  232. package/lib/properties/referenceProperty.d.ts.map +1 -1
  233. package/lib/properties/referenceProperty.js +33 -29
  234. package/lib/properties/referenceProperty.js.map +1 -1
  235. package/lib/properties/setProperty.d.ts.map +1 -1
  236. package/lib/properties/setProperty.js +31 -29
  237. package/lib/properties/setProperty.js.map +1 -1
  238. package/lib/properties/stringProperty.d.ts.map +1 -1
  239. package/lib/properties/stringProperty.js +56 -40
  240. package/lib/properties/stringProperty.js.map +1 -1
  241. package/lib/properties/uintProperties.js +5 -5
  242. package/lib/properties/uintProperties.js.map +1 -1
  243. package/lib/properties/valueArrayProperty.d.ts +1 -1
  244. package/lib/properties/valueArrayProperty.d.ts.map +1 -1
  245. package/lib/properties/valueArrayProperty.js +30 -29
  246. package/lib/properties/valueArrayProperty.js.map +1 -1
  247. package/lib/properties/valueMapProperty.d.ts.map +1 -1
  248. package/lib/properties/valueMapProperty.js +31 -29
  249. package/lib/properties/valueMapProperty.js.map +1 -1
  250. package/lib/properties/valueProperty.d.ts.map +1 -1
  251. package/lib/properties/valueProperty.js +11 -9
  252. package/lib/properties/valueProperty.js.map +1 -1
  253. package/lib/propertyFactory.d.ts.map +1 -1
  254. package/lib/propertyFactory.js +309 -252
  255. package/lib/propertyFactory.js.map +1 -1
  256. package/lib/propertyTemplate.d.ts +17 -17
  257. package/lib/propertyTemplate.d.ts.map +1 -1
  258. package/lib/propertyTemplate.js +64 -45
  259. package/lib/propertyTemplate.js.map +1 -1
  260. package/lib/propertyTemplateWrapper.d.ts.map +1 -1
  261. package/lib/propertyTemplateWrapper.js +40 -25
  262. package/lib/propertyTemplateWrapper.js.map +1 -1
  263. package/lib/propertyUtils.d.ts.map +1 -1
  264. package/lib/propertyUtils.js.map +1 -1
  265. package/package.json +28 -28
  266. package/src/index.d.ts +2750 -2681
@@ -1 +1 @@
1
- {"version":3,"file":"int64MapProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/int64MapProperty.spec.js"],"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/* globals describe */\n\n/**\n * @fileoverview In this file, we will test the int64 map property\n * object described in /src/properties/valueMapProperty.js\n */\n\ndescribe('Int64MapProperty', function() {\n var PropertyFactory, BaseProperty, ChangeSet, myNode, Int64Map, Int64;\n\n before(function() {\n // Get all the objects we need in this test here.\n PropertyFactory = require('../..').PropertyFactory;\n BaseProperty = require('../..').BaseProperty;\n ChangeSet = require('@fluid-experimental/property-changeset').ChangeSet;\n Int64 = require('@fluid-experimental/property-common').Int64;\n\n // Register a template with a set property for the tests\n var TestPropertyTemplate = {\n typeid: 'autodesk.tests:Int64MapTestPropertyID-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'Int64Map', typeid: 'Int64', context: 'map' },\n ],\n };\n\n PropertyFactory._reregister(TestPropertyTemplate);\n\n myNode = PropertyFactory.create('autodesk.tests:Int64MapTestPropertyID-1.0.0');\n Int64Map = myNode._properties.Int64Map;\n });\n\n // Helper functions for the test cases\n var keyCounter = 0;\n var resetKeyCounter = function() {\n keyCounter = 0;\n };\n\n // Inserts a node with a given key (a new one is generated when undefined)\n var insertEntryInRootWithKey = function(key, root) {\n if (key === undefined) {\n key = 'node' + keyCounter++;\n }\n root._properties.Int64Map.insert(key, new Int64(1, keyCounter));\n };\n\n // Inserts a new node in the root\n var insertNodeInRoot = function(root) {\n insertEntryInRootWithKey(undefined, root);\n };\n\n // Returns a functor that will insert a node with a constant key\n var insertEntryInRootWithUnqiueKey = function() {\n var key = 'node' + keyCounter++;\n return insertEntryInRootWithKey.bind(undefined, key);\n };\n\n // Removes the first node from the root\n var removeFirstNodeInRoot = function(root) {\n var firstKey = root._properties.Int64Map.getIds()[0];\n root._properties.Int64Map.remove(firstKey);\n };\n\n // Modifies the first node\n var modifyEntry = function(root) {\n var firstKey = root._properties.Int64Map.getIds()[0];\n root._properties.Int64Map.set(firstKey, new Int64(1, root._properties.Int64Map.get(firstKey) + 1));\n };\n\n describe('Testing creation, assignment and serialization', function() {\n it('should be empty at the beginning', function() {\n expect(Int64Map.getAsArray()).to.be.empty;\n expect(Int64Map.getEntriesReadOnly()).to.be.empty;\n expect(ChangeSet.isEmptyChangeSet(Int64Map.serialize({ 'dirtyOnly': false }))).to.be.ok;\n expect(ChangeSet.isEmptyChangeSet(Int64Map.serialize({ 'dirtyOnly': true }))).to.be.ok;\n });\n\n it('should be possible to add entries', function() {\n Int64Map.insert('value1', new Int64(1, 1));\n expect(Int64Map.get('value1')).to.deep.equal(new Int64(1, 1));\n Int64Map.insert('value2', new Int64(1, 2));\n expect(Int64Map.get('value2')).to.deep.equal(new Int64(1, 2));\n Int64Map.insert('value3', new Int64(1, 3));\n expect(Int64Map.get('value3')).to.deep.equal(new Int64(1, 3));\n Int64Map.insert('value4', '123');\n expect(Int64Map.get('value4')).to.deep.equal(new Int64(123, 0));\n Int64Map.insert('value5', 123);\n expect(Int64Map.get('value5')).to.deep.equal(new Int64(123, 0));\n expect(Int64Map.getEntriesReadOnly()).to.deep.equal(\n {\n 'value1': new Int64(1, 1), 'value2': new Int64(1, 2), 'value3': new Int64(1, 3),\n 'value4': new Int64(123, 0), 'value5': new Int64(123, 0),\n });\n\n expect(Int64Map.has('value1')).to.be.ok;\n expect(Int64Map.has('value2')).to.be.ok;\n expect(Int64Map.has('value3')).to.be.ok;\n expect(Int64Map.has('value4')).to.be.ok;\n expect(Int64Map.has('value5')).to.be.ok;\n\n expect(Int64Map.serialize({ 'dirtyOnly': false })).to.deep.equal({\n insert: { 'value1': [1, 1], 'value2': [1, 2], 'value3': [1, 3], 'value4': [123, 0], 'value5': [123, 0] },\n });\n });\n\n it('should be possible to remove entries', function() {\n Int64Map.remove('value1');\n expect(Int64Map.has('value1')).to.be.not.ok;\n Int64Map.remove('value2');\n expect(Int64Map.has('value2')).to.be.not.ok;\n Int64Map.remove('value3');\n expect(Int64Map.has('value3')).to.be.not.ok;\n Int64Map.remove('value4');\n expect(Int64Map.has('value4')).to.be.not.ok;\n Int64Map.remove('value5');\n expect(Int64Map.has('value5')).to.be.not.ok;\n expect(ChangeSet.isEmptyChangeSet(Int64Map.serialize({ 'dirtyOnly': false }))).to.be.ok;\n });\n\n it('a remove followed by an insert should become a modify', function() {\n Int64Map.insert('value1', new Int64(1, 1));\n Int64Map.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n Int64Map.remove('value1');\n Int64Map.insert('value1', new Int64(1, 2));\n\n expect(Int64Map.serialize({ 'dirtyOnly': true })).to.deep.equal({\n modify: { 'value1': [1, 2] },\n });\n\n // This should also work for a set operation\n Int64Map.set('value1', new Int64(1, 3));\n expect(Int64Map.serialize({ 'dirtyOnly': true })).to.deep.equal({\n modify: { 'value1': [1, 3] },\n });\n\n // But setting the same value should give an empty ChangeSet\n Int64Map.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n Int64Map.set('value1', new Int64(1, 3));\n expect(ChangeSet.isEmptyChangeSet(Int64Map.serialize({ 'dirtyOnly': true }))).to.be.ok;\n\n // This should be tracked separately for dirtyness and pending changes\n Int64Map.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n Int64Map.remove('value1');\n Int64Map.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n Int64Map.insert('value1', new Int64(1, 2));\n\n expect(Int64Map.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n })).to.deep.equal({\n modify: { 'value1': [1, 2] },\n });\n\n expect(Int64Map.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n })).to.deep.equal({\n insert: { 'value1': [1, 2] },\n });\n });\n\n it('deserialize should work', function() {\n var myInitialStateNode = PropertyFactory.create('autodesk.tests:Int64MapTestPropertyID-1.0.0');\n myInitialStateNode._properties.Int64Map.insert('value1', new Int64(1, 1));\n myInitialStateNode._properties.Int64Map.insert('value2', new Int64(1, 2));\n var initialChangeSet = myInitialStateNode.serialize({ 'dirtyOnly': false });\n\n // Deserialize a copy into a second node and check that the chageset is correct\n var myDeserializeNode1 = PropertyFactory.create('autodesk.tests:Int64MapTestPropertyID-1.0.0');\n var changes = myDeserializeNode1.deserialize(initialChangeSet);\n expect(changes).to.deep.equal(initialChangeSet);\n expect(myDeserializeNode1.serialize({ 'dirtyOnly': false })).to.deep.equal(\n myInitialStateNode.serialize({ 'dirtyOnly': false }));\n myDeserializeNode1.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n // Create a third copy\n var myDeserializeNode2 = PropertyFactory.create('autodesk.tests:Int64MapTestPropertyID-1.0.0');\n myDeserializeNode2.deserialize(initialChangeSet);\n myDeserializeNode2.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n myInitialStateNode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n myInitialStateNode._properties.Int64Map.set('value1', new Int64(1, 2));\n myInitialStateNode._properties.Int64Map.remove('value2');\n myInitialStateNode._properties.Int64Map.insert('value3', new Int64(1, 3));\n\n var changesChangeSet = myInitialStateNode.serialize({ 'dirtyOnly': true });\n var fullChangeSet = myInitialStateNode.serialize({ 'dirtyOnly': false });\n\n var reportedChanges = myDeserializeNode1.deserialize(fullChangeSet);\n expect(myDeserializeNode1.serialize({ 'dirtyOnly': false })).to.deep.equal(\n myInitialStateNode.serialize({ 'dirtyOnly': false }));\n expect(reportedChanges).to.deep.equal(changesChangeSet);\n expect(myDeserializeNode1.serialize({ 'dirtyOnly': true })).to.deep.equal(changesChangeSet);\n\n var deserializeChanges = myDeserializeNode2.deserialize(fullChangeSet);\n expect(deserializeChanges).to.deep.equal(changesChangeSet);\n });\n\n it('inserting the same key twice should throw an exception', function() {\n var rootNode = PropertyFactory.create('autodesk.tests:Int64MapTestPropertyID-1.0.0');\n rootNode._properties.Int64Map.insert('node1', new Int64(1, 1));\n expect(function() {\n rootNode._properties.Int64Map.insert('node1', new Int64(1, 2));\n }).to.throw();\n });\n\n it('set should overwrite existing entry', function() {\n var rootNode = PropertyFactory.create('autodesk.tests:Int64MapTestPropertyID-1.0.0');\n\n rootNode._properties.Int64Map.set('node1', new Int64(1, 0));\n rootNode._properties.Int64Map.set('node1', new Int64(1, 1));\n // the set should overwrite the insert\n expect(rootNode.serialize({ 'dirtyOnly': true })['map<Int64>'].Int64Map).to.have.all.keys('insert');\n\n // Overwriting with the same property shouldn't dirty the node\n rootNode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n rootNode._properties.Int64Map.set('node1', new Int64(1, 1));\n expect(ChangeSet.isEmptyChangeSet(rootNode.serialize({ 'dirtyOnly': true }))).to.be.ok;\n expect(rootNode.isDirty()).to.be.false;\n\n // Overwriting with a different value should result in a modify\n rootNode._properties.Int64Map.set('node1', new Int64(1, 2));\n expect(rootNode.serialize({ 'dirtyOnly': true })['map<Int64>'].Int64Map).to.have.all.keys('modify');\n });\n });\n\n describe('squashing', function() {\n //\n // Helper function which takes a sequence of callbacks that are suceessively executed\n // and the changes applied by the callbacks are separately tracked and squashed in a\n // a ChangeSet. This ChangeSet is then compared to the state in the property object\n //\n // Optionally, a a callback which controls the initial state before the squashing can\n // be given as first parameter\n //\n var testChangeSetSquashing = function(in_options) {\n resetKeyCounter();\n var testProperty = PropertyFactory.create('autodesk.tests:Int64MapTestPropertyID-1.0.0');\n\n var callbacks = in_options.callbacks;\n if (in_options.pre) {\n in_options.pre(testProperty);\n }\n\n var initialChangeset = new ChangeSet(testProperty.serialize({ 'dirtyOnly': false }));\n initialChangeset.setIsNormalized(true);\n\n var squashedChangeset = new ChangeSet();\n testProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](testProperty);\n var changes = testProperty.serialize({ 'dirtyOnly': true });\n testProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n squashedChangeset.applyChangeSet(changes);\n }\n\n if (in_options.post) {\n in_options.post(squashedChangeset.getSerializedChangeSet());\n }\n\n initialChangeset.applyChangeSet(squashedChangeset.getSerializedChangeSet());\n expect(initialChangeset.getSerializedChangeSet()).to.deep.equal(testProperty.serialize({ 'dirtyOnly': false }));\n };\n\n it('should work for multiple independent inserts', function() {\n testChangeSetSquashing({ callbacks: [insertNodeInRoot, insertNodeInRoot, insertNodeInRoot] });\n });\n\n it('should work for inserts followed by removes', function() {\n testChangeSetSquashing({\n callbacks: [insertNodeInRoot, insertNodeInRoot, removeFirstNodeInRoot, removeFirstNodeInRoot],\n post: function(changeset) {\n expect(changeset).to.be.empty;\n },\n });\n });\n\n it('of inserts and modifies should work', function() {\n testChangeSetSquashing({\n callbacks: [insertNodeInRoot, insertNodeInRoot, insertNodeInRoot, modifyEntry, modifyEntry],\n });\n });\n it('an insert, modify and a remove should give an empty changeset', function() {\n testChangeSetSquashing({\n callbacks: [insertNodeInRoot, modifyEntry, modifyEntry, removeFirstNodeInRoot],\n post: function(changeset) {\n expect(changeset).to.be.empty;\n },\n });\n });\n it('should work for modifies after an already existing insert', function() {\n testChangeSetSquashing({\n pre: insertNodeInRoot,\n callbacks: [modifyEntry, modifyEntry],\n });\n });\n it('of modify and remove after an already existing insert should work', function() {\n testChangeSetSquashing({\n pre: insertNodeInRoot,\n callbacks: [modifyEntry, removeFirstNodeInRoot],\n post: function(changeset) {\n expect(changeset['map<Int64>'].Int64Map).to.have.all.keys('remove');\n },\n });\n });\n it('of remove and insert should result in modify', function() {\n // Create two nodes with the same GUID\n testChangeSetSquashing({\n pre: function(root) {\n root._properties.Int64Map.insert('node1', new Int64(1, 1));\n },\n callbacks: [\n removeFirstNodeInRoot,\n function(root) {\n root._properties.Int64Map.insert('node1', new Int64(1, 2));\n },\n ],\n post: function(changeset) {\n expect(changeset['map<Int64>'].Int64Map).to.have.all.keys('modify');\n },\n });\n });\n });\n\n describe('Rebasing', function() {\n var testRebasing = function(in_options) {\n // Prepare the initial state\n var baseProperty1 = PropertyFactory.create('autodesk.tests:Int64MapTestPropertyID-1.0.0');\n if (in_options.prepare) {\n in_options.prepare(baseProperty1);\n }\n // Create two copies of this state\n var baseProperty2 = PropertyFactory.create('autodesk.tests:Int64MapTestPropertyID-1.0.0');\n baseProperty2.deserialize(baseProperty1.serialize({ 'dirtyOnly': false }));\n var baseProperty3 = PropertyFactory.create('autodesk.tests:Int64MapTestPropertyID-1.0.0');\n baseProperty3.deserialize(baseProperty1.serialize({ 'dirtyOnly': false }));\n\n // Make sure the states are clear\n baseProperty1.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n baseProperty2.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n baseProperty3.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n var initialChangeSet = baseProperty1.serialize({ 'dirtyOnly': false });\n\n // Apply the operations to the two properties in parallel\n if (in_options.op1) {\n in_options.op1(baseProperty1);\n }\n if (in_options.op2) {\n in_options.op2(baseProperty2);\n }\n\n // Get the ChangeSets\n var changeSet1 = new ChangeSet(baseProperty1.serialize({ 'dirtyOnly': true }));\n var changeSet2 = baseProperty2.serialize({ 'dirtyOnly': true });\n\n // Perform the actual rebase\n var conflicts = [];\n changeSet1._rebaseChangeSet(changeSet2, conflicts);\n\n var combinedChangeSet = new ChangeSet(initialChangeSet).clone();\n combinedChangeSet.setIsNormalized(true);\n combinedChangeSet.applyChangeSet(changeSet1);\n combinedChangeSet.applyChangeSet(changeSet2);\n\n if (in_options.compareToSequential) {\n if (in_options.op1) {\n in_options.op1(baseProperty3);\n }\n if (in_options.op2) {\n in_options.op2(baseProperty3);\n }\n var finalChangeSet = baseProperty3.serialize({ 'dirtyOnly': false });\n expect(finalChangeSet).to.be.deep.equal(combinedChangeSet.getSerializedChangeSet());\n }\n\n if (in_options.checkResult) {\n in_options.checkResult(conflicts, changeSet2, combinedChangeSet);\n }\n };\n\n it('with a NOP should be possible', function() {\n testRebasing({\n op2: insertEntryInRootWithUnqiueKey(),\n compareToSequential: true,\n });\n });\n\n it('with independent inserts should be possible', function() {\n testRebasing({\n op1: insertEntryInRootWithUnqiueKey(),\n op2: insertEntryInRootWithUnqiueKey(),\n compareToSequential: true,\n });\n });\n\n it('with independent removes should be possible', function() {\n testRebasing({\n prepare: function(root) {\n root._properties.Int64Map.insert('entry1', new Int64(1, 1));\n root._properties.Int64Map.insert('entry2', new Int64(1, 2));\n },\n op1: function(root) {\n root._properties.Int64Map.remove('entry1');\n },\n op2: function(root) {\n root._properties.Int64Map.remove('entry2');\n },\n compareToSequential: true,\n });\n });\n\n it('with a modify and a remove should possible', function() {\n testRebasing({\n prepare: function(root) {\n root._properties.Int64Map.insert('entry1', new Int64(1, 1));\n },\n op1: modifyEntry,\n op2: removeFirstNodeInRoot,\n compareToSequential: true,\n });\n });\n\n it('with a remove and a modify should possible', function() {\n testRebasing({\n prepare: function(root) {\n root._properties.Int64Map.insert('entry1', new Int64(1, 1));\n },\n op1: removeFirstNodeInRoot,\n op2: modifyEntry,\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE);\n expect(conflicts[0].path).to.be.equal('Int64Map[entry1]');\n expect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n },\n });\n });\n\n it('with two compatible removes should be possible', function() {\n testRebasing({\n prepare: function(root) {\n root._properties.Int64Map.insert('entry1', new Int64(1, 1));\n },\n op1: function(root) {\n root._properties.Int64Map.remove('entry1');\n },\n op2: function(root) {\n root._properties.Int64Map.remove('entry1');\n },\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n },\n });\n });\n\n it('with two conflicting modifies should be possible and report a conflict', function() {\n testRebasing({\n prepare: function(root) {\n root._properties.Int64Map.insert('entry1', new Int64(1, 1));\n },\n op1: function(root) {\n root._properties.Int64Map.set('entry1', new Int64(1, 2));\n },\n op2: function(root) {\n root._properties.Int64Map.set('entry1', new Int64(1, 3));\n },\n compareToSequential: true,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('Int64Map[entry1]');\n },\n });\n });\n\n it('with modify followed by remove+insert should be a conflicting set', function() {\n testRebasing({\n prepare: function(root) {\n root._properties.Int64Map.insert('entry1', new Int64(1, 1));\n },\n op1: modifyEntry,\n op2: function(root) {\n root._properties.Int64Map.remove('entry1');\n root._properties.Int64Map.insert('entry1', new Int64(1, 2));\n },\n compareToSequential: true,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('Int64Map[entry1]');\n },\n });\n });\n\n it('with remove+insert followed by modify should be a conflicting set', function() {\n testRebasing({\n prepare: function(root) {\n root._properties.Int64Map.insert('entry1', new Int64(1, 1));\n },\n op1: function(root) {\n root._properties.Int64Map.remove('entry1');\n root._properties.Int64Map.insert('entry1', new Int64(1, 2));\n },\n op2: function(root) {\n root._properties.Int64Map.set('entry1', new Int64(1, 3));\n },\n compareToSequential: true,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('Int64Map[entry1]');\n },\n });\n });\n\n it('with conflicting inserts should report conflict', function() {\n testRebasing({\n prepare: function(root) {\n },\n op1: function(root) {\n root._properties.Int64Map.insert('entry1', new Int64(1, 1));\n },\n op2: function(root) {\n root._properties.Int64Map.insert('entry1', new Int64(1, 2));\n },\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(changeSet['map<Int64>'].Int64Map).to.have.all.keys('modify');\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('Int64Map[entry1]');\n },\n });\n });\n });\n});\n"]}
1
+ {"version":3,"file":"int64MapProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/int64MapProperty.spec.js"],"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/* globals describe */\n\n/**\n * @fileoverview In this file, we will test the int64 map property\n * object described in /src/properties/valueMapProperty.js\n */\n\ndescribe(\"Int64MapProperty\", function () {\n\tvar PropertyFactory, BaseProperty, ChangeSet, myNode, Int64Map, Int64;\n\n\tbefore(function () {\n\t\t// Get all the objects we need in this test here.\n\t\tPropertyFactory = require(\"../..\").PropertyFactory;\n\t\tBaseProperty = require(\"../..\").BaseProperty;\n\t\tChangeSet = require(\"@fluid-experimental/property-changeset\").ChangeSet;\n\t\tInt64 = require(\"@fluid-experimental/property-common\").Int64;\n\n\t\t// Register a template with a set property for the tests\n\t\tvar TestPropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:Int64MapTestPropertyID-1.0.0\",\n\t\t\tinherits: [\"NamedProperty\"],\n\t\t\tproperties: [{ id: \"Int64Map\", typeid: \"Int64\", context: \"map\" }],\n\t\t};\n\n\t\tPropertyFactory._reregister(TestPropertyTemplate);\n\n\t\tmyNode = PropertyFactory.create(\"autodesk.tests:Int64MapTestPropertyID-1.0.0\");\n\t\tInt64Map = myNode._properties.Int64Map;\n\t});\n\n\t// Helper functions for the test cases\n\tvar keyCounter = 0;\n\tvar resetKeyCounter = function () {\n\t\tkeyCounter = 0;\n\t};\n\n\t// Inserts a node with a given key (a new one is generated when undefined)\n\tvar insertEntryInRootWithKey = function (key, root) {\n\t\tif (key === undefined) {\n\t\t\tkey = \"node\" + keyCounter++;\n\t\t}\n\t\troot._properties.Int64Map.insert(key, new Int64(1, keyCounter));\n\t};\n\n\t// Inserts a new node in the root\n\tvar insertNodeInRoot = function (root) {\n\t\tinsertEntryInRootWithKey(undefined, root);\n\t};\n\n\t// Returns a functor that will insert a node with a constant key\n\tvar insertEntryInRootWithUnqiueKey = function () {\n\t\tvar key = \"node\" + keyCounter++;\n\t\treturn insertEntryInRootWithKey.bind(undefined, key);\n\t};\n\n\t// Removes the first node from the root\n\tvar removeFirstNodeInRoot = function (root) {\n\t\tvar firstKey = root._properties.Int64Map.getIds()[0];\n\t\troot._properties.Int64Map.remove(firstKey);\n\t};\n\n\t// Modifies the first node\n\tvar modifyEntry = function (root) {\n\t\tvar firstKey = root._properties.Int64Map.getIds()[0];\n\t\troot._properties.Int64Map.set(\n\t\t\tfirstKey,\n\t\t\tnew Int64(1, root._properties.Int64Map.get(firstKey) + 1),\n\t\t);\n\t};\n\n\tdescribe(\"Testing creation, assignment and serialization\", function () {\n\t\tit(\"should be empty at the beginning\", function () {\n\t\t\texpect(Int64Map.getAsArray()).to.be.empty;\n\t\t\texpect(Int64Map.getEntriesReadOnly()).to.be.empty;\n\t\t\texpect(ChangeSet.isEmptyChangeSet(Int64Map.serialize({ dirtyOnly: false }))).to.be.ok;\n\t\t\texpect(ChangeSet.isEmptyChangeSet(Int64Map.serialize({ dirtyOnly: true }))).to.be.ok;\n\t\t});\n\n\t\tit(\"should be possible to add entries\", function () {\n\t\t\tInt64Map.insert(\"value1\", new Int64(1, 1));\n\t\t\texpect(Int64Map.get(\"value1\")).to.deep.equal(new Int64(1, 1));\n\t\t\tInt64Map.insert(\"value2\", new Int64(1, 2));\n\t\t\texpect(Int64Map.get(\"value2\")).to.deep.equal(new Int64(1, 2));\n\t\t\tInt64Map.insert(\"value3\", new Int64(1, 3));\n\t\t\texpect(Int64Map.get(\"value3\")).to.deep.equal(new Int64(1, 3));\n\t\t\tInt64Map.insert(\"value4\", \"123\");\n\t\t\texpect(Int64Map.get(\"value4\")).to.deep.equal(new Int64(123, 0));\n\t\t\tInt64Map.insert(\"value5\", 123);\n\t\t\texpect(Int64Map.get(\"value5\")).to.deep.equal(new Int64(123, 0));\n\t\t\texpect(Int64Map.getEntriesReadOnly()).to.deep.equal({\n\t\t\t\tvalue1: new Int64(1, 1),\n\t\t\t\tvalue2: new Int64(1, 2),\n\t\t\t\tvalue3: new Int64(1, 3),\n\t\t\t\tvalue4: new Int64(123, 0),\n\t\t\t\tvalue5: new Int64(123, 0),\n\t\t\t});\n\n\t\t\texpect(Int64Map.has(\"value1\")).to.be.ok;\n\t\t\texpect(Int64Map.has(\"value2\")).to.be.ok;\n\t\t\texpect(Int64Map.has(\"value3\")).to.be.ok;\n\t\t\texpect(Int64Map.has(\"value4\")).to.be.ok;\n\t\t\texpect(Int64Map.has(\"value5\")).to.be.ok;\n\n\t\t\texpect(Int64Map.serialize({ dirtyOnly: false })).to.deep.equal({\n\t\t\t\tinsert: {\n\t\t\t\t\tvalue1: [1, 1],\n\t\t\t\t\tvalue2: [1, 2],\n\t\t\t\t\tvalue3: [1, 3],\n\t\t\t\t\tvalue4: [123, 0],\n\t\t\t\t\tvalue5: [123, 0],\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should be possible to remove entries\", function () {\n\t\t\tInt64Map.remove(\"value1\");\n\t\t\texpect(Int64Map.has(\"value1\")).to.be.not.ok;\n\t\t\tInt64Map.remove(\"value2\");\n\t\t\texpect(Int64Map.has(\"value2\")).to.be.not.ok;\n\t\t\tInt64Map.remove(\"value3\");\n\t\t\texpect(Int64Map.has(\"value3\")).to.be.not.ok;\n\t\t\tInt64Map.remove(\"value4\");\n\t\t\texpect(Int64Map.has(\"value4\")).to.be.not.ok;\n\t\t\tInt64Map.remove(\"value5\");\n\t\t\texpect(Int64Map.has(\"value5\")).to.be.not.ok;\n\t\t\texpect(ChangeSet.isEmptyChangeSet(Int64Map.serialize({ dirtyOnly: false }))).to.be.ok;\n\t\t});\n\n\t\tit(\"a remove followed by an insert should become a modify\", function () {\n\t\t\tInt64Map.insert(\"value1\", new Int64(1, 1));\n\t\t\tInt64Map.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tInt64Map.remove(\"value1\");\n\t\t\tInt64Map.insert(\"value1\", new Int64(1, 2));\n\n\t\t\texpect(Int64Map.serialize({ dirtyOnly: true })).to.deep.equal({\n\t\t\t\tmodify: { value1: [1, 2] },\n\t\t\t});\n\n\t\t\t// This should also work for a set operation\n\t\t\tInt64Map.set(\"value1\", new Int64(1, 3));\n\t\t\texpect(Int64Map.serialize({ dirtyOnly: true })).to.deep.equal({\n\t\t\t\tmodify: { value1: [1, 3] },\n\t\t\t});\n\n\t\t\t// But setting the same value should give an empty ChangeSet\n\t\t\tInt64Map.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tInt64Map.set(\"value1\", new Int64(1, 3));\n\t\t\texpect(ChangeSet.isEmptyChangeSet(Int64Map.serialize({ dirtyOnly: true }))).to.be.ok;\n\n\t\t\t// This should be tracked separately for dirtyness and pending changes\n\t\t\tInt64Map.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tInt64Map.remove(\"value1\");\n\t\t\tInt64Map.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n\t\t\tInt64Map.insert(\"value1\", new Int64(1, 2));\n\n\t\t\texpect(\n\t\t\t\tInt64Map.serialize({\n\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\tincludeRootTypeid: false,\n\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t}),\n\t\t\t).to.deep.equal({\n\t\t\t\tmodify: { value1: [1, 2] },\n\t\t\t});\n\n\t\t\texpect(\n\t\t\t\tInt64Map.serialize({\n\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\tincludeRootTypeid: false,\n\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t\t}),\n\t\t\t).to.deep.equal({\n\t\t\t\tinsert: { value1: [1, 2] },\n\t\t\t});\n\t\t});\n\n\t\tit(\"deserialize should work\", function () {\n\t\t\tvar myInitialStateNode = PropertyFactory.create(\n\t\t\t\t\"autodesk.tests:Int64MapTestPropertyID-1.0.0\",\n\t\t\t);\n\t\t\tmyInitialStateNode._properties.Int64Map.insert(\"value1\", new Int64(1, 1));\n\t\t\tmyInitialStateNode._properties.Int64Map.insert(\"value2\", new Int64(1, 2));\n\t\t\tvar initialChangeSet = myInitialStateNode.serialize({ dirtyOnly: false });\n\n\t\t\t// Deserialize a copy into a second node and check that the chageset is correct\n\t\t\tvar myDeserializeNode1 = PropertyFactory.create(\n\t\t\t\t\"autodesk.tests:Int64MapTestPropertyID-1.0.0\",\n\t\t\t);\n\t\t\tvar changes = myDeserializeNode1.deserialize(initialChangeSet);\n\t\t\texpect(changes).to.deep.equal(initialChangeSet);\n\t\t\texpect(myDeserializeNode1.serialize({ dirtyOnly: false })).to.deep.equal(\n\t\t\t\tmyInitialStateNode.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t\tmyDeserializeNode1.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\t// Create a third copy\n\t\t\tvar myDeserializeNode2 = PropertyFactory.create(\n\t\t\t\t\"autodesk.tests:Int64MapTestPropertyID-1.0.0\",\n\t\t\t);\n\t\t\tmyDeserializeNode2.deserialize(initialChangeSet);\n\t\t\tmyDeserializeNode2.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\tmyInitialStateNode.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tmyInitialStateNode._properties.Int64Map.set(\"value1\", new Int64(1, 2));\n\t\t\tmyInitialStateNode._properties.Int64Map.remove(\"value2\");\n\t\t\tmyInitialStateNode._properties.Int64Map.insert(\"value3\", new Int64(1, 3));\n\n\t\t\tvar changesChangeSet = myInitialStateNode.serialize({ dirtyOnly: true });\n\t\t\tvar fullChangeSet = myInitialStateNode.serialize({ dirtyOnly: false });\n\n\t\t\tvar reportedChanges = myDeserializeNode1.deserialize(fullChangeSet);\n\t\t\texpect(myDeserializeNode1.serialize({ dirtyOnly: false })).to.deep.equal(\n\t\t\t\tmyInitialStateNode.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t\texpect(reportedChanges).to.deep.equal(changesChangeSet);\n\t\t\texpect(myDeserializeNode1.serialize({ dirtyOnly: true })).to.deep.equal(\n\t\t\t\tchangesChangeSet,\n\t\t\t);\n\n\t\t\tvar deserializeChanges = myDeserializeNode2.deserialize(fullChangeSet);\n\t\t\texpect(deserializeChanges).to.deep.equal(changesChangeSet);\n\t\t});\n\n\t\tit(\"inserting the same key twice should throw an exception\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"autodesk.tests:Int64MapTestPropertyID-1.0.0\");\n\t\t\trootNode._properties.Int64Map.insert(\"node1\", new Int64(1, 1));\n\t\t\texpect(function () {\n\t\t\t\trootNode._properties.Int64Map.insert(\"node1\", new Int64(1, 2));\n\t\t\t}).to.throw();\n\t\t});\n\n\t\tit(\"set should overwrite existing entry\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"autodesk.tests:Int64MapTestPropertyID-1.0.0\");\n\n\t\t\trootNode._properties.Int64Map.set(\"node1\", new Int64(1, 0));\n\t\t\trootNode._properties.Int64Map.set(\"node1\", new Int64(1, 1));\n\t\t\t// the set should overwrite the insert\n\t\t\texpect(rootNode.serialize({ dirtyOnly: true })[\"map<Int64>\"].Int64Map).to.have.all.keys(\n\t\t\t\t\"insert\",\n\t\t\t);\n\n\t\t\t// Overwriting with the same property shouldn't dirty the node\n\t\t\trootNode.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\trootNode._properties.Int64Map.set(\"node1\", new Int64(1, 1));\n\t\t\texpect(ChangeSet.isEmptyChangeSet(rootNode.serialize({ dirtyOnly: true }))).to.be.ok;\n\t\t\texpect(rootNode.isDirty()).to.be.false;\n\n\t\t\t// Overwriting with a different value should result in a modify\n\t\t\trootNode._properties.Int64Map.set(\"node1\", new Int64(1, 2));\n\t\t\texpect(rootNode.serialize({ dirtyOnly: true })[\"map<Int64>\"].Int64Map).to.have.all.keys(\n\t\t\t\t\"modify\",\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"squashing\", function () {\n\t\t//\n\t\t// Helper function which takes a sequence of callbacks that are suceessively executed\n\t\t// and the changes applied by the callbacks are separately tracked and squashed in a\n\t\t// a ChangeSet. This ChangeSet is then compared to the state in the property object\n\t\t//\n\t\t// Optionally, a a callback which controls the initial state before the squashing can\n\t\t// be given as first parameter\n\t\t//\n\t\tvar testChangeSetSquashing = function (in_options) {\n\t\t\tresetKeyCounter();\n\t\t\tvar testProperty = PropertyFactory.create(\n\t\t\t\t\"autodesk.tests:Int64MapTestPropertyID-1.0.0\",\n\t\t\t);\n\n\t\t\tvar callbacks = in_options.callbacks;\n\t\t\tif (in_options.pre) {\n\t\t\t\tin_options.pre(testProperty);\n\t\t\t}\n\n\t\t\tvar initialChangeset = new ChangeSet(testProperty.serialize({ dirtyOnly: false }));\n\t\t\tinitialChangeset.setIsNormalized(true);\n\n\t\t\tvar squashedChangeset = new ChangeSet();\n\t\t\ttestProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tfor (var i = 0; i < callbacks.length; i++) {\n\t\t\t\tcallbacks[i](testProperty);\n\t\t\t\tvar changes = testProperty.serialize({ dirtyOnly: true });\n\t\t\t\ttestProperty.cleanDirty(\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t);\n\n\t\t\t\tsquashedChangeset.applyChangeSet(changes);\n\t\t\t}\n\n\t\t\tif (in_options.post) {\n\t\t\t\tin_options.post(squashedChangeset.getSerializedChangeSet());\n\t\t\t}\n\n\t\t\tinitialChangeset.applyChangeSet(squashedChangeset.getSerializedChangeSet());\n\t\t\texpect(initialChangeset.getSerializedChangeSet()).to.deep.equal(\n\t\t\t\ttestProperty.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t};\n\n\t\tit(\"should work for multiple independent inserts\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertNodeInRoot, insertNodeInRoot, insertNodeInRoot],\n\t\t\t});\n\t\t});\n\n\t\tit(\"should work for inserts followed by removes\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeInRoot,\n\t\t\t\t\tinsertNodeInRoot,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"of inserts and modifies should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeInRoot,\n\t\t\t\t\tinsertNodeInRoot,\n\t\t\t\t\tinsertNodeInRoot,\n\t\t\t\t\tmodifyEntry,\n\t\t\t\t\tmodifyEntry,\n\t\t\t\t],\n\t\t\t});\n\t\t});\n\t\tit(\"an insert, modify and a remove should give an empty changeset\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertNodeInRoot, modifyEntry, modifyEntry, removeFirstNodeInRoot],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"should work for modifies after an already existing insert\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertNodeInRoot,\n\t\t\t\tcallbacks: [modifyEntry, modifyEntry],\n\t\t\t});\n\t\t});\n\t\tit(\"of modify and remove after an already existing insert should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertNodeInRoot,\n\t\t\t\tcallbacks: [modifyEntry, removeFirstNodeInRoot],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset[\"map<Int64>\"].Int64Map).to.have.all.keys(\"remove\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"of remove and insert should result in modify\", function () {\n\t\t\t// Create two nodes with the same GUID\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: function (root) {\n\t\t\t\t\troot._properties.Int64Map.insert(\"node1\", new Int64(1, 1));\n\t\t\t\t},\n\t\t\t\tcallbacks: [\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t\tfunction (root) {\n\t\t\t\t\t\troot._properties.Int64Map.insert(\"node1\", new Int64(1, 2));\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset[\"map<Int64>\"].Int64Map).to.have.all.keys(\"modify\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"Rebasing\", function () {\n\t\tvar testRebasing = function (in_options) {\n\t\t\t// Prepare the initial state\n\t\t\tvar baseProperty1 = PropertyFactory.create(\n\t\t\t\t\"autodesk.tests:Int64MapTestPropertyID-1.0.0\",\n\t\t\t);\n\t\t\tif (in_options.prepare) {\n\t\t\t\tin_options.prepare(baseProperty1);\n\t\t\t}\n\t\t\t// Create two copies of this state\n\t\t\tvar baseProperty2 = PropertyFactory.create(\n\t\t\t\t\"autodesk.tests:Int64MapTestPropertyID-1.0.0\",\n\t\t\t);\n\t\t\tbaseProperty2.deserialize(baseProperty1.serialize({ dirtyOnly: false }));\n\t\t\tvar baseProperty3 = PropertyFactory.create(\n\t\t\t\t\"autodesk.tests:Int64MapTestPropertyID-1.0.0\",\n\t\t\t);\n\t\t\tbaseProperty3.deserialize(baseProperty1.serialize({ dirtyOnly: false }));\n\n\t\t\t// Make sure the states are clear\n\t\t\tbaseProperty1.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tbaseProperty2.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tbaseProperty3.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\tvar initialChangeSet = baseProperty1.serialize({ dirtyOnly: false });\n\n\t\t\t// Apply the operations to the two properties in parallel\n\t\t\tif (in_options.op1) {\n\t\t\t\tin_options.op1(baseProperty1);\n\t\t\t}\n\t\t\tif (in_options.op2) {\n\t\t\t\tin_options.op2(baseProperty2);\n\t\t\t}\n\n\t\t\t// Get the ChangeSets\n\t\t\tvar changeSet1 = new ChangeSet(baseProperty1.serialize({ dirtyOnly: true }));\n\t\t\tvar changeSet2 = baseProperty2.serialize({ dirtyOnly: true });\n\n\t\t\t// Perform the actual rebase\n\t\t\tvar conflicts = [];\n\t\t\tchangeSet1._rebaseChangeSet(changeSet2, conflicts);\n\n\t\t\tvar combinedChangeSet = new ChangeSet(initialChangeSet).clone();\n\t\t\tcombinedChangeSet.setIsNormalized(true);\n\t\t\tcombinedChangeSet.applyChangeSet(changeSet1);\n\t\t\tcombinedChangeSet.applyChangeSet(changeSet2);\n\n\t\t\tif (in_options.compareToSequential) {\n\t\t\t\tif (in_options.op1) {\n\t\t\t\t\tin_options.op1(baseProperty3);\n\t\t\t\t}\n\t\t\t\tif (in_options.op2) {\n\t\t\t\t\tin_options.op2(baseProperty3);\n\t\t\t\t}\n\t\t\t\tvar finalChangeSet = baseProperty3.serialize({ dirtyOnly: false });\n\t\t\t\texpect(finalChangeSet).to.be.deep.equal(combinedChangeSet.getSerializedChangeSet());\n\t\t\t}\n\n\t\t\tif (in_options.checkResult) {\n\t\t\t\tin_options.checkResult(conflicts, changeSet2, combinedChangeSet);\n\t\t\t}\n\t\t};\n\n\t\tit(\"with a NOP should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\top2: insertEntryInRootWithUnqiueKey(),\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with independent inserts should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\top1: insertEntryInRootWithUnqiueKey(),\n\t\t\t\top2: insertEntryInRootWithUnqiueKey(),\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with independent removes should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.Int64Map.insert(\"entry1\", new Int64(1, 1));\n\t\t\t\t\troot._properties.Int64Map.insert(\"entry2\", new Int64(1, 2));\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.Int64Map.remove(\"entry1\");\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.Int64Map.remove(\"entry2\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with a modify and a remove should possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.Int64Map.insert(\"entry1\", new Int64(1, 1));\n\t\t\t\t},\n\t\t\t\top1: modifyEntry,\n\t\t\t\top2: removeFirstNodeInRoot,\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with a remove and a modify should possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.Int64Map.insert(\"entry1\", new Int64(1, 1));\n\t\t\t\t},\n\t\t\t\top1: removeFirstNodeInRoot,\n\t\t\t\top2: modifyEntry,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"Int64Map[entry1]\");\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two compatible removes should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.Int64Map.insert(\"entry1\", new Int64(1, 1));\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.Int64Map.remove(\"entry1\");\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.Int64Map.remove(\"entry1\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two conflicting modifies should be possible and report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.Int64Map.insert(\"entry1\", new Int64(1, 1));\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.Int64Map.set(\"entry1\", new Int64(1, 2));\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.Int64Map.set(\"entry1\", new Int64(1, 3));\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"Int64Map[entry1]\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with modify followed by remove+insert should be a conflicting set\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.Int64Map.insert(\"entry1\", new Int64(1, 1));\n\t\t\t\t},\n\t\t\t\top1: modifyEntry,\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.Int64Map.remove(\"entry1\");\n\t\t\t\t\troot._properties.Int64Map.insert(\"entry1\", new Int64(1, 2));\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"Int64Map[entry1]\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with remove+insert followed by modify should be a conflicting set\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.Int64Map.insert(\"entry1\", new Int64(1, 1));\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.Int64Map.remove(\"entry1\");\n\t\t\t\t\troot._properties.Int64Map.insert(\"entry1\", new Int64(1, 2));\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.Int64Map.set(\"entry1\", new Int64(1, 3));\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"Int64Map[entry1]\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting inserts should report conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.Int64Map.insert(\"entry1\", new Int64(1, 1));\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.Int64Map.insert(\"entry1\", new Int64(1, 2));\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(changeSet[\"map<Int64>\"].Int64Map).to.have.all.keys(\"modify\");\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"Int64Map[entry1]\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t});\n});\n"]}