@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":"stringProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/stringProperty.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/**\n * @fileoverview In this file, we will test the string property object described in /src/properties/stringProperty.js\n */\n\nconst { ChangeSet } = require('@fluid-experimental/property-changeset');\nconst { MSG } = require('@fluid-experimental/property-common').constants;\nconst _ = require('lodash');\nconst { PropertyFactory } = require('../..');\nconst { BaseProperty } = require('../..');\nconst deepCopy = _.cloneDeep;\n\ndescribe('StringProperty', function() {\n var changeSetWithEntries, removalChangeSet;\n var myStringProp;\n\n before(function() {\n // Register a template with a set property for the tests\n var SimpleStringTestPropertyTemplate = {\n typeid: 'autodesk.tests:SimpleStringTestProperty-1.0.0',\n properties: [\n { id: 'stringProperty', typeid: 'String' },\n ],\n };\n PropertyFactory._reregister(SimpleStringTestPropertyTemplate);\n\n myStringProp = PropertyFactory.create('String');\n });\n\n // Inserts a char into the string\n var insertText = function(stringProp) {\n stringProp.insertRange(0, 'x');\n };\n\n // Removes the first char from the string\n var removeText = function(stringProp) {\n stringProp.removeRange(0, 1);\n };\n\n // Modifies the text\n var modifyText = function(stringProp) {\n stringProp.setRange(0, 'y');\n };\n\n // set the text to a given string\n var setText = function(stringProp) {\n stringProp.value = 's';\n };\n\n describe('Testing creation, assignment and serialization', function() {\n it('should be empty at the beginning', function() {\n expect(myStringProp.value).to.equal('');\n expect(myStringProp.getValue()).to.equal('');\n expect(myStringProp.serialize({ 'dirtyOnly': true })).to.be.empty;\n expect(myStringProp.serialize({ 'dirtyOnly': false })).to.equal('');\n });\n\n it('should be possible to insert into the string', function() {\n // Text insertion\n myStringProp.insertRange(0, 'abef');\n expect(myStringProp.value).to.equal('abef');\n expect(myStringProp.getValue()).to.equal('abef');\n myStringProp.insertRange(2, 'cd');\n expect(myStringProp.value).to.equal('abcdef');\n expect(myStringProp.getValue()).to.equal('abcdef');\n changeSetWithEntries = myStringProp.serialize({ 'dirtyOnly': true });\n expect(myStringProp.serialize({ 'dirtyOnly': false })).to.equal('abcdef');\n var CS = myStringProp.serialize({ 'dirtyOnly': true });\n expect(CS.insert &&\n CS.insert[0] &&\n CS.insert[0][1] === 'abcdef').to.be.ok;\n });\n\n it('Should handle removals correctly', function() {\n myStringProp.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n myStringProp.removeRange(3, 2);\n expect(myStringProp.value).to.equal('abcf');\n expect(myStringProp.getValue()).to.equal('abcf');\n removalChangeSet = myStringProp._serialize(true, false, BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n expect(removalChangeSet).to.have.all.keys(['remove']);\n expect(removalChangeSet.remove).to.have.length(1);\n expect(removalChangeSet.remove[0]).to.deep.equal([3, 2]);\n });\n\n it('Should support deserialization', function() {\n var deserializedNode = PropertyFactory.create('String');\n var deserializedChanges1 = deserializedNode.deserialize(changeSetWithEntries);\n expect(deserializedChanges1).to.deep.equal(changeSetWithEntries);\n\n var deserializedChanges2 = deserializedNode.deserialize(changeSetWithEntries);\n expect(ChangeSet.isEmptyChangeSet(deserializedChanges2)).to.be.ok;\n\n var deserializedChanges3 = deserializedNode.deserialize({});\n expect(deserializedChanges3).to.deep.equal({ remove: [[0, 6]] });\n\n deserializedNode.deserialize(changeSetWithEntries); // refill\n var deserializedChanges4 = deserializedNode.deserialize('');\n expect(deserializedChanges4).to.deep.equal('');\n });\n\n it('inserting at a bad position should throw an exception', function() {\n expect(function() {\n myStringProp.insertRange(2242, 'x');\n }).to.throw();\n });\n\n it('insert after set should work', function() {\n var testString = PropertyFactory.create('String');\n testString.value = 'A';\n testString.insertRange(0, 'B');\n expect(testString.value).to.equal('BA');\n expect(testString.getValue()).to.equal('BA');\n expect(testString.serialize({ 'dirtyOnly': true })).to.equal('BA');\n });\n\n it('remove after set should work', function() {\n var testString = PropertyFactory.create('String');\n testString.value = 'ABCD';\n testString.removeRange(1, 2);\n expect(testString.value).to.equal('AD');\n expect(testString.getValue()).to.equal('AD');\n expect(testString.serialize({ 'dirtyOnly': true })).to.equal('AD');\n });\n\n it('modify after set should work', function() {\n var testString = PropertyFactory.create('String');\n testString.value = 'ABCD';\n testString.setRange(1, 'XY');\n expect(testString.value).to.equal('AXYD');\n expect(testString.getValue()).to.equal('AXYD');\n expect(testString.serialize({ 'dirtyOnly': true })).to.equal('AXYD');\n });\n\n it('set must stay a set', function() {\n var testString = PropertyFactory.create('String');\n testString.value = 'ABCD';\n expect(testString.serialize({ 'dirtyOnly': true })).to.equal('ABCD');\n testString.cleanDirty();\n testString.value = 'XY';\n expect(testString.serialize({ 'dirtyOnly': true })).to.equal('XY');\n testString.insertRange(2, 'Z');\n expect(testString.serialize({ 'dirtyOnly': true })).to.equal('XYZ');\n });\n\n it('.get should return a single letter', function() {\n var testString = PropertyFactory.create('String');\n testString.value = 'ABCD';\n expect(testString.get(2)).to.equal('C');\n });\n\n it('.getFullTypeid should return a string of the typeid', function() {\n var testString = PropertyFactory.create('String');\n expect(testString.getFullTypeid()).to.equal('String');\n });\n\n it('.insert should insert a string', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('AAAAA');\n testString.insert(1, 'BB');\n expect(testString.getValue()).to.equal('ABBAAAA');\n });\n\n it('.insertRange should insert a string', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('AAAAA');\n testString.insertRange(1, 'BB');\n expect(testString.getValue()).to.equal('ABBAAAA');\n });\n\n it('Should report dirtiness correctly when introducing a modification in certain order', function() {\n testString = PropertyFactory.create('String');\n let newValue = \"test\";\n const node = PropertyFactory.create('NodeProperty');\n node.insert('stringProp', testString);\n // Ignore insert changeset\n node.cleanDirty();\n node.applyChangeSet(JSON.parse(`{\"modify\":{\"String\":{\"stringProp\":{\"value\":\"${newValue}\",\"oldValue\": \"\"}}}}`));\n node.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n node.cleanDirty();\n let oldValue = newValue;\n newValue = \"test1\";\n node.applyChangeSet(JSON.parse(`{\"modify\":{\"String\":{\"stringProp\":{\"value\":\"${newValue}\",\"oldValue\": \"${oldValue}\"}}}}`));\n node.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n expect(Object.keys(node._serialize(true, false, 2))).to.have.length(1);\n });\n\n it('.insertRange should also accept an array with a single string', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('AAAAA');\n testString.insertRange(1, ['BC']);\n expect(testString.getValue()).to.equal('ABCAAAA');\n });\n\n it('.insertRange should join an array with more than one string', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('AAAAA');\n testString.insertRange(1, ['B', 'C', 'D']);\n expect(testString.getValue()).to.equal('ABCDAAAA');\n });\n\n it('.push should add a string to the end of the original string and return the length of the string', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('AAAAA');\n testString.push('BB');\n expect(testString.getValue()).to.equal('AAAAABB');\n expect(testString.push('CC')).to.equal(9);\n });\n });\n\n describe('inherited API methods', function() {\n it('.clear should remove all values from the string', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('AAAAA');\n expect(testString.getValue()).to.equal('AAAAA');\n testString.clear();\n expect(testString.getValue()).to.equal('');\n });\n\n it('.getEntriesReadOnly should return a string', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('AAAAA');\n expect(testString.getEntriesReadOnly()).to.equal('AAAAA');\n });\n\n it('.getIds should return an array of string ids', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('AAAAA');\n expect(testString.getIds()).to.deep.equal(['0', '1', '2', '3', '4']);\n });\n\n it('.getLength should return the length of the string', function() {\n var testString = PropertyFactory.create('String');\n expect(testString.getLength()).to.equal(0);\n testString.setValue('AAAAA');\n expect(testString.getLength()).to.equal(5);\n });\n\n it('.pop should remove the last letter', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('ABCDE');\n testString.pop();\n expect(testString.getValue()).to.equal('ABCD');\n });\n\n it('.remove should remove a single letter', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('ABCDE');\n testString.remove(2);\n expect(testString.getValue()).to.equal('ABDE');\n expect(testString.remove(1)).to.equal('B');\n });\n\n it('removeRange should remove a range of letters', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('ABCDEFG');\n testString.removeRange(1, 2);\n expect(testString.getValue()).to.equal('ADEFG');\n expect(testString.removeRange(2, 3)).to.equal('EFG');\n });\n\n it('@regression removeRange should clear a value longer than the special value \"setAsLiteral\"', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('AAAAAAAAAAAAAAAAAA');\n testString.removeRange(0, testString.getValue().length);\n expect(testString.getValue()).to.equal('');\n });\n\n it('set should set a single character', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('ABCDEFG');\n testString.set(3, 'x');\n expect(testString.getValue()).to.equal('ABCxEFG');\n });\n\n it('set should not allow setting more than one character', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('ABCDEFG');\n\n expect(function() { testString.set(0, 'ab'); }).to.throw(MSG.STRING_SET_ONE_CHAR);\n });\n\n it('set should throw if in_offset is not an integer', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('ABCDEFG');\n\n expect(function() { testString.set('test', 'a'); }).to.throw(MSG.STRING_SET_NEEDS_INDEX);\n });\n\n it('setRange should replace a range of letters', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('ABCDEFG');\n testString.setRange(3, 'xx');\n expect(testString.getValue()).to.equal('ABCxxFG');\n });\n\n it('setRange should throw if trying to set out of range', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('ABCDEFG');\n var fn = function() {\n testString.setRange(5, 'xxxxxx');\n };\n expect(fn).to.throw();\n });\n\n it('setRange should throw if in_offset is not an integer', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('ABCDEFG');\n var fn = function() {\n testString.setRange('test', 'xx');\n };\n expect(fn).to.throw(MSG.NOT_NUMBER);\n });\n\n it('shift should remove a single letter at the beginning of the string', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('ABCDEFG');\n testString.shift();\n expect(testString.getValue()).to.equal('BCDEFG');\n expect(testString.shift()).to.equal('B');\n });\n\n it('unshift should add letters at the beginning of a string and return the length of the string', function() {\n var testString = PropertyFactory.create('String');\n testString.setValue('ABC');\n testString.unshift('DE');\n expect(testString.getValue()).to.equal('DEABC');\n expect(testString.unshift('FGH')).to.equal(8);\n });\n });\n\n describe('change set specification should be met', function() {\n it('Should handle inserts correctly', function() {\n var t = PropertyFactory.create('String');\n t.value = 'test';\n t.cleanDirty();\n t.insert(2, '_test_');\n expect(t.serialize({ 'dirtyOnly': true })).to.deep.equal(\n {\n 'insert': [[2, '_test_']],\n },\n );\n });\n\n it('Should handle push correctly', function() {\n var t = PropertyFactory.create('String');\n t.value = 'test';\n t.cleanDirty();\n t.push('_test_');\n expect(t.serialize({ 'dirtyOnly': true })).to.deep.equal(\n {\n 'insert': [[4, '_test_']],\n },\n );\n });\n\n it('Should handle modifies correctly', function() {\n var t = PropertyFactory.create('String');\n t.value = 'test';\n t.cleanDirty();\n t.setRange(1, '_x_');\n expect(t.serialize({ 'dirtyOnly': true })).to.deep.equal(\n {\n 'modify': [[1, '_x_']],\n },\n );\n });\n });\n\n describe('squashing', function() {\n // Helper function to test the squashing for different containers\n var innerTestChangeSetSquashing = function(io_testProperty, io_stringProperty,\n io_initialChangeset, in_options, in_collection) {\n var squashedChangeset = new ChangeSet();\n io_testProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n var callbacks = in_options.callbacks;\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](io_stringProperty);\n var changes = io_testProperty.serialize({ 'dirtyOnly': true });\n io_testProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n squashedChangeset.applyChangeSet(changes);\n }\n\n if (in_options.post) {\n var SC = squashedChangeset.getSerializedChangeSet();\n if (in_collection && SC.modify) {\n SC = SC.modify;\n }\n in_options.post(SC);\n }\n io_initialChangeset.applyChangeSet(squashedChangeset.getSerializedChangeSet());\n };\n\n //\n // Helper function which takes a sequence of callbacks that are successively 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 var testProperty = PropertyFactory.create('autodesk.tests:SimpleStringTestProperty-1.0.0');\n var nodeTestProperty = PropertyFactory.create('NodeProperty');\n var stringInNodeProperty = PropertyFactory.create('String');\n nodeTestProperty.insert('stringProperty', stringInNodeProperty);\n var mapTestProperty = PropertyFactory.create('map<>');\n var stringInMapProperty = PropertyFactory.create('String');\n mapTestProperty.insert('stringProperty', stringInMapProperty);\n\n if (in_options.pre) {\n in_options.pre(testProperty._properties.stringProperty);\n in_options.pre(stringInNodeProperty);\n in_options.pre(stringInMapProperty);\n }\n\n var initialChangeset = new ChangeSet(testProperty.serialize());\n initialChangeset.setIsNormalized(true);\n var initialChangesetNode = new ChangeSet(nodeTestProperty.serialize());\n initialChangesetNode.setIsNormalized(true);\n var initialChangesetMap = new ChangeSet(mapTestProperty.serialize());\n initialChangesetMap.setIsNormalized(true);\n\n innerTestChangeSetSquashing(testProperty,\n testProperty._properties.stringProperty, initialChangeset, in_options);\n innerTestChangeSetSquashing(nodeTestProperty,\n stringInNodeProperty, initialChangesetNode, in_options, true);\n innerTestChangeSetSquashing(mapTestProperty,\n stringInMapProperty, initialChangesetMap, in_options, true);\n\n if (!initialChangeset.getSerializedChangeSet().String) {\n // empty changeset\n expect(testProperty.serialize().String.stringProperty).to.equal('');\n } else {\n // according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n var initialChangesetString = initialChangeset.getSerializedChangeSet().String.stringProperty;\n if (!_.isString(initialChangesetString)) {\n initialChangesetString = initialChangesetString.insert[0][1];\n }\n expect(initialChangesetString).to.deep.equal(testProperty.serialize().String.stringProperty);\n }\n\n if (!initialChangesetNode.getSerializedChangeSet().insert) {\n // empty changeset\n expect(nodeTestProperty.serialize().insert.String.stringProperty).to.equal('');\n } else {\n // according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n var nodeInitialChangesetString = initialChangesetNode.getSerializedChangeSet()\n .insert.String.stringProperty;\n if (!_.isString(nodeInitialChangesetString)) {\n nodeInitialChangesetString = nodeInitialChangesetString.insert[0][1];\n }\n expect(nodeInitialChangesetString).to.deep.equal(nodeTestProperty.serialize()\n .insert.String.stringProperty);\n }\n\n if (!initialChangesetMap.getSerializedChangeSet().insert) {\n // empty changeset\n expect(mapTestProperty.serialize().insert.String.stringProperty).to.equal('');\n } else {\n // according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n var mapInitialChangesetString = initialChangesetMap.getSerializedChangeSet()\n .insert.String.stringProperty;\n if (!_.isString(mapInitialChangesetString)) {\n mapInitialChangesetString = mapInitialChangesetString.insert[0][1];\n }\n expect(mapInitialChangesetString).to.deep.equal(mapTestProperty.serialize().insert.String.stringProperty);\n }\n };\n\n it('should work for multiple independent inserts', function() {\n testChangeSetSquashing({ callbacks: [insertText, insertText, insertText] });\n });\n\n it('should work for inserts followed by removes', function() {\n testChangeSetSquashing({\n callbacks: [insertText, insertText, removeText, removeText],\n post: function(changeset) {\n expect(changeset).to.be.empty;\n },\n });\n });\n\n it('should work for mixed modifies and inserts', function() {\n testChangeSetSquashing({\n callbacks: [insertText, modifyText, insertText, modifyText],\n });\n });\n\n it('an insert, modify and a remove should give an empty changeset', function() {\n testChangeSetSquashing({\n callbacks: [insertText, modifyText, removeText],\n post: function(changeset) {\n expect(changeset).to.be.empty;\n },\n });\n });\n it('work for modifies after an already existing insert', function() {\n testChangeSetSquashing({\n pre: insertText,\n callbacks: [modifyText, modifyText],\n });\n });\n it('of modify and remove after an already existing insert should work', function() {\n testChangeSetSquashing({\n pre: insertText,\n callbacks: [modifyText, removeText],\n post: function(changeset) {\n expect(changeset.String.stringProperty).to.have.all.keys('remove');\n },\n });\n });\n\n it('modify after set should work', function() {\n testChangeSetSquashing({\n callbacks: [setText, modifyText],\n post: function(changeset) {\n expect(changeset.String.stringProperty).to.equal('y');\n },\n });\n });\n\n it('set after pre-insert and insert should work', function() {\n testChangeSetSquashing({\n pre: insertText,\n callbacks: [insertText, modifyText, setText],\n post: function(changeset) {\n expect(changeset.String.stringProperty).to.equal('s');\n },\n });\n });\n\n it('insert after set should work', function() {\n testChangeSetSquashing({\n callbacks: [setText, insertText],\n post: function(changeset) {\n expect(changeset.String.stringProperty).to.equal('xs');\n },\n });\n });\n\n it('insert, set, insert/modify should work', function() {\n testChangeSetSquashing({\n callbacks: [insertText, setText, insertText, modifyText],\n post: function(changeset) {\n expect(changeset.String.stringProperty).to.equal('ys');\n },\n });\n });\n\n it('insert, set, insert/modify, set should work', function() {\n testChangeSetSquashing({\n callbacks: [insertText, setText, insertText, modifyText, setText],\n post: function(changeset) {\n expect(changeset.String.stringProperty).to.equal('s');\n },\n });\n });\n });\n\n describe('Rebasing', function() {\n var createPropertyForRebaseTestByTemplate = function() {\n return PropertyFactory.create('autodesk.tests:SimpleStringTestProperty-1.0.0');\n };\n\n var createNodePropertyForRebase = function() {\n var nodeTestProperty = PropertyFactory.create('NodeProperty');\n var stringInNodeProperty = PropertyFactory.create('String');\n nodeTestProperty.insert('stringProperty', stringInNodeProperty);\n return nodeTestProperty;\n };\n\n var createMapPropertyForRebase = function() {\n var mapTestProperty = PropertyFactory.create('map<>');\n var stringInNodeProperty = PropertyFactory.create('String');\n mapTestProperty.insert('stringProperty', stringInNodeProperty);\n return mapTestProperty;\n };\n\n var getStringPropertyFromNode = function(in_testProperty) {\n return in_testProperty._properties.stringProperty;\n };\n\n var getStringPropertyFromMap = function(in_testProperty) {\n return in_testProperty.get('stringProperty');\n };\n\n var testRebasingInner = function(in_creator, in_getInnerProperty, in_options, in_isCollection) {\n // Prepare the initial state\n var baseProperty1 = in_creator();\n if (in_options.prepare) {\n in_options.prepare(in_getInnerProperty(baseProperty1));\n }\n // Create two copies of this state\n var baseProperty2 = in_creator();\n baseProperty2.deserialize(baseProperty1._serialize(false));\n var baseProperty3 = in_creator();\n baseProperty3.deserialize(baseProperty1._serialize(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(false);\n\n // Apply the operations to the two properties in parallel\n if (in_options.op1) {\n in_options.op1(in_getInnerProperty(baseProperty1));\n }\n if (in_options.op2) {\n in_options.op2(in_getInnerProperty(baseProperty2));\n }\n\n // Get the ChangeSets\n var changeSet1 = new ChangeSet(baseProperty1._serialize(true));\n var changeSet2 = baseProperty2._serialize(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(in_getInnerProperty(baseProperty3));\n }\n if (in_options.op2) {\n in_options.op2(in_getInnerProperty(baseProperty3));\n }\n var finalChangeSet = baseProperty3._serialize(false);\n if (in_isCollection && finalChangeSet.insert) {\n finalChangeSet = finalChangeSet.insert;\n }\n\n var combinedSerialized = combinedChangeSet.getSerializedChangeSet();\n if (in_isCollection && combinedSerialized.insert) {\n combinedSerialized = combinedSerialized.insert;\n }\n\n if (!combinedSerialized.String) {\n // empty changeset\n expect(finalChangeSet.String.stringProperty).to.equal('');\n } else {\n // according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n var combinedChangeSetString = combinedSerialized.String.stringProperty;\n if (!_.isString(combinedChangeSetString)) {\n combinedChangeSetString = combinedChangeSetString.insert[0][1];\n }\n expect(combinedChangeSetString).to.deep.equal(finalChangeSet.String.stringProperty);\n }\n }\n\n if (in_options.checkResult) {\n if (in_isCollection && changeSet2.modify) {\n changeSet2 = changeSet2.modify;\n }\n combinedChangeSet = combinedChangeSet.getSerializedChangeSet();\n if (in_isCollection && combinedChangeSet.insert) {\n combinedChangeSet = combinedChangeSet.insert;\n }\n in_options.checkResult(conflicts, changeSet2, combinedChangeSet);\n }\n };\n\n var testRebasing = function(in_options) {\n testRebasingInner(createPropertyForRebaseTestByTemplate, getStringPropertyFromNode, in_options);\n testRebasingInner(createNodePropertyForRebase, getStringPropertyFromNode, in_options, true);\n testRebasingInner(createMapPropertyForRebase, getStringPropertyFromMap, in_options, true);\n };\n\n it('with a NOP should be possible', function() {\n testRebasing({\n op2: insertText,\n compareToSequential: true,\n });\n });\n\n it('with independent inserts should be possible', function() {\n testRebasing({\n op1: insertText,\n op2: insertText,\n compareToSequential: true,\n });\n });\n\n it('with independent removes should be possible', function() {\n testRebasing({\n prepare: function(root) {\n insertText(root);\n insertText(root);\n },\n op1: function(root) {\n root.removeRange(1, 1);\n },\n op2: function(root) {\n root.removeRange(0, 1);\n },\n compareToSequential: true,\n });\n });\n\n it('with a modify and a remove should possible', function() {\n testRebasing({\n prepare: insertText,\n op1: modifyText,\n op2: removeText,\n compareToSequential: true,\n });\n });\n\n it('with a remove and a modify should possible', function() {\n testRebasing({\n prepare: insertText,\n op1: removeText,\n op2: modifyText,\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('stringProperty');\n },\n });\n });\n\n it('with two compatible removes should be possible', function() {\n testRebasing({\n prepare: insertText,\n op1: removeText,\n op2: removeText,\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n },\n });\n });\n\n it('with two independent modifies should be possible', function() {\n testRebasing({\n prepare: function(root) {\n root.insertRange(0, 'ab');\n },\n op1: modifyText,\n op2: function(root) {\n root.setRange(1, 'z');\n },\n compareToSequential: true,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.be.empty;\n },\n });\n });\n // TODO: test with the same value\n it('with two conflicting modifies should be possible and report a conflict', function() {\n testRebasing({\n prepare: insertText,\n op1: function(stringProp) {\n stringProp.setRange(0, 'j');\n },\n op2: modifyText,\n compareToSequential: true,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(changeSet.String.stringProperty.modify[0][1]).to.equal('y');\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('stringProperty');\n },\n });\n });\n\n it('with modify followed by remove+insert should work', function() {\n testRebasing({\n prepare: insertText,\n op1: modifyText,\n op2: function(root) {\n removeText(root);\n insertText(root);\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.REMOVE_AFTER_MODIFY);\n expect(conflicts[0].path).to.be.equal('stringProperty');\n expect(changeSet.String.stringProperty).to.have.all.keys('remove', 'insert');\n },\n });\n });\n\n it('with remove + insert followed by modify should report conflict', function() {\n testRebasing({\n prepare: insertText,\n op1: function(root) {\n removeText(root);\n insertText(root);\n },\n op2: modifyText,\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('stringProperty');\n },\n });\n });\n\n it('with conflicting inserts should report conflict', function() {\n testRebasing({\n prepare: insertText,\n op1: insertText,\n op2: insertText,\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.INSERTED_ENTRY_WITH_SAME_KEY);\n expect(conflicts[0].path).to.be.equal('stringProperty');\n },\n });\n });\n\n it('with conflicting remove and insert should keep the insert and move it to the correct position', function() {\n testRebasing({\n prepare: function(p) {\n p.insertRange(0, '0123456');\n },\n op1: function(p) {\n p.removeRange(2, 5);\n },\n op2: function(p) {\n p.insertRange(5, 't');\n },\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(0);\n expect(changeSet).to.deep.equal({\n 'String': { stringProperty: { insert: [[2, 't']] } },\n });\n },\n });\n });\n\n it('with touching remove and insert should not report conflict and keep them', function() {\n testRebasing({\n prepare: function(p) {\n p.insertRange(0, '0123456');\n },\n op1: function(p) {\n p.removeRange(2, 3);\n },\n op2: function(p) {\n p.insertRange(5, 'b');\n p.insertRange(2, 'a');\n },\n compareToSequential: false,\n checkResult: function(conflicts, rebasedCS2, combinedChangeSet) {\n expect(conflicts).to.have.length(0);\n expect(rebasedCS2).to.deep.equal({ 'String': { stringProperty: { insert: [[2, 'ab']] } } });\n expect(combinedChangeSet).to.deep.equal({ 'String': { 'stringProperty': '01ab56' } });\n },\n });\n });\n\n it('with conflicting set and insert should report a conflict', function() {\n testRebasing({\n prepare: insertText,\n op1: setText,\n op2: insertText,\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.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('stringProperty');\n expect(changeSet.String.stringProperty).to.be.equal('s');\n },\n });\n });\n\n it('with conflicting insert and set should report a conflict', function() {\n testRebasing({\n prepare: insertText,\n op1: insertText,\n op2: setText,\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.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('stringProperty');\n expect(changeSet.String.stringProperty).to.be.equal('s');\n },\n });\n });\n\n it('should correctly handle boundary cases', function() {\n var testChangeSet = function(in_CS, in_CS2) {\n var root = PropertyFactory.create('NodeProperty');\n var initialString = PropertyFactory.create('String');\n root.insert('str', initialString);\n initialString.value = 'AAAAAA';\n root.applyChangeSet(in_CS);\n if (in_CS2) {\n root.applyChangeSet(in_CS2);\n }\n return initialString.value;\n };\n\n var CS1 = new ChangeSet({ modify: { String: { str: { 'remove': [[2, 2]] } } } });\n var CS2 = new ChangeSet({ modify: { String: { str: { 'insert': [[2, '-'], [4, '-']] } } } });\n\n expect(testChangeSet(CS1.getSerializedChangeSet())).to.equal('AAAA');\n expect(testChangeSet(CS2.getSerializedChangeSet())).to.equal('AA-AA-AA');\n\n var conflicts = [];\n var rebasedCS1 = CS2._rebaseChangeSet(deepCopy(CS1.getSerializedChangeSet()), conflicts);\n var rebasedCS2 = CS1._rebaseChangeSet(deepCopy(CS2.getSerializedChangeSet()), conflicts);\n\n expect(rebasedCS1.modify.String.str.remove.length).to.equal(1);\n expect(testChangeSet(CS2.getSerializedChangeSet(), rebasedCS1)).to.equal('AA--AA');\n expect(testChangeSet(CS1.getSerializedChangeSet(), rebasedCS2)).to.equal('AA--AA');\n });\n });\n\n it('field \"length\" in schema should be ignored', function() {\n var SchemaStringWithLength = {\n typeid: 'autodesk.tests:SchemaStringWithLength-1.0.0',\n properties: [\n { id: 'stringProperty', typeid: 'String', length: 4 },\n ],\n };\n PropertyFactory.register(SchemaStringWithLength);\n\n var prop = PropertyFactory.create(SchemaStringWithLength.typeid);\n expect(prop.get('stringProperty').getValue()).to.equal('');\n });\n\n it.skip('@bugfix field \"length\" not a number in schema should be ignored', function() {\n var SchemaStringWithStringLength = {\n typeid: 'autodesk.tests:SchemaStringWithStringLength-1.0.0',\n properties: [\n { id: 'stringProperty', typeid: 'String', length: '4' },\n ],\n };\n PropertyFactory.register(SchemaStringWithStringLength);\n\n var prop = PropertyFactory.create(SchemaStringWithStringLength.typeid);\n expect(prop.get('stringProperty').getValue()).to.equal('');\n });\n});\n"]}
1
+ {"version":3,"file":"stringProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/stringProperty.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/**\n * @fileoverview In this file, we will test the string property object described in /src/properties/stringProperty.js\n */\n\nconst { ChangeSet } = require(\"@fluid-experimental/property-changeset\");\nconst { MSG } = require(\"@fluid-experimental/property-common\").constants;\nconst _ = require(\"lodash\");\nconst { PropertyFactory } = require(\"../..\");\nconst { BaseProperty } = require(\"../..\");\nconst deepCopy = _.cloneDeep;\n\ndescribe(\"StringProperty\", function () {\n\tvar changeSetWithEntries, removalChangeSet;\n\tvar myStringProp;\n\n\tbefore(function () {\n\t\t// Register a template with a set property for the tests\n\t\tvar SimpleStringTestPropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:SimpleStringTestProperty-1.0.0\",\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\" }],\n\t\t};\n\t\tPropertyFactory._reregister(SimpleStringTestPropertyTemplate);\n\n\t\tmyStringProp = PropertyFactory.create(\"String\");\n\t});\n\n\t// Inserts a char into the string\n\tvar insertText = function (stringProp) {\n\t\tstringProp.insertRange(0, \"x\");\n\t};\n\n\t// Removes the first char from the string\n\tvar removeText = function (stringProp) {\n\t\tstringProp.removeRange(0, 1);\n\t};\n\n\t// Modifies the text\n\tvar modifyText = function (stringProp) {\n\t\tstringProp.setRange(0, \"y\");\n\t};\n\n\t// set the text to a given string\n\tvar setText = function (stringProp) {\n\t\tstringProp.value = \"s\";\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(myStringProp.value).to.equal(\"\");\n\t\t\texpect(myStringProp.getValue()).to.equal(\"\");\n\t\t\texpect(myStringProp.serialize({ dirtyOnly: true })).to.be.empty;\n\t\t\texpect(myStringProp.serialize({ dirtyOnly: false })).to.equal(\"\");\n\t\t});\n\n\t\tit(\"should be possible to insert into the string\", function () {\n\t\t\t// Text insertion\n\t\t\tmyStringProp.insertRange(0, \"abef\");\n\t\t\texpect(myStringProp.value).to.equal(\"abef\");\n\t\t\texpect(myStringProp.getValue()).to.equal(\"abef\");\n\t\t\tmyStringProp.insertRange(2, \"cd\");\n\t\t\texpect(myStringProp.value).to.equal(\"abcdef\");\n\t\t\texpect(myStringProp.getValue()).to.equal(\"abcdef\");\n\t\t\tchangeSetWithEntries = myStringProp.serialize({ dirtyOnly: true });\n\t\t\texpect(myStringProp.serialize({ dirtyOnly: false })).to.equal(\"abcdef\");\n\t\t\tvar CS = myStringProp.serialize({ dirtyOnly: true });\n\t\t\texpect(CS.insert && CS.insert[0] && CS.insert[0][1] === \"abcdef\").to.be.ok;\n\t\t});\n\n\t\tit(\"Should handle removals correctly\", function () {\n\t\t\tmyStringProp.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n\t\t\tmyStringProp.removeRange(3, 2);\n\t\t\texpect(myStringProp.value).to.equal(\"abcf\");\n\t\t\texpect(myStringProp.getValue()).to.equal(\"abcf\");\n\t\t\tremovalChangeSet = myStringProp._serialize(\n\t\t\t\ttrue,\n\t\t\t\tfalse,\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t);\n\t\t\texpect(removalChangeSet).to.have.all.keys([\"remove\"]);\n\t\t\texpect(removalChangeSet.remove).to.have.length(1);\n\t\t\texpect(removalChangeSet.remove[0]).to.deep.equal([3, 2]);\n\t\t});\n\n\t\tit(\"Should support deserialization\", function () {\n\t\t\tvar deserializedNode = PropertyFactory.create(\"String\");\n\t\t\tvar deserializedChanges1 = deserializedNode.deserialize(changeSetWithEntries);\n\t\t\texpect(deserializedChanges1).to.deep.equal(changeSetWithEntries);\n\n\t\t\tvar deserializedChanges2 = deserializedNode.deserialize(changeSetWithEntries);\n\t\t\texpect(ChangeSet.isEmptyChangeSet(deserializedChanges2)).to.be.ok;\n\n\t\t\tvar deserializedChanges3 = deserializedNode.deserialize({});\n\t\t\texpect(deserializedChanges3).to.deep.equal({ remove: [[0, 6]] });\n\n\t\t\tdeserializedNode.deserialize(changeSetWithEntries); // refill\n\t\t\tvar deserializedChanges4 = deserializedNode.deserialize(\"\");\n\t\t\texpect(deserializedChanges4).to.deep.equal(\"\");\n\t\t});\n\n\t\tit(\"inserting at a bad position should throw an exception\", function () {\n\t\t\texpect(function () {\n\t\t\t\tmyStringProp.insertRange(2242, \"x\");\n\t\t\t}).to.throw();\n\t\t});\n\n\t\tit(\"insert after set should work\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"A\";\n\t\t\ttestString.insertRange(0, \"B\");\n\t\t\texpect(testString.value).to.equal(\"BA\");\n\t\t\texpect(testString.getValue()).to.equal(\"BA\");\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"BA\");\n\t\t});\n\n\t\tit(\"remove after set should work\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"ABCD\";\n\t\t\ttestString.removeRange(1, 2);\n\t\t\texpect(testString.value).to.equal(\"AD\");\n\t\t\texpect(testString.getValue()).to.equal(\"AD\");\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"AD\");\n\t\t});\n\n\t\tit(\"modify after set should work\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"ABCD\";\n\t\t\ttestString.setRange(1, \"XY\");\n\t\t\texpect(testString.value).to.equal(\"AXYD\");\n\t\t\texpect(testString.getValue()).to.equal(\"AXYD\");\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"AXYD\");\n\t\t});\n\n\t\tit(\"set must stay a set\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"ABCD\";\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"ABCD\");\n\t\t\ttestString.cleanDirty();\n\t\t\ttestString.value = \"XY\";\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"XY\");\n\t\t\ttestString.insertRange(2, \"Z\");\n\t\t\texpect(testString.serialize({ dirtyOnly: true })).to.equal(\"XYZ\");\n\t\t});\n\n\t\tit(\".get should return a single letter\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.value = \"ABCD\";\n\t\t\texpect(testString.get(2)).to.equal(\"C\");\n\t\t});\n\n\t\tit(\".getFullTypeid should return a string of the typeid\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\texpect(testString.getFullTypeid()).to.equal(\"String\");\n\t\t});\n\n\t\tit(\".insert should insert a string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.insert(1, \"BB\");\n\t\t\texpect(testString.getValue()).to.equal(\"ABBAAAA\");\n\t\t});\n\n\t\tit(\".insertRange should insert a string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.insertRange(1, \"BB\");\n\t\t\texpect(testString.getValue()).to.equal(\"ABBAAAA\");\n\t\t});\n\n\t\tit(\"Should report dirtiness correctly when introducing a modification in certain order\", function () {\n\t\t\ttestString = PropertyFactory.create(\"String\");\n\t\t\tlet newValue = \"test\";\n\t\t\tconst node = PropertyFactory.create(\"NodeProperty\");\n\t\t\tnode.insert(\"stringProp\", testString);\n\t\t\t// Ignore insert changeset\n\t\t\tnode.cleanDirty();\n\t\t\tnode.applyChangeSet(\n\t\t\t\tJSON.parse(\n\t\t\t\t\t`{\"modify\":{\"String\":{\"stringProp\":{\"value\":\"${newValue}\",\"oldValue\": \"\"}}}}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\tnode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\t\t\tnode.cleanDirty();\n\t\t\tlet oldValue = newValue;\n\t\t\tnewValue = \"test1\";\n\t\t\tnode.applyChangeSet(\n\t\t\t\tJSON.parse(\n\t\t\t\t\t`{\"modify\":{\"String\":{\"stringProp\":{\"value\":\"${newValue}\",\"oldValue\": \"${oldValue}\"}}}}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\tnode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\t\t\texpect(Object.keys(node._serialize(true, false, 2))).to.have.length(1);\n\t\t});\n\n\t\tit(\".insertRange should also accept an array with a single string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.insertRange(1, [\"BC\"]);\n\t\t\texpect(testString.getValue()).to.equal(\"ABCAAAA\");\n\t\t});\n\n\t\tit(\".insertRange should join an array with more than one string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.insertRange(1, [\"B\", \"C\", \"D\"]);\n\t\t\texpect(testString.getValue()).to.equal(\"ABCDAAAA\");\n\t\t});\n\n\t\tit(\".push should add a string to the end of the original string and return the length of the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\ttestString.push(\"BB\");\n\t\t\texpect(testString.getValue()).to.equal(\"AAAAABB\");\n\t\t\texpect(testString.push(\"CC\")).to.equal(9);\n\t\t});\n\t});\n\n\tdescribe(\"inherited API methods\", function () {\n\t\tit(\".clear should remove all values from the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\texpect(testString.getValue()).to.equal(\"AAAAA\");\n\t\t\ttestString.clear();\n\t\t\texpect(testString.getValue()).to.equal(\"\");\n\t\t});\n\n\t\tit(\".getEntriesReadOnly should return a string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\texpect(testString.getEntriesReadOnly()).to.equal(\"AAAAA\");\n\t\t});\n\n\t\tit(\".getIds should return an array of string ids\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\texpect(testString.getIds()).to.deep.equal([\"0\", \"1\", \"2\", \"3\", \"4\"]);\n\t\t});\n\n\t\tit(\".getLength should return the length of the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\texpect(testString.getLength()).to.equal(0);\n\t\t\ttestString.setValue(\"AAAAA\");\n\t\t\texpect(testString.getLength()).to.equal(5);\n\t\t});\n\n\t\tit(\".pop should remove the last letter\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDE\");\n\t\t\ttestString.pop();\n\t\t\texpect(testString.getValue()).to.equal(\"ABCD\");\n\t\t});\n\n\t\tit(\".remove should remove a single letter\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDE\");\n\t\t\ttestString.remove(2);\n\t\t\texpect(testString.getValue()).to.equal(\"ABDE\");\n\t\t\texpect(testString.remove(1)).to.equal(\"B\");\n\t\t});\n\n\t\tit(\"removeRange should remove a range of letters\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\ttestString.removeRange(1, 2);\n\t\t\texpect(testString.getValue()).to.equal(\"ADEFG\");\n\t\t\texpect(testString.removeRange(2, 3)).to.equal(\"EFG\");\n\t\t});\n\n\t\tit('@regression removeRange should clear a value longer than the special value \"setAsLiteral\"', function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"AAAAAAAAAAAAAAAAAA\");\n\t\t\ttestString.removeRange(0, testString.getValue().length);\n\t\t\texpect(testString.getValue()).to.equal(\"\");\n\t\t});\n\n\t\tit(\"set should set a single character\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\ttestString.set(3, \"x\");\n\t\t\texpect(testString.getValue()).to.equal(\"ABCxEFG\");\n\t\t});\n\n\t\tit(\"set should not allow setting more than one character\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\n\t\t\texpect(function () {\n\t\t\t\ttestString.set(0, \"ab\");\n\t\t\t}).to.throw(MSG.STRING_SET_ONE_CHAR);\n\t\t});\n\n\t\tit(\"set should throw if in_offset is not an integer\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\n\t\t\texpect(function () {\n\t\t\t\ttestString.set(\"test\", \"a\");\n\t\t\t}).to.throw(MSG.STRING_SET_NEEDS_INDEX);\n\t\t});\n\n\t\tit(\"setRange should replace a range of letters\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\ttestString.setRange(3, \"xx\");\n\t\t\texpect(testString.getValue()).to.equal(\"ABCxxFG\");\n\t\t});\n\n\t\tit(\"setRange should throw if trying to set out of range\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\tvar fn = function () {\n\t\t\t\ttestString.setRange(5, \"xxxxxx\");\n\t\t\t};\n\t\t\texpect(fn).to.throw();\n\t\t});\n\n\t\tit(\"setRange should throw if in_offset is not an integer\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\tvar fn = function () {\n\t\t\t\ttestString.setRange(\"test\", \"xx\");\n\t\t\t};\n\t\t\texpect(fn).to.throw(MSG.NOT_NUMBER);\n\t\t});\n\n\t\tit(\"shift should remove a single letter at the beginning of the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABCDEFG\");\n\t\t\ttestString.shift();\n\t\t\texpect(testString.getValue()).to.equal(\"BCDEFG\");\n\t\t\texpect(testString.shift()).to.equal(\"B\");\n\t\t});\n\n\t\tit(\"unshift should add letters at the beginning of a string and return the length of the string\", function () {\n\t\t\tvar testString = PropertyFactory.create(\"String\");\n\t\t\ttestString.setValue(\"ABC\");\n\t\t\ttestString.unshift(\"DE\");\n\t\t\texpect(testString.getValue()).to.equal(\"DEABC\");\n\t\t\texpect(testString.unshift(\"FGH\")).to.equal(8);\n\t\t});\n\t});\n\n\tdescribe(\"change set specification should be met\", function () {\n\t\tit(\"Should handle inserts correctly\", function () {\n\t\t\tvar t = PropertyFactory.create(\"String\");\n\t\t\tt.value = \"test\";\n\t\t\tt.cleanDirty();\n\t\t\tt.insert(2, \"_test_\");\n\t\t\texpect(t.serialize({ dirtyOnly: true })).to.deep.equal({\n\t\t\t\tinsert: [[2, \"_test_\"]],\n\t\t\t});\n\t\t});\n\n\t\tit(\"Should handle push correctly\", function () {\n\t\t\tvar t = PropertyFactory.create(\"String\");\n\t\t\tt.value = \"test\";\n\t\t\tt.cleanDirty();\n\t\t\tt.push(\"_test_\");\n\t\t\texpect(t.serialize({ dirtyOnly: true })).to.deep.equal({\n\t\t\t\tinsert: [[4, \"_test_\"]],\n\t\t\t});\n\t\t});\n\n\t\tit(\"Should handle modifies correctly\", function () {\n\t\t\tvar t = PropertyFactory.create(\"String\");\n\t\t\tt.value = \"test\";\n\t\t\tt.cleanDirty();\n\t\t\tt.setRange(1, \"_x_\");\n\t\t\texpect(t.serialize({ dirtyOnly: true })).to.deep.equal({\n\t\t\t\tmodify: [[1, \"_x_\"]],\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"squashing\", function () {\n\t\t// Helper function to test the squashing for different containers\n\t\tvar innerTestChangeSetSquashing = function (\n\t\t\tio_testProperty,\n\t\t\tio_stringProperty,\n\t\t\tio_initialChangeset,\n\t\t\tin_options,\n\t\t\tin_collection,\n\t\t) {\n\t\t\tvar squashedChangeset = new ChangeSet();\n\t\t\tio_testProperty.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\tvar callbacks = in_options.callbacks;\n\t\t\tfor (var i = 0; i < callbacks.length; i++) {\n\t\t\t\tcallbacks[i](io_stringProperty);\n\t\t\t\tvar changes = io_testProperty.serialize({ dirtyOnly: true });\n\t\t\t\tio_testProperty.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\t\t\t\tsquashedChangeset.applyChangeSet(changes);\n\t\t\t}\n\n\t\t\tif (in_options.post) {\n\t\t\t\tvar SC = squashedChangeset.getSerializedChangeSet();\n\t\t\t\tif (in_collection && SC.modify) {\n\t\t\t\t\tSC = SC.modify;\n\t\t\t\t}\n\t\t\t\tin_options.post(SC);\n\t\t\t}\n\t\t\tio_initialChangeset.applyChangeSet(squashedChangeset.getSerializedChangeSet());\n\t\t};\n\n\t\t//\n\t\t// Helper function which takes a sequence of callbacks that are successively 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\tvar testProperty = PropertyFactory.create(\n\t\t\t\t\"autodesk.tests:SimpleStringTestProperty-1.0.0\",\n\t\t\t);\n\t\t\tvar nodeTestProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar stringInNodeProperty = PropertyFactory.create(\"String\");\n\t\t\tnodeTestProperty.insert(\"stringProperty\", stringInNodeProperty);\n\t\t\tvar mapTestProperty = PropertyFactory.create(\"map<>\");\n\t\t\tvar stringInMapProperty = PropertyFactory.create(\"String\");\n\t\t\tmapTestProperty.insert(\"stringProperty\", stringInMapProperty);\n\n\t\t\tif (in_options.pre) {\n\t\t\t\tin_options.pre(testProperty._properties.stringProperty);\n\t\t\t\tin_options.pre(stringInNodeProperty);\n\t\t\t\tin_options.pre(stringInMapProperty);\n\t\t\t}\n\n\t\t\tvar initialChangeset = new ChangeSet(testProperty.serialize());\n\t\t\tinitialChangeset.setIsNormalized(true);\n\t\t\tvar initialChangesetNode = new ChangeSet(nodeTestProperty.serialize());\n\t\t\tinitialChangesetNode.setIsNormalized(true);\n\t\t\tvar initialChangesetMap = new ChangeSet(mapTestProperty.serialize());\n\t\t\tinitialChangesetMap.setIsNormalized(true);\n\n\t\t\tinnerTestChangeSetSquashing(\n\t\t\t\ttestProperty,\n\t\t\t\ttestProperty._properties.stringProperty,\n\t\t\t\tinitialChangeset,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t\tinnerTestChangeSetSquashing(\n\t\t\t\tnodeTestProperty,\n\t\t\t\tstringInNodeProperty,\n\t\t\t\tinitialChangesetNode,\n\t\t\t\tin_options,\n\t\t\t\ttrue,\n\t\t\t);\n\t\t\tinnerTestChangeSetSquashing(\n\t\t\t\tmapTestProperty,\n\t\t\t\tstringInMapProperty,\n\t\t\t\tinitialChangesetMap,\n\t\t\t\tin_options,\n\t\t\t\ttrue,\n\t\t\t);\n\n\t\t\tif (!initialChangeset.getSerializedChangeSet().String) {\n\t\t\t\t// empty changeset\n\t\t\t\texpect(testProperty.serialize().String.stringProperty).to.equal(\"\");\n\t\t\t} else {\n\t\t\t\t// according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n\t\t\t\tvar initialChangesetString =\n\t\t\t\t\tinitialChangeset.getSerializedChangeSet().String.stringProperty;\n\t\t\t\tif (!_.isString(initialChangesetString)) {\n\t\t\t\t\tinitialChangesetString = initialChangesetString.insert[0][1];\n\t\t\t\t}\n\t\t\t\texpect(initialChangesetString).to.deep.equal(\n\t\t\t\t\ttestProperty.serialize().String.stringProperty,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!initialChangesetNode.getSerializedChangeSet().insert) {\n\t\t\t\t// empty changeset\n\t\t\t\texpect(nodeTestProperty.serialize().insert.String.stringProperty).to.equal(\"\");\n\t\t\t} else {\n\t\t\t\t// according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n\t\t\t\tvar nodeInitialChangesetString =\n\t\t\t\t\tinitialChangesetNode.getSerializedChangeSet().insert.String.stringProperty;\n\t\t\t\tif (!_.isString(nodeInitialChangesetString)) {\n\t\t\t\t\tnodeInitialChangesetString = nodeInitialChangesetString.insert[0][1];\n\t\t\t\t}\n\t\t\t\texpect(nodeInitialChangesetString).to.deep.equal(\n\t\t\t\t\tnodeTestProperty.serialize().insert.String.stringProperty,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!initialChangesetMap.getSerializedChangeSet().insert) {\n\t\t\t\t// empty changeset\n\t\t\t\texpect(mapTestProperty.serialize().insert.String.stringProperty).to.equal(\"\");\n\t\t\t} else {\n\t\t\t\t// according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n\t\t\t\tvar mapInitialChangesetString =\n\t\t\t\t\tinitialChangesetMap.getSerializedChangeSet().insert.String.stringProperty;\n\t\t\t\tif (!_.isString(mapInitialChangesetString)) {\n\t\t\t\t\tmapInitialChangesetString = mapInitialChangesetString.insert[0][1];\n\t\t\t\t}\n\t\t\t\texpect(mapInitialChangesetString).to.deep.equal(\n\t\t\t\t\tmapTestProperty.serialize().insert.String.stringProperty,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tit(\"should work for multiple independent inserts\", function () {\n\t\t\ttestChangeSetSquashing({ callbacks: [insertText, insertText, insertText] });\n\t\t});\n\n\t\tit(\"should work for inserts followed by removes\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, insertText, removeText, removeText],\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(\"should work for mixed modifies and inserts\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, modifyText, insertText, modifyText],\n\t\t\t});\n\t\t});\n\n\t\tit(\"an insert, modify and a remove should give an empty changeset\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, modifyText, removeText],\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(\"work for modifies after an already existing insert\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertText,\n\t\t\t\tcallbacks: [modifyText, modifyText],\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: insertText,\n\t\t\t\tcallbacks: [modifyText, removeText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.have.all.keys(\"remove\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"modify after set should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [setText, modifyText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"y\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"set after pre-insert and insert should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertText,\n\t\t\t\tcallbacks: [insertText, modifyText, setText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"s\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"insert after set should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [setText, insertText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"xs\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"insert, set, insert/modify should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, setText, insertText, modifyText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"ys\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"insert, set, insert/modify, set should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertText, setText, insertText, modifyText, setText],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset.String.stringProperty).to.equal(\"s\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"Rebasing\", function () {\n\t\tvar createPropertyForRebaseTestByTemplate = function () {\n\t\t\treturn PropertyFactory.create(\"autodesk.tests:SimpleStringTestProperty-1.0.0\");\n\t\t};\n\n\t\tvar createNodePropertyForRebase = function () {\n\t\t\tvar nodeTestProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar stringInNodeProperty = PropertyFactory.create(\"String\");\n\t\t\tnodeTestProperty.insert(\"stringProperty\", stringInNodeProperty);\n\t\t\treturn nodeTestProperty;\n\t\t};\n\n\t\tvar createMapPropertyForRebase = function () {\n\t\t\tvar mapTestProperty = PropertyFactory.create(\"map<>\");\n\t\t\tvar stringInNodeProperty = PropertyFactory.create(\"String\");\n\t\t\tmapTestProperty.insert(\"stringProperty\", stringInNodeProperty);\n\t\t\treturn mapTestProperty;\n\t\t};\n\n\t\tvar getStringPropertyFromNode = function (in_testProperty) {\n\t\t\treturn in_testProperty._properties.stringProperty;\n\t\t};\n\n\t\tvar getStringPropertyFromMap = function (in_testProperty) {\n\t\t\treturn in_testProperty.get(\"stringProperty\");\n\t\t};\n\n\t\tvar testRebasingInner = function (\n\t\t\tin_creator,\n\t\t\tin_getInnerProperty,\n\t\t\tin_options,\n\t\t\tin_isCollection,\n\t\t) {\n\t\t\t// Prepare the initial state\n\t\t\tvar baseProperty1 = in_creator();\n\t\t\tif (in_options.prepare) {\n\t\t\t\tin_options.prepare(in_getInnerProperty(baseProperty1));\n\t\t\t}\n\t\t\t// Create two copies of this state\n\t\t\tvar baseProperty2 = in_creator();\n\t\t\tbaseProperty2.deserialize(baseProperty1._serialize(false));\n\t\t\tvar baseProperty3 = in_creator();\n\t\t\tbaseProperty3.deserialize(baseProperty1._serialize(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(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(in_getInnerProperty(baseProperty1));\n\t\t\t}\n\t\t\tif (in_options.op2) {\n\t\t\t\tin_options.op2(in_getInnerProperty(baseProperty2));\n\t\t\t}\n\n\t\t\t// Get the ChangeSets\n\t\t\tvar changeSet1 = new ChangeSet(baseProperty1._serialize(true));\n\t\t\tvar changeSet2 = baseProperty2._serialize(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(in_getInnerProperty(baseProperty3));\n\t\t\t\t}\n\t\t\t\tif (in_options.op2) {\n\t\t\t\t\tin_options.op2(in_getInnerProperty(baseProperty3));\n\t\t\t\t}\n\t\t\t\tvar finalChangeSet = baseProperty3._serialize(false);\n\t\t\t\tif (in_isCollection && finalChangeSet.insert) {\n\t\t\t\t\tfinalChangeSet = finalChangeSet.insert;\n\t\t\t\t}\n\n\t\t\t\tvar combinedSerialized = combinedChangeSet.getSerializedChangeSet();\n\t\t\t\tif (in_isCollection && combinedSerialized.insert) {\n\t\t\t\t\tcombinedSerialized = combinedSerialized.insert;\n\t\t\t\t}\n\n\t\t\t\tif (!combinedSerialized.String) {\n\t\t\t\t\t// empty changeset\n\t\t\t\t\texpect(finalChangeSet.String.stringProperty).to.equal(\"\");\n\t\t\t\t} else {\n\t\t\t\t\t// according to the spec, the String changeset can either be a string or (insert|modify|remove) style\n\t\t\t\t\tvar combinedChangeSetString = combinedSerialized.String.stringProperty;\n\t\t\t\t\tif (!_.isString(combinedChangeSetString)) {\n\t\t\t\t\t\tcombinedChangeSetString = combinedChangeSetString.insert[0][1];\n\t\t\t\t\t}\n\t\t\t\t\texpect(combinedChangeSetString).to.deep.equal(\n\t\t\t\t\t\tfinalChangeSet.String.stringProperty,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (in_options.checkResult) {\n\t\t\t\tif (in_isCollection && changeSet2.modify) {\n\t\t\t\t\tchangeSet2 = changeSet2.modify;\n\t\t\t\t}\n\t\t\t\tcombinedChangeSet = combinedChangeSet.getSerializedChangeSet();\n\t\t\t\tif (in_isCollection && combinedChangeSet.insert) {\n\t\t\t\t\tcombinedChangeSet = combinedChangeSet.insert;\n\t\t\t\t}\n\t\t\t\tin_options.checkResult(conflicts, changeSet2, combinedChangeSet);\n\t\t\t}\n\t\t};\n\n\t\tvar testRebasing = function (in_options) {\n\t\t\ttestRebasingInner(\n\t\t\t\tcreatePropertyForRebaseTestByTemplate,\n\t\t\t\tgetStringPropertyFromNode,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t\ttestRebasingInner(\n\t\t\t\tcreateNodePropertyForRebase,\n\t\t\t\tgetStringPropertyFromNode,\n\t\t\t\tin_options,\n\t\t\t\ttrue,\n\t\t\t);\n\t\t\ttestRebasingInner(\n\t\t\t\tcreateMapPropertyForRebase,\n\t\t\t\tgetStringPropertyFromMap,\n\t\t\t\tin_options,\n\t\t\t\ttrue,\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: insertText,\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: insertText,\n\t\t\t\top2: insertText,\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\tinsertText(root);\n\t\t\t\t\tinsertText(root);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot.removeRange(1, 1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.removeRange(0, 1);\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: insertText,\n\t\t\t\top1: modifyText,\n\t\t\t\top2: removeText,\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: insertText,\n\t\t\t\top1: removeText,\n\t\t\t\top2: modifyText,\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(\"stringProperty\");\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: insertText,\n\t\t\t\top1: removeText,\n\t\t\t\top2: removeText,\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 independent modifies should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insertRange(0, \"ab\");\n\t\t\t\t},\n\t\t\t\top1: modifyText,\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.setRange(1, \"z\");\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.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\t// TODO: test with the same value\n\t\tit(\"with two conflicting modifies should be possible and report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: function (stringProp) {\n\t\t\t\t\tstringProp.setRange(0, \"j\");\n\t\t\t\t},\n\t\t\t\top2: modifyText,\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(changeSet.String.stringProperty.modify[0][1]).to.equal(\"y\");\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(\"stringProperty\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with modify followed by remove+insert should work\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: modifyText,\n\t\t\t\top2: function (root) {\n\t\t\t\t\tremoveText(root);\n\t\t\t\t\tinsertText(root);\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(\n\t\t\t\t\t\tChangeSet.ConflictType.REMOVE_AFTER_MODIFY,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t\texpect(changeSet.String.stringProperty).to.have.all.keys(\"remove\", \"insert\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with remove + insert followed by modify should report conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: function (root) {\n\t\t\t\t\tremoveText(root);\n\t\t\t\t\tinsertText(root);\n\t\t\t\t},\n\t\t\t\top2: modifyText,\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(\"stringProperty\");\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: insertText,\n\t\t\t\top1: insertText,\n\t\t\t\top2: insertText,\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.INSERTED_ENTRY_WITH_SAME_KEY,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting remove and insert should keep the insert and move it to the correct position\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (p) {\n\t\t\t\t\tp.insertRange(0, \"0123456\");\n\t\t\t\t},\n\t\t\t\top1: function (p) {\n\t\t\t\t\tp.removeRange(2, 5);\n\t\t\t\t},\n\t\t\t\top2: function (p) {\n\t\t\t\t\tp.insertRange(5, \"t\");\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(conflicts).to.have.length(0);\n\t\t\t\t\texpect(changeSet).to.deep.equal({\n\t\t\t\t\t\tString: { stringProperty: { insert: [[2, \"t\"]] } },\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with touching remove and insert should not report conflict and keep them\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (p) {\n\t\t\t\t\tp.insertRange(0, \"0123456\");\n\t\t\t\t},\n\t\t\t\top1: function (p) {\n\t\t\t\t\tp.removeRange(2, 3);\n\t\t\t\t},\n\t\t\t\top2: function (p) {\n\t\t\t\t\tp.insertRange(5, \"b\");\n\t\t\t\t\tp.insertRange(2, \"a\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, rebasedCS2, combinedChangeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(0);\n\t\t\t\t\texpect(rebasedCS2).to.deep.equal({\n\t\t\t\t\t\tString: { stringProperty: { insert: [[2, \"ab\"]] } },\n\t\t\t\t\t});\n\t\t\t\t\texpect(combinedChangeSet).to.deep.equal({\n\t\t\t\t\t\tString: { stringProperty: \"01ab56\" },\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting set and insert should report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: setText,\n\t\t\t\top2: insertText,\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(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t\texpect(changeSet.String.stringProperty).to.be.equal(\"s\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting insert and set should report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: insertText,\n\t\t\t\top1: insertText,\n\t\t\t\top2: setText,\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(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"stringProperty\");\n\t\t\t\t\texpect(changeSet.String.stringProperty).to.be.equal(\"s\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should correctly handle boundary cases\", function () {\n\t\t\tvar testChangeSet = function (in_CS, in_CS2) {\n\t\t\t\tvar root = PropertyFactory.create(\"NodeProperty\");\n\t\t\t\tvar initialString = PropertyFactory.create(\"String\");\n\t\t\t\troot.insert(\"str\", initialString);\n\t\t\t\tinitialString.value = \"AAAAAA\";\n\t\t\t\troot.applyChangeSet(in_CS);\n\t\t\t\tif (in_CS2) {\n\t\t\t\t\troot.applyChangeSet(in_CS2);\n\t\t\t\t}\n\t\t\t\treturn initialString.value;\n\t\t\t};\n\n\t\t\tvar CS1 = new ChangeSet({ modify: { String: { str: { remove: [[2, 2]] } } } });\n\t\t\tvar CS2 = new ChangeSet({\n\t\t\t\tmodify: {\n\t\t\t\t\tString: {\n\t\t\t\t\t\tstr: {\n\t\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t\t[2, \"-\"],\n\t\t\t\t\t\t\t\t[4, \"-\"],\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\texpect(testChangeSet(CS1.getSerializedChangeSet())).to.equal(\"AAAA\");\n\t\t\texpect(testChangeSet(CS2.getSerializedChangeSet())).to.equal(\"AA-AA-AA\");\n\n\t\t\tvar conflicts = [];\n\t\t\tvar rebasedCS1 = CS2._rebaseChangeSet(\n\t\t\t\tdeepCopy(CS1.getSerializedChangeSet()),\n\t\t\t\tconflicts,\n\t\t\t);\n\t\t\tvar rebasedCS2 = CS1._rebaseChangeSet(\n\t\t\t\tdeepCopy(CS2.getSerializedChangeSet()),\n\t\t\t\tconflicts,\n\t\t\t);\n\n\t\t\texpect(rebasedCS1.modify.String.str.remove.length).to.equal(1);\n\t\t\texpect(testChangeSet(CS2.getSerializedChangeSet(), rebasedCS1)).to.equal(\"AA--AA\");\n\t\t\texpect(testChangeSet(CS1.getSerializedChangeSet(), rebasedCS2)).to.equal(\"AA--AA\");\n\t\t});\n\t});\n\n\tit('field \"length\" in schema should be ignored', function () {\n\t\tvar SchemaStringWithLength = {\n\t\t\ttypeid: \"autodesk.tests:SchemaStringWithLength-1.0.0\",\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\", length: 4 }],\n\t\t};\n\t\tPropertyFactory.register(SchemaStringWithLength);\n\n\t\tvar prop = PropertyFactory.create(SchemaStringWithLength.typeid);\n\t\texpect(prop.get(\"stringProperty\").getValue()).to.equal(\"\");\n\t});\n\n\tit.skip('@bugfix field \"length\" not a number in schema should be ignored', function () {\n\t\tvar SchemaStringWithStringLength = {\n\t\t\ttypeid: \"autodesk.tests:SchemaStringWithStringLength-1.0.0\",\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\", length: \"4\" }],\n\t\t};\n\t\tPropertyFactory.register(SchemaStringWithStringLength);\n\n\t\tvar prop = PropertyFactory.create(SchemaStringWithStringLength.typeid);\n\t\texpect(prop.get(\"stringProperty\").getValue()).to.equal(\"\");\n\t});\n});\n"]}
@@ -6,66 +6,76 @@
6
6
  * @fileoverview In this file, we will test the functions of 64 bit Uinteger properties described in
7
7
  * /src/shared/property_sets/properties/int_property.js
8
8
  */
9
- const { MSG } = require('@fluid-experimental/property-common').constants;
10
- const { Uint64 } = require('@fluid-experimental/property-common');
11
- const { PropertyFactory } = require('../..');
12
- describe('Test Uint64Property', function () {
13
- it('should correctly setValue when passed a number', function () {
14
- const prop = PropertyFactory.create('Uint64');
9
+ const { MSG } = require("@fluid-experimental/property-common").constants;
10
+ const { Uint64 } = require("@fluid-experimental/property-common");
11
+ const { PropertyFactory } = require("../..");
12
+ describe("Test Uint64Property", function () {
13
+ it("should correctly setValue when passed a number", function () {
14
+ const prop = PropertyFactory.create("Uint64");
15
15
  const value = 123;
16
16
  prop.setValue(value);
17
17
  expect(prop.getValueLow()).to.equal(value);
18
18
  expect(prop.getValueHigh()).to.equal(0);
19
19
  expect(prop.toString()).to.equal(value.toString());
20
20
  });
21
- it('should throw when setValue is passed a negative number', function () {
22
- const prop = PropertyFactory.create('Uint64');
21
+ it("should throw when setValue is passed a negative number", function () {
22
+ const prop = PropertyFactory.create("Uint64");
23
23
  const value = -123;
24
- expect(() => { prop.setValue(value); }).to.throw();
24
+ expect(() => {
25
+ prop.setValue(value);
26
+ }).to.throw();
25
27
  });
26
- it('should correctly setValue when passed a large number ( larger than 2^53)', function () {
27
- const prop = PropertyFactory.create('Int64');
28
+ it("should correctly setValue when passed a large number ( larger than 2^53)", function () {
29
+ const prop = PropertyFactory.create("Int64");
28
30
  const value = Math.pow(2, 64) - 1000;
29
31
  prop.setValue(value);
30
32
  expect(prop.getValueLow()).to.equal(384);
31
33
  expect(prop.getValueHigh()).to.equal(4294967296);
32
34
  expect(prop.toString()).to.equal(value.toString());
33
35
  });
34
- it('should correctly setValue when passed a string', function () {
35
- const prop = PropertyFactory.create('Uint64');
36
- const value = '1234567890';
36
+ it("should correctly setValue when passed a string", function () {
37
+ const prop = PropertyFactory.create("Uint64");
38
+ const value = "1234567890";
37
39
  prop.setValue(value);
38
40
  expect(prop.getValueLow()).to.equal(1234567890);
39
41
  expect(prop.getValueHigh()).to.equal(0);
40
- expect(prop.toString()).to.equal('1234567890');
42
+ expect(prop.toString()).to.equal("1234567890");
41
43
  });
42
- it('should throw error when passed a string with non numbers', function () {
43
- const prop = PropertyFactory.create('Uint64');
44
- expect(prop.setValue.bind(prop, 'error')).to.throw(MSG.CANNOT_PARSE_INVALID_CHARACTERS + 'error');
44
+ it("should throw error when passed a string with non numbers", function () {
45
+ const prop = PropertyFactory.create("Uint64");
46
+ expect(prop.setValue.bind(prop, "error")).to.throw(MSG.CANNOT_PARSE_INVALID_CHARACTERS + "error");
45
47
  });
46
- it('should correctly convert to string', function () {
47
- const prop = PropertyFactory.create('Uint64');
48
+ it("should correctly convert to string", function () {
49
+ const prop = PropertyFactory.create("Uint64");
48
50
  prop.value = new Uint64(845094001, 1810905006);
49
- expect(prop.toString()).to.be.equal('7777777777777777777');
50
- prop.value = new Uint64(0, 0xFFFFFFFF);
51
- expect(prop.toString()).to.be.equal('18446744069414584320');
52
- prop.value = new Uint64(0xFFFFFFFF, 0xFFFFFFFF);
53
- expect(prop.toString()).to.be.equal('18446744073709551615');
51
+ expect(prop.toString()).to.be.equal("7777777777777777777");
52
+ prop.value = new Uint64(0, 0xffffffff);
53
+ expect(prop.toString()).to.be.equal("18446744069414584320");
54
+ prop.value = new Uint64(0xffffffff, 0xffffffff);
55
+ expect(prop.toString()).to.be.equal("18446744073709551615");
54
56
  });
55
- it('should work correctly when explicitly set fromString', function () {
56
- const prop = PropertyFactory.create('Uint64');
57
- expect(function () { prop.fromString('-1'); }).to.throw();
58
- expect(function () { prop.fromString('abcd'); }).to.throw();
59
- expect(function () { prop.fromString('22545455', 37); }).to.throw();
60
- expect(function () { prop.fromString('22545455', 1); }).to.throw();
61
- prop.fromString('1a2b3c4d5e6f', 16);
62
- expect(prop.toString(16)).to.be.equal('1a2b3c4d5e6f');
63
- var maxUintString = new Array(65).join('1');
57
+ it("should work correctly when explicitly set fromString", function () {
58
+ const prop = PropertyFactory.create("Uint64");
59
+ expect(function () {
60
+ prop.fromString("-1");
61
+ }).to.throw();
62
+ expect(function () {
63
+ prop.fromString("abcd");
64
+ }).to.throw();
65
+ expect(function () {
66
+ prop.fromString("22545455", 37);
67
+ }).to.throw();
68
+ expect(function () {
69
+ prop.fromString("22545455", 1);
70
+ }).to.throw();
71
+ prop.fromString("1a2b3c4d5e6f", 16);
72
+ expect(prop.toString(16)).to.be.equal("1a2b3c4d5e6f");
73
+ var maxUintString = new Array(65).join("1");
64
74
  prop.fromString(maxUintString, 2);
65
75
  expect(prop.toString(2)).to.be.equal(maxUintString);
66
76
  });
67
- it('should correctly dirty on set', function () {
68
- const prop = PropertyFactory.create('Uint64');
77
+ it("should correctly dirty on set", function () {
78
+ const prop = PropertyFactory.create("Uint64");
69
79
  prop.cleanDirty();
70
80
  expect(prop.isDirty()).to.be.false;
71
81
  prop.value = new Uint64(32, 42);
@@ -1 +1 @@
1
- {"version":3,"file":"uint64Property.spec.js","sourceRoot":"","sources":["../../../src/test/properties/uint64Property.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/**\n * @fileoverview In this file, we will test the functions of 64 bit Uinteger properties described in\n * /src/shared/property_sets/properties/int_property.js\n */\n\nconst { MSG } = require('@fluid-experimental/property-common').constants;\nconst { Uint64 } = require('@fluid-experimental/property-common');\nconst { PropertyFactory } = require('../..');\n\ndescribe('Test Uint64Property', function() {\n it('should correctly setValue when passed a number', function() {\n const prop = PropertyFactory.create('Uint64');\n const value = 123;\n prop.setValue(value);\n expect(prop.getValueLow()).to.equal(value);\n expect(prop.getValueHigh()).to.equal(0);\n expect(prop.toString()).to.equal(value.toString());\n });\n\n it('should throw when setValue is passed a negative number', function() {\n const prop = PropertyFactory.create('Uint64');\n const value = -123;\n expect(() => { prop.setValue(value); }).to.throw();\n });\n\n it('should correctly setValue when passed a large number ( larger than 2^53)', function() {\n const prop = PropertyFactory.create('Int64');\n const value = Math.pow(2, 64) - 1000;\n prop.setValue(value);\n expect(prop.getValueLow()).to.equal(384);\n expect(prop.getValueHigh()).to.equal(4294967296);\n expect(prop.toString()).to.equal(value.toString());\n });\n\n it('should correctly setValue when passed a string', function() {\n const prop = PropertyFactory.create('Uint64');\n const value = '1234567890';\n prop.setValue(value);\n expect(prop.getValueLow()).to.equal(1234567890);\n expect(prop.getValueHigh()).to.equal(0);\n expect(prop.toString()).to.equal('1234567890');\n });\n\n it('should throw error when passed a string with non numbers', function() {\n const prop = PropertyFactory.create('Uint64');\n expect(prop.setValue.bind(prop, 'error')).to.throw(MSG.CANNOT_PARSE_INVALID_CHARACTERS + 'error');\n });\n\n it('should correctly convert to string', function() {\n const prop = PropertyFactory.create('Uint64');\n\n prop.value = new Uint64(845094001, 1810905006);\n expect(prop.toString()).to.be.equal('7777777777777777777');\n\n prop.value = new Uint64(0, 0xFFFFFFFF);\n expect(prop.toString()).to.be.equal('18446744069414584320');\n\n prop.value = new Uint64(0xFFFFFFFF, 0xFFFFFFFF);\n expect(prop.toString()).to.be.equal('18446744073709551615');\n });\n\n it('should work correctly when explicitly set fromString', function() {\n const prop = PropertyFactory.create('Uint64');\n\n expect(function() { prop.fromString('-1'); }).to.throw();\n expect(function() { prop.fromString('abcd'); }).to.throw();\n\n expect(function() { prop.fromString('22545455', 37); }).to.throw();\n expect(function() { prop.fromString('22545455', 1); }).to.throw();\n\n prop.fromString('1a2b3c4d5e6f', 16);\n expect(prop.toString(16)).to.be.equal('1a2b3c4d5e6f');\n\n var maxUintString = new Array(65).join('1');\n prop.fromString(maxUintString, 2);\n expect(prop.toString(2)).to.be.equal(maxUintString);\n });\n\n it('should correctly dirty on set', function() {\n const prop = PropertyFactory.create('Uint64');\n prop.cleanDirty();\n expect(prop.isDirty()).to.be.false;\n prop.value = new Uint64(32, 42);\n expect(prop.isDirty()).to.be.true;\n\n prop.cleanDirty();\n expect(prop.isDirty()).to.be.false;\n prop.setValueHigh(66);\n expect(prop.isDirty()).to.be.true;\n prop.cleanDirty();\n prop.setValueHigh(66);\n expect(prop.isDirty()).to.be.false;\n\n prop.cleanDirty();\n expect(prop.isDirty()).to.be.false;\n prop.setValueLow(33);\n expect(prop.isDirty()).to.be.true;\n prop.cleanDirty();\n prop.setValueLow(33);\n expect(prop.isDirty()).to.be.false;\n });\n});\n"]}
1
+ {"version":3,"file":"uint64Property.spec.js","sourceRoot":"","sources":["../../../src/test/properties/uint64Property.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/**\n * @fileoverview In this file, we will test the functions of 64 bit Uinteger properties described in\n * /src/shared/property_sets/properties/int_property.js\n */\n\nconst { MSG } = require(\"@fluid-experimental/property-common\").constants;\nconst { Uint64 } = require(\"@fluid-experimental/property-common\");\nconst { PropertyFactory } = require(\"../..\");\n\ndescribe(\"Test Uint64Property\", function () {\n\tit(\"should correctly setValue when passed a number\", function () {\n\t\tconst prop = PropertyFactory.create(\"Uint64\");\n\t\tconst value = 123;\n\t\tprop.setValue(value);\n\t\texpect(prop.getValueLow()).to.equal(value);\n\t\texpect(prop.getValueHigh()).to.equal(0);\n\t\texpect(prop.toString()).to.equal(value.toString());\n\t});\n\n\tit(\"should throw when setValue is passed a negative number\", function () {\n\t\tconst prop = PropertyFactory.create(\"Uint64\");\n\t\tconst value = -123;\n\t\texpect(() => {\n\t\t\tprop.setValue(value);\n\t\t}).to.throw();\n\t});\n\n\tit(\"should correctly setValue when passed a large number ( larger than 2^53)\", function () {\n\t\tconst prop = PropertyFactory.create(\"Int64\");\n\t\tconst value = Math.pow(2, 64) - 1000;\n\t\tprop.setValue(value);\n\t\texpect(prop.getValueLow()).to.equal(384);\n\t\texpect(prop.getValueHigh()).to.equal(4294967296);\n\t\texpect(prop.toString()).to.equal(value.toString());\n\t});\n\n\tit(\"should correctly setValue when passed a string\", function () {\n\t\tconst prop = PropertyFactory.create(\"Uint64\");\n\t\tconst value = \"1234567890\";\n\t\tprop.setValue(value);\n\t\texpect(prop.getValueLow()).to.equal(1234567890);\n\t\texpect(prop.getValueHigh()).to.equal(0);\n\t\texpect(prop.toString()).to.equal(\"1234567890\");\n\t});\n\n\tit(\"should throw error when passed a string with non numbers\", function () {\n\t\tconst prop = PropertyFactory.create(\"Uint64\");\n\t\texpect(prop.setValue.bind(prop, \"error\")).to.throw(\n\t\t\tMSG.CANNOT_PARSE_INVALID_CHARACTERS + \"error\",\n\t\t);\n\t});\n\n\tit(\"should correctly convert to string\", function () {\n\t\tconst prop = PropertyFactory.create(\"Uint64\");\n\n\t\tprop.value = new Uint64(845094001, 1810905006);\n\t\texpect(prop.toString()).to.be.equal(\"7777777777777777777\");\n\n\t\tprop.value = new Uint64(0, 0xffffffff);\n\t\texpect(prop.toString()).to.be.equal(\"18446744069414584320\");\n\n\t\tprop.value = new Uint64(0xffffffff, 0xffffffff);\n\t\texpect(prop.toString()).to.be.equal(\"18446744073709551615\");\n\t});\n\n\tit(\"should work correctly when explicitly set fromString\", function () {\n\t\tconst prop = PropertyFactory.create(\"Uint64\");\n\n\t\texpect(function () {\n\t\t\tprop.fromString(\"-1\");\n\t\t}).to.throw();\n\t\texpect(function () {\n\t\t\tprop.fromString(\"abcd\");\n\t\t}).to.throw();\n\n\t\texpect(function () {\n\t\t\tprop.fromString(\"22545455\", 37);\n\t\t}).to.throw();\n\t\texpect(function () {\n\t\t\tprop.fromString(\"22545455\", 1);\n\t\t}).to.throw();\n\n\t\tprop.fromString(\"1a2b3c4d5e6f\", 16);\n\t\texpect(prop.toString(16)).to.be.equal(\"1a2b3c4d5e6f\");\n\n\t\tvar maxUintString = new Array(65).join(\"1\");\n\t\tprop.fromString(maxUintString, 2);\n\t\texpect(prop.toString(2)).to.be.equal(maxUintString);\n\t});\n\n\tit(\"should correctly dirty on set\", function () {\n\t\tconst prop = PropertyFactory.create(\"Uint64\");\n\t\tprop.cleanDirty();\n\t\texpect(prop.isDirty()).to.be.false;\n\t\tprop.value = new Uint64(32, 42);\n\t\texpect(prop.isDirty()).to.be.true;\n\n\t\tprop.cleanDirty();\n\t\texpect(prop.isDirty()).to.be.false;\n\t\tprop.setValueHigh(66);\n\t\texpect(prop.isDirty()).to.be.true;\n\t\tprop.cleanDirty();\n\t\tprop.setValueHigh(66);\n\t\texpect(prop.isDirty()).to.be.false;\n\n\t\tprop.cleanDirty();\n\t\texpect(prop.isDirty()).to.be.false;\n\t\tprop.setValueLow(33);\n\t\texpect(prop.isDirty()).to.be.true;\n\t\tprop.cleanDirty();\n\t\tprop.setValueLow(33);\n\t\texpect(prop.isDirty()).to.be.false;\n\t});\n});\n"]}