@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":"utils.spec.js","sourceRoot":"","sources":["../../src/test/utils.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/* globals assert */\n\n/**\n * @fileoverview In this file, we will test the utils described in /src/utils.js\n */\n\nconst { ChangeSet } = require('@fluid-experimental/property-changeset');\nconst { Utils } = require('@fluid-experimental/property-changeset');\nconst { MSG } = require('@fluid-experimental/property-common').constants;\nconst _ = require('lodash');\nconst { PropertyFactory } = require('..');\nconst { BaseProperty } = require('..');\nconst { NodeProperty } = require('../properties/nodeProperty');\n\ndescribe('Utils', function() {\n before(function() {\n var TaskStatus = {\n // inherits : 'Enum',\n typeid: 'autodesk.test:utils.spec.task.status-1.0.0',\n /* values : {\n running : 'running',\n created : 'created',\n succeeded : 'succeeded',\n failed : 'failed',\n canceled : 'canceled'\n },\n default : 'created' */\n };\n\n // The subject property template to be tracked\n var TaskSubject = {\n inherits: ['NodeProperty'],\n typeid: 'autodesk.test:utils.spec.task.subject-1.0.0',\n properties: [\n // {id: 'status', typeid: 'autodesk.test:utils_spec_status-1.0.0'},\n { id: 'errorMsg', typeid: 'String' },\n // {id: 'result', typeid: 'BaseProperty'},\n { id: 'progress', typeid: 'Uint32', annotation: { min: 0, max: 100 } },\n // {id: 'timeRemaining' , typeid : 'autodesk.test:utils_spec_datedelta-1.0.0'}\n ],\n };\n\n // The observer tracking subject(s)\n var TaskObserver = {\n inherits: 'autodesk.test:utils.spec.task.subject-1.0.0',\n typeid: 'autodesk.test:utils.spec.task.observer-1.0.0',\n properties: [\n { id: 'name', typeid: 'String' },\n { id: 'creator', typeid: 'autodesk.test:utils.spec.user-1.0.0' },\n { id: 'subjects', typeid: 'autodesk.test:utils.spec.task.subjectentry-1.0.0', context: 'array' },\n { id: 'startTime', typeid: 'autodesk.test:utils.spec.date-1.0.0' },\n { id: 'endTime', typeid: 'autodesk.test:utils.spec.date-1.0.0' },\n ],\n };\n\n // Subject entries passed in to the 'subjects' field of the task observer\n var TaskSubjectEntries = {\n typeid: 'autodesk.test:utils.spec.task.subjectentry-1.0.0',\n properties: [\n { id: 'path', typeid: 'String' },\n ],\n };\n\n // Example usage of task subjects to be tracked\n var Sim = {\n inherits: ['NodeProperty'],\n typeid: 'autodesk.test:utils.spec.pan.sim-1.0.0',\n properties: [\n\n { id: 'costEstimated', typeid: 'autodesk.test:utils.spec.task.subject-1.0.0' },\n { id: 'costFinal', typeid: 'autodesk.test:utils.spec.task.subject-1.0.0' },\n\n // set by client to start or cancel the simulation\n { id: 'start', typeid: 'Bool', 'default': false },\n { id: 'cancel', typeid: 'Bool', 'default': false },\n\n // { id: 'inputs' , typeid: 'autodesk.test:utils_spec_pan.input-1.0.0' },\n\n { id: 'thermalResults', typeid: 'autodesk.test:utils.spec.task.subject-1.0.0' },\n { id: 'mechanicalResults', typeid: 'autodesk.test:utils.spec.task.subject-1.0.0' },\n ],\n };\n\n var nestedTemplate = {\n typeid: 'autodesk.tests:nestedTemplate-1.0.0',\n properties: [{\n id: 'a',\n typeid: 'String',\n }, {\n id: 'b',\n typeid: 'String',\n }, {\n id: 'c',\n properties: [{\n id: 'myNestedProp',\n typeid: 'autodesk.test:utils.spec.task.subject-1.0.0',\n }],\n }],\n };\n var QuoatablePropertyObject = {\n typeid: 'autodesk.tests:property.with.quotable.characters-1.0.0',\n properties: [{\n id: 'simple_property',\n typeid: 'String',\n }, {\n id: 'test.property',\n typeid: 'String',\n }, {\n id: 'test\"property\"',\n typeid: 'String',\n }, {\n id: 'test[property]',\n properties: [{\n id: '.property.',\n properties: [{\n id: 'test',\n typeid: 'String',\n }],\n }],\n }],\n };\n\n var ContainedTemplate = {\n typeid: 'autodesk.test:utilsTestContained-1.0.0',\n properties: [\n { id: 'error\"Msg\"', typeid: 'String' },\n ],\n };\n\n var StaticNodeChild = {\n typeid: 'autodesk.test:staticNodeChild-1.0.0',\n inherits: ['NodeProperty'],\n properties: [\n { id: 'nodeProperty', typeid: 'NodeProperty' },\n ],\n };\n\n var ParentTemplate = {\n typeid: 'autodesk.test:utilsTestParent-1.0.0',\n properties: [\n { id: 'errorMsg', typeid: 'String' },\n { id: 'progress', typeid: 'Uint32' },\n {\n id: 'nested', properties: [\n { id: 'en\"t\"ry', typeid: 'String' },\n ],\n },\n { id: 'contained', typeid: 'autodesk.test:utilsTestContained-1.0.0' },\n { id: 'containedMap', typeid: 'autodesk.test:utilsTestContained-1.0.0', context: 'map' },\n ],\n };\n\n PropertyFactory._reregister(TaskStatus);\n PropertyFactory._reregister(TaskSubject);\n PropertyFactory._reregister(TaskObserver);\n PropertyFactory._reregister(TaskSubjectEntries);\n PropertyFactory._reregister(Sim);\n PropertyFactory._reregister(nestedTemplate);\n PropertyFactory._reregister(QuoatablePropertyObject);\n PropertyFactory._reregister(ParentTemplate);\n PropertyFactory._reregister(ContainedTemplate);\n PropertyFactory._reregister(StaticNodeChild);\n });\n\n describe('Utils.traverseChangeSetRecursively', function() {\n var testRoot, contexts, namedNodePropForSet;\n it('should report correctly for inserts', function() {\n testRoot = PropertyFactory.create('NodeProperty');\n testRoot.insert('string', PropertyFactory.create('String'));\n testRoot.insert('test\"Templated\"Property',\n PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0'));\n testRoot.resolvePath('\"test\\\\\"Templated\\\\\"Property\".containedMap').insert('entry',\n PropertyFactory.create('autodesk.test:utilsTestContained-1.0.0'));\n testRoot.insert('reference', PropertyFactory.create('Reference<String>'));\n\n // Test an array with a primitive\n testRoot.insert('floatArray', PropertyFactory.create('Float32', 'array'));\n testRoot._properties.floatArray.insertRange(0, [1, 2, 3, 4, 5]);\n\n // Test an array with a complex type\n testRoot.insert('array', PropertyFactory.create('array<>'));\n var arrayNode = PropertyFactory.create('NodeProperty');\n testRoot._properties.array.push(arrayNode);\n arrayNode.insert('string', PropertyFactory.create('String'));\n\n // Test a map with a primitive\n testRoot.insert('floatMap', PropertyFactory.create('Float32', 'map'));\n testRoot._properties.floatMap.insert('test', 1);\n testRoot._properties.floatMap.insert('test2', 2);\n testRoot._properties.floatMap.insert('test3', 3);\n\n // Test a map with complex types\n testRoot.insert('map', PropertyFactory.create('map<>'));\n\n // add members\n // Simple string\n testRoot._properties.map.insert('string',\n PropertyFactory.create('String'));\n\n // String with name that has to be escaped\n testRoot._properties.map.insert('s\"tr\"ing',\n PropertyFactory.create('String'));\n\n // A map in a map\n testRoot._properties.map.insert('map',\n PropertyFactory.create('map<>'));\n testRoot._properties.map.get('map').insert('string',\n PropertyFactory.create('String'));\n\n // An array in a map\n testRoot._properties.map.insert('array',\n PropertyFactory.create('array<>'));\n testRoot._properties.map.get('array').insert(0,\n PropertyFactory.create('NodeProperty'));\n testRoot._properties.map.get('array').get(0).insert('string',\n PropertyFactory.create('String'));\n\n // A composed property\n testRoot._properties.map.insert('testParent',\n PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0'));\n\n // A NodeProperty\n testRoot._properties.map.insert('nodeProperty',\n PropertyFactory.create('NodeProperty'));\n testRoot._properties.map.get('nodeProperty').insert('string',\n PropertyFactory.create('String'));\n\n // Test a set property\n testRoot.insert('set', PropertyFactory.create('set<>'));\n namedNodePropForSet = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.set.insert(namedNodePropForSet);\n namedNodePropForSet.insert('string',\n PropertyFactory.create('String'));\n\n contexts = [];\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': false }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath() + '*');\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context._fullPath !== '') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n contexts.push(in_context.clone());\n },\n });\n expect(contexts.length).to.equal(38);\n });\n\n it('should work for modifications of primitive types', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var modifiedStringCount = 0;\n for (var i = 0; i < contexts.length; i++) {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n\n // modify strings\n if (contexts[i].getTypeid() === 'String' &&\n modifyNode.getId() !== 'guid') {\n modifyNode.setValue('modified');\n modifiedStringCount++;\n }\n\n // modify float arrays\n if (contexts[i].getTypeid() === 'array<Float32>') {\n modifyNode.push(15);\n }\n }\n\n // modify a float map\n // note: set removed, setValue not implemented yet\n testRoot._properties.floatMap.set('test', 5);\n testRoot._properties.floatMap.set('new_test', 7);\n\n var reportedStringModifiedCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n expect(in_context.getOperationType()).to.equal('modify');\n\n if (node.getTypeid() === 'String') {\n reportedStringModifiedCount++;\n expect(in_context.getNestedChangeSet()).to.equal('modified');\n }\n\n if (in_context.getTypeid() === 'array<Float32>') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: [[5, [15]]],\n });\n }\n\n if (in_context.getTypeid() === 'map<Float32>') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: {\n new_test: 7,\n },\n modify: {\n test: 5,\n },\n });\n }\n },\n });\n\n // Make sure all modified strings have been reported\n expect(reportedStringModifiedCount).to.equal(modifiedStringCount);\n });\n\n it('should work for inserts in strings', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n for (var i = 0; i < contexts.length; i++) {\n if (contexts[i].getTypeid() === 'String') {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n if (modifyNode.getId() !== 'guid') {\n modifyNode.insert(3, '_inserted_');\n }\n }\n }\n\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n expect(in_context.getOperationType()).to.equal('modify');\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: [[3, '_inserted_']],\n });\n }\n },\n });\n });\n\n it('should work for inserts in arrays', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var newArrayNode = PropertyFactory.create('NodeProperty');\n testRoot._properties.array.push(newArrayNode);\n newArrayNode.insert('string', PropertyFactory.create('String'));\n newArrayNode._properties.string.value = 'test';\n\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context.getFullPath() !== '' &&\n in_context.getFullPath() !== 'array') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.equal('test');\n }\n },\n });\n });\n\n it('should work for inserts in sets', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var newSetNode = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.set.insert(newSetNode);\n newSetNode.insert('string', PropertyFactory.create('String'));\n newSetNode._properties.string.setValue('test');\n\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context.getFullPath() !== '' &&\n in_context.getFullPath() !== 'set') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.equal(node.value);\n }\n },\n });\n });\n\n it('should work for node property removals', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var removedStrings = [];\n for (var i = 0; i < contexts.length; i++) {\n if (contexts[i].getTypeid() === 'NodeProperty') {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n removedStrings.push(modifyNode._properties.string.getAbsolutePath());\n\n modifyNode.remove('string');\n }\n }\n\n var actualStringRemoveCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n var node = testRoot.resolvePath(in_context.getFullPath());\n if (node) {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n expect(removedStrings.indexOf('/' + in_context.getFullPath())).to.not.equal(-1);\n actualStringRemoveCount++;\n }\n },\n });\n expect(removedStrings.length).to.equal(actualStringRemoveCount);\n });\n\n it('should work for array removals', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.array.removeRange(0, 2);\n var arrayRemovalCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'array') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n arrayRemovalCount++;\n }\n },\n });\n expect(arrayRemovalCount).to.equal(2);\n });\n\n it('should work for map removals', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.map.remove('string');\n var mapRemovalCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'map') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n mapRemovalCount++;\n }\n },\n });\n expect(mapRemovalCount).to.equal(1);\n });\n\n it('should work for set removals', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.set.remove(namedNodePropForSet);\n\n var setRemovalCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'set') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n setRemovalCount++;\n }\n },\n });\n expect(setRemovalCount).to.equal(1);\n });\n\n it('should clone the context correctly', function() {\n testRoot.insert('setClone', PropertyFactory.create('set<>'));\n var namedNodePropForSet1 = PropertyFactory.create('NamedNodeProperty');\n var namedNodePropForSet2 = PropertyFactory.create('NamedNodeProperty');\n var namedNodePropForSet3 = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.setClone.insert(namedNodePropForSet1);\n testRoot._properties.setClone.insert(namedNodePropForSet2);\n testRoot._properties.setClone.insert(namedNodePropForSet3);\n namedNodePropForSet1.insert('string1', PropertyFactory.create('String'));\n namedNodePropForSet2.insert('string2', PropertyFactory.create('String'));\n namedNodePropForSet3.insert('string3', PropertyFactory.create('String'));\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.setClone.remove(namedNodePropForSet1);\n testRoot._properties.setClone.remove(namedNodePropForSet2);\n testRoot._properties.setClone.remove(namedNodePropForSet3);\n\n var setRemovalCount = 0;\n var contextCloneCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'setClone') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n setRemovalCount++;\n }\n var cloneContext = in_context.clone();\n expect(cloneContext).to.deep.equal(in_context);\n contextCloneCount++;\n },\n });\n expect(setRemovalCount).to.equal(3);\n expect(contextCloneCount >= 3).to.be.true; // we should clone at least 3 times (probably more)\n });\n\n it('@regression should work when replacing a map element', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n testRoot._properties.map.set('nodeProperty', PropertyFactory.create('NamedNodeProperty'));\n var operationtypes = [];\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // expect operations to be 'remove' and 'insert'\n if (in_context.getFullPath() === 'map[nodeProperty]') {\n operationtypes.push(in_context.getOperationType());\n }\n },\n });\n expect(operationtypes).to.deep.equal(['remove', 'insert']);\n });\n });\n\n describe('Utils.traverseChangeSetRecursivelyAsync', function() {\n var testRoot, contexts, namedNodePropForSet;\n it('should report correctly for inserts', function(done) {\n testRoot = PropertyFactory.create('NodeProperty');\n testRoot.insert('string', PropertyFactory.create('String'));\n testRoot.insert('test\"Templated\"Property',\n PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0'));\n testRoot.resolvePath('\"test\\\\\"Templated\\\\\"Property\".containedMap').insert('entry',\n PropertyFactory.create('autodesk.test:utilsTestContained-1.0.0'));\n testRoot.insert('reference', PropertyFactory.create('Reference<String>'));\n\n // Test an array with a primitive\n testRoot.insert('floatArray', PropertyFactory.create('Float32', 'array'));\n testRoot._properties.floatArray.insertRange(0, [1, 2, 3, 4, 5]);\n\n // Test an array with a complex type\n testRoot.insert('array', PropertyFactory.create('array<>'));\n var arrayNode = PropertyFactory.create('NodeProperty');\n testRoot._properties.array.push(arrayNode);\n arrayNode.insert('string', PropertyFactory.create('String'));\n\n // Test a map with a primitive\n testRoot.insert('floatMap', PropertyFactory.create('Float32', 'map'));\n testRoot._properties.floatMap.insert('test', 1);\n testRoot._properties.floatMap.insert('test2', 2);\n testRoot._properties.floatMap.insert('test3', 3);\n\n // Test a map with complex types\n testRoot.insert('map', PropertyFactory.create('map<>'));\n\n // add members\n // Simple string\n testRoot._properties.map.insert('string',\n PropertyFactory.create('String'));\n\n // String with name that has to be escaped\n testRoot._properties.map.insert('s\"tr\"ing',\n PropertyFactory.create('String'));\n\n // A map in a map\n testRoot._properties.map.insert('map',\n PropertyFactory.create('map<>'));\n testRoot._properties.map.get('map').insert('string',\n PropertyFactory.create('String'));\n\n // An array in a map\n testRoot._properties.map.insert('array',\n PropertyFactory.create('array<>'));\n testRoot._properties.map.get('array').insert(0,\n PropertyFactory.create('NodeProperty'));\n testRoot._properties.map.get('array').get(0).insert('string',\n PropertyFactory.create('String'));\n\n // A composed property\n testRoot._properties.map.insert('testParent',\n PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0'));\n\n // A NodeProperty\n testRoot._properties.map.insert('nodeProperty',\n PropertyFactory.create('NodeProperty'));\n testRoot._properties.map.get('nodeProperty').insert('string',\n PropertyFactory.create('String'));\n\n // Test a set property\n testRoot.insert('set', PropertyFactory.create('set<>'));\n namedNodePropForSet = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.set.insert(namedNodePropForSet);\n namedNodePropForSet.insert('string',\n PropertyFactory.create('String'));\n\n contexts = [];\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': false }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath() + '*');\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context._fullPath !== '') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n contexts.push(in_context.clone());\n setImmediate(cb);\n },\n }, function() {\n expect(contexts.length).to.equal(38);\n done();\n });\n });\n\n it('should work for modifications of primitive types', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var modifiedStringCount = 0;\n for (var i = 0; i < contexts.length; i++) {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n\n // modify strings\n if (contexts[i].getTypeid() === 'String' &&\n modifyNode.getId() !== 'guid') {\n modifyNode.setValue('modified');\n modifiedStringCount++;\n }\n\n // modify float arrays\n if (contexts[i].getTypeid() === 'array<Float32>') {\n modifyNode.push(15);\n }\n }\n\n // modify a float map\n // note: set removed, setValue not implemented yet\n testRoot._properties.floatMap.set('test', 5);\n testRoot._properties.floatMap.set('new_test', 7);\n\n var reportedStringModifiedCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n expect(in_context.getOperationType()).to.equal('modify');\n\n if (node.getTypeid() === 'String') {\n reportedStringModifiedCount++;\n expect(in_context.getNestedChangeSet()).to.equal('modified');\n }\n\n if (in_context.getTypeid() === 'array<Float32>') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: [[5, [15]]],\n });\n }\n\n if (in_context.getTypeid() === 'map<Float32>') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: {\n new_test: 7,\n },\n modify: {\n test: 5,\n },\n });\n }\n setImmediate(cb);\n },\n }, function() {\n // Make sure all modified strings have been reported\n expect(reportedStringModifiedCount).to.equal(modifiedStringCount);\n done();\n });\n });\n\n it('should work for inserts in strings', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n for (var i = 0; i < contexts.length; i++) {\n if (contexts[i].getTypeid() === 'String') {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n if (modifyNode.getId() !== 'guid') {\n modifyNode.insert(3, '_inserted_');\n }\n }\n }\n\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n expect(in_context.getOperationType()).to.equal('modify');\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: [[3, '_inserted_']],\n });\n }\n setImmediate(cb);\n },\n }, function() {\n done();\n });\n });\n\n it('should work for inserts in arrays', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var newArrayNode = PropertyFactory.create('NodeProperty');\n testRoot._properties.array.push(newArrayNode);\n newArrayNode.insert('string', PropertyFactory.create('String'));\n newArrayNode._properties.string.value = 'test';\n\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context.getFullPath() !== '' &&\n in_context.getFullPath() !== 'array') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.equal('test');\n }\n setImmediate(cb);\n },\n }, function() {\n done();\n });\n });\n\n it('should work for inserts in sets', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var newSetNode = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.set.insert(newSetNode);\n newSetNode.insert('string', PropertyFactory.create('String'));\n newSetNode._properties.string.setValue('test');\n\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context.getFullPath() !== '' &&\n in_context.getFullPath() !== 'set') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.equal(node.value);\n }\n setImmediate(cb);\n },\n }, done);\n });\n\n it('should work for node property removals', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var removedStrings = [];\n for (var i = 0; i < contexts.length; i++) {\n if (contexts[i].getTypeid() === 'NodeProperty') {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n removedStrings.push(modifyNode._properties.string.getAbsolutePath());\n\n modifyNode.remove('string');\n }\n }\n\n var actualStringRemoveCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n var node = testRoot.resolvePath(in_context.getFullPath());\n if (node) {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n expect(removedStrings.indexOf('/' + in_context.getFullPath())).to.not.equal(-1);\n actualStringRemoveCount++;\n }\n setImmediate(cb);\n },\n }, function() {\n expect(removedStrings.length).to.equal(actualStringRemoveCount);\n done();\n });\n });\n\n it('should work for array removals', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.array.removeRange(0, 2);\n var arrayRemovalCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'array') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n arrayRemovalCount++;\n }\n setImmediate(cb);\n },\n }, function() {\n expect(arrayRemovalCount).to.equal(2);\n done();\n });\n });\n\n it('should work for map removals', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.map.remove('string');\n var mapRemovalCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'map') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n mapRemovalCount++;\n }\n setImmediate(cb);\n },\n }, function() {\n expect(mapRemovalCount).to.equal(1);\n done();\n });\n });\n\n it('should work for set removals', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.set.remove(namedNodePropForSet);\n\n var setRemovalCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'set') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n setRemovalCount++;\n }\n setImmediate(cb);\n },\n }, function() {\n expect(setRemovalCount).to.equal(1);\n done();\n });\n });\n\n it('should clone the context correctly', function(done) {\n testRoot.insert('setClone', PropertyFactory.create('set<>'));\n var namedNodePropForSet1 = PropertyFactory.create('NamedNodeProperty');\n var namedNodePropForSet2 = PropertyFactory.create('NamedNodeProperty');\n var namedNodePropForSet3 = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.setClone.insert(namedNodePropForSet1);\n testRoot._properties.setClone.insert(namedNodePropForSet2);\n testRoot._properties.setClone.insert(namedNodePropForSet3);\n namedNodePropForSet1.insert('string1', PropertyFactory.create('String'));\n namedNodePropForSet2.insert('string2', PropertyFactory.create('String'));\n namedNodePropForSet3.insert('string3', PropertyFactory.create('String'));\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.setClone.remove(namedNodePropForSet1);\n testRoot._properties.setClone.remove(namedNodePropForSet2);\n testRoot._properties.setClone.remove(namedNodePropForSet3);\n\n var setRemovalCount = 0;\n var contextCloneCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'setClone') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n setRemovalCount++;\n }\n var cloneContext = in_context.clone();\n expect(cloneContext).to.deep.equal(in_context);\n contextCloneCount++;\n setImmediate(cb);\n },\n }, function() {\n expect(setRemovalCount).to.equal(3);\n expect(contextCloneCount >= 3).to.be.true; // we should clone at least 3 times (probably more)\n done();\n });\n });\n\n it('@regression should work for mixed modifications and removals', function(done) {\n // This test uses its own property sets tree\n var ownRoot = PropertyFactory.create('NodeProperty');\n var userInfo = PropertyFactory.create('NodeProperty');\n userInfo.insert('name', PropertyFactory.create('String', 'single', 'John Doe'));\n userInfo.insert('isResident', PropertyFactory.create('Bool', 'single', true));\n ownRoot.insert('userInfo', userInfo);\n var numberOfResidents = PropertyFactory.create('Int32', 'single', 1);\n ownRoot.insert('numberOfResidents', numberOfResidents);\n\n ownRoot.cleanDirty();\n\n ownRoot.get(['userInfo', 'name']).setValue('Johnny B. Goode');\n ownRoot.get('userInfo').remove('isResident');\n ownRoot.get('numberOfResidents').setValue(0);\n\n var modifiedCount = 0;\n var serializedCS = ownRoot.serialize({ 'dirtyOnly': true });\n Utils.traverseChangeSetRecursivelyAsync(serializedCS, {\n preCallback: function(in_context, cb) {\n var node = ownRoot.resolvePath(in_context.getFullPath());\n if (node) {\n expect(in_context.getOperationType()).to.equal('modify');\n if (in_context.getLastSegment() === 'name' ||\n in_context.getLastSegment() === 'numberOfResidents') {\n modifiedCount++;\n }\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n expect(in_context.getLastSegment()).to.equal('isResident');\n }\n setImmediate(cb);\n },\n }, function() {\n expect(modifiedCount).to.equal(2);\n done();\n });\n });\n\n it('@regression should work when replacing a map element', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.map.set('testParent', PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0',\n 'single', { errorMsg: 'another element', progress: 99 }));\n\n var operations = [];\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === 'map[testParent]') {\n operations.push(in_context.getOperationType());\n } else if (in_context.getFullPath() === 'map[testParent].errorMsg') {\n expect(in_context.getNestedChangeSet() === 'another element');\n } else if (in_context.getFullPath() === 'map[testParent].progress') {\n expect(in_context.getNestedChangeSet() === 99);\n }\n setImmediate(cb);\n },\n }, function() {\n expect(operations).to.deep.equal(['remove', 'insert']);\n done();\n });\n });\n });\n\n describe('Utils.enumerateSchemas', function() {\n var serializedChangeSet = {\n 'insertTemplates': {\n 'autodesk.tests:property.set.SimpleNamedPoint-1.0.0': {\n typeid: 'autodesk.tests:property.set.SimpleNamedPoint-1.0.0',\n inherits: 'NamedProperty',\n properties: [\n { id: 'x', typeid: 'Uint32' },\n { id: 'y', typeid: 'Uint32' },\n ],\n },\n 'autodesk.tests:property.set.SimpleNamedPoint-1.2.0': {\n typeid: 'autodesk.tests:property.set.SimpleNamedPoint-1.0.0',\n inherits: 'NamedProperty',\n properties: [\n { id: 'x', typeid: 'Uint64' },\n { id: 'y', typeid: 'Uint64' },\n ],\n },\n },\n };\n\n it('should return the schemas, and then call the finalizer', function(done) {\n var countedTemplates = 0;\n Utils.enumerateSchemas(serializedChangeSet, function(t, cb) {\n countedTemplates++;\n if (t.key === 'autodesk.tests:property.set.SimpleNamedPoint-1.0.0') {\n expect(t.value).to.eql(serializedChangeSet.insertTemplates['autodesk.tests:property.set.SimpleNamedPoint-1.0.0']);\n }\n if (t.key === 'autodesk.tests:property.set.SimpleNamedPoint-1.2.0') {\n expect(t.value).to.eql(serializedChangeSet.insertTemplates['autodesk.tests:property.set.SimpleNamedPoint-1.2.0']);\n }\n setImmediate(cb);\n }, function() {\n expect(countedTemplates).to.eql(2);\n done();\n });\n });\n });\n\n describe('Utils.extractTypeids', function() {\n it('Should work for a simple templated property', function() {\n var property = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n\n var typeids = Utils.extractTypeids(property.serialize({ 'dirtyOnly': false, 'includeRootTypeid': true }));\n typeids.sort();\n // Note the map from the template isn't included in the ChangeSet since it is empty\n expect(typeids).to.deep.equal(['String', 'Uint32', 'autodesk.test:utilsTestContained-1.0.0',\n 'autodesk.test:utilsTestParent-1.0.0',\n 'map<autodesk.test:utilsTestContained-1.0.0>']);\n });\n\n it('Should work for inserts into a NodePropertý', function() {\n var property = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.insert('child', child);\n\n var typeids = Utils.extractTypeids(property.serialize({ 'dirtyOnly': false, 'includeRootTypeid': true }));\n typeids.sort();\n expect(typeids).to.deep.equal(['NodeProperty', 'String', 'Uint32', 'autodesk.test:utilsTestContained-1.0.0',\n 'autodesk.test:utilsTestParent-1.0.0',\n 'map<autodesk.test:utilsTestContained-1.0.0>']);\n });\n\n it('Should work for inserts into a map', function() {\n var property = PropertyFactory.create('map<>');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.insert('child', child);\n\n var typeids = Utils.extractTypeids(property._serialize(false, true));\n typeids.sort();\n\n expect(typeids).to.deep.equal(['String', 'Uint32', 'autodesk.test:utilsTestContained-1.0.0',\n 'autodesk.test:utilsTestParent-1.0.0', 'map<>',\n 'map<autodesk.test:utilsTestContained-1.0.0>']);\n });\n\n it('Should work for inserts into an array', function() {\n var property = PropertyFactory.create('array<>');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.push(child);\n\n var typeids = Utils.extractTypeids(property._serialize(false, true));\n typeids.sort();\n\n expect(typeids).to.deep.equal(['String', 'Uint32', 'array<>', 'autodesk.test:utilsTestContained-1.0.0',\n 'autodesk.test:utilsTestParent-1.0.0',\n 'map<autodesk.test:utilsTestContained-1.0.0>']);\n });\n\n it('Should work for modifications of a NodeProperty', function() {\n var property = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.insert('child', child);\n property.cleanDirty();\n property.resolvePath('child.contained.\"error\\\\\"Msg\\\\\"\"').value = 'modified';\n\n var typeids = Utils.extractTypeids(property.serialize({ 'dirtyOnly': true, 'in_includeRootTypeid': true }));\n typeids.sort();\n expect(typeids).to.deep.equal([\n 'NodeProperty', 'String', 'autodesk.test:utilsTestContained-1.0.0', 'autodesk.test:utilsTestParent-1.0.0',\n ]);\n });\n\n it('Should work for modifications of a map', function() {\n var property = PropertyFactory.create('map<>');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.insert('child', child);\n property.cleanDirty();\n property.resolvePath('[child].contained.\"error\\\\\"Msg\\\\\"\"').value = 'modified';\n\n var typeids = Utils.extractTypeids(property._serialize(true, true));\n typeids.sort();\n expect(typeids).to.deep.equal([\n 'String', 'autodesk.test:utilsTestContained-1.0.0', 'autodesk.test:utilsTestParent-1.0.0', 'map<>',\n ]);\n });\n\n it('Should work for modifications of an array', function() {\n var property = PropertyFactory.create('array<>');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.push(child);\n property.cleanDirty();\n property.resolvePath('[0].contained.\"error\\\\\"Msg\\\\\"\"').setValue('modified');\n\n var typeids = Utils.extractTypeids(property._serialize(true, true));\n typeids.sort();\n expect(typeids).to.deep.equal([\n 'String', 'array<>', 'autodesk.test:utilsTestContained-1.0.0', 'autodesk.test:utilsTestParent-1.0.0',\n ]);\n });\n\n it('Should work for removals', function() {\n var typeids = Utils.extractTypeids({ remove: ['xxx-yyy-zzz'] });\n\n expect(typeids).to.have.lengthOf(1);\n expect(typeids[0]).to.equal('NodeProperty');\n });\n });\n\n describe('Change set helper functions', function() {\n var root, sim, subject1, subject2, subject3;\n // Create a simple test data-set\n before(function() {\n root = PropertyFactory.create('NodeProperty');\n sim = PropertyFactory.create('autodesk.test:utils.spec.pan.sim-1.0.0');\n subject1 = PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0');\n subject2 = PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0');\n\n root.insert('simulation', sim);\n sim.insert('subject1', subject1);\n sim.insert('subject2', subject2);\n\n var arrayProp = PropertyFactory.create('array<>');\n root.insert('array', arrayProp);\n arrayProp.push(PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'));\n arrayProp.push(PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'));\n arrayProp.get(1)._properties.progress.value = 1;\n\n var mapProp = PropertyFactory.create('map<>');\n root.insert('map', mapProp);\n mapProp.insert('entry', PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'));\n });\n\n it('should work correctly for inserts', function() {\n var insertedResults = Utils.getChangesByType('autodesk.test:utils.spec.task.subject-1.0.0',\n root.serialize({ 'dirtyOnly': true }));\n assert(_.keys(insertedResults.insert).length === 9);\n for (var i = 0; i < 9; i++) {\n assert(root.resolvePath(_.keys(insertedResults.insert)[i]) !== undefined);\n assert(Utils.getChangesByPath(_.keys(insertedResults.insert)[i], root, root.serialize(), false).insert !==\n undefined);\n }\n });\n\n it('should work correctly for the root path', function() {\n var AnonymousTestPropertyTemplate = {\n typeid: 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0',\n properties: [\n { id: 'stringProperty', typeid: 'String' },\n ],\n };\n PropertyFactory._reregister(AnonymousTestPropertyTemplate);\n\n var prop = PropertyFactory.create('NodeProperty');\n prop.insert('A',\n PropertyFactory.create('autodesk.tests:AnonymousMapTestPropertyID-1.0.0'));\n var result = Utils.getChangesByPath('', null, prop.serialize());\n expect(result).to.deep.equal(\n {\n 'modify': {\n 'insert': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'A': {\n 'String': {\n 'stringProperty': '',\n },\n },\n },\n },\n },\n });\n });\n\n it('should correctly strip typeids in insertions', function() {\n var insertionChangeSet = root.serialize({ 'dirtyOnly': true });\n Utils._stripTypeids(insertionChangeSet);\n expect(insertionChangeSet).to.deep.equal({\n 'insert': {\n 'simulation': {\n 'insert': {\n 'subject1': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'subject2': {\n 'errorMsg': '',\n 'progress': 0,\n },\n },\n 'costEstimated': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'costFinal': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'thermalResults': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'mechanicalResults': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'start': false,\n 'cancel': false,\n },\n 'map': {\n 'insert': {\n 'entry': {\n 'errorMsg': '',\n 'progress': 0,\n },\n },\n },\n 'array': {\n 'insert': [[0, [{\n 'errorMsg': '',\n 'progress': 0,\n }, {\n 'errorMsg': '',\n 'progress': 1,\n }]]],\n },\n },\n });\n });\n\n it('should work correctly for modifies', function() {\n root.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE | BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n\n subject3 = PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0');\n subject2.insert('subject3', subject3);\n\n subject1._properties.errorMsg.value = 'test';\n subject2._properties.errorMsg.value = 'test';\n sim._properties.thermalResults.errorMsg.value = 'test44';\n\n // Test array modification\n root.resolvePath('array[1].errorMsg').value = 'test';\n\n // Test array insertion\n root.resolvePath('array').insertRange(1, [\n PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'),\n PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'),\n ]);\n root.resolvePath('array').insertRange(0, [\n PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'),\n ]);\n\n // Test map modification\n root.resolvePath('map[entry].errorMsg').value = 'test';\n\n // Test map insertion\n root.resolvePath('map').insert('entry2',\n PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'));\n\n var modifiedResults = Utils.getChangesByType(\n 'autodesk.test:utils.spec.task.subject-1.0.0',\n root.serialize({ 'dirtyOnly': true }),\n true,\n );\n\n assert(_.keys(modifiedResults.insert).length === 5);\n assert(_.keys(modifiedResults.modify).length === 5);\n\n for (var i = 0; i < 5; i++) {\n assert(Utils.getChangesByPath(_.keys(modifiedResults.modify)[i], root,\n root.serialize({ 'dirtyOnly': true }), false).modify !== undefined);\n }\n for (var i = 0; i < 5; i++) {\n assert(Utils.getChangesByPath(_.keys(modifiedResults.insert)[i], root,\n root.serialize({ 'dirtyOnly': true }), false).insert !== undefined);\n }\n });\n\n it('should correctly strip typeids in modifies', function() {\n var modifyChangeSet = root.serialize({ 'dirtyOnly': true });\n Utils._stripTypeids(modifyChangeSet);\n expect(modifyChangeSet).to.deep.equal({\n 'modify': {\n 'simulation': {\n 'modify': {\n 'subject1': {\n 'errorMsg': 'test',\n },\n 'subject2': {\n 'insert': {\n 'subject3': {\n 'errorMsg': '',\n 'progress': 0,\n },\n },\n 'errorMsg': 'test',\n },\n },\n 'thermalResults': {\n 'errorMsg': 'test44',\n },\n },\n 'array': {\n insert: [[0, [\n {\n 'errorMsg': '',\n 'progress': 0,\n },\n ]], [1, [\n {\n 'errorMsg': '',\n 'progress': 0,\n }, {\n 'errorMsg': '',\n 'progress': 0,\n },\n ]]],\n modify: [[1, [{\n 'errorMsg': 'test',\n }]]],\n },\n 'map': {\n 'insert': {\n 'entry2': {\n 'errorMsg': '',\n 'progress': 0,\n },\n },\n 'modify': {\n 'entry': {\n 'errorMsg': 'test',\n },\n },\n },\n },\n });\n });\n\n it('should correctly work for removes', function() {\n root.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE | BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n subject2.remove(subject3.getId());\n\n assert(Utils.getChangesByPath(sim.getId() + '.' + subject2.getId() + '.' + subject3.getId(),\n root, root.serialize({ 'dirtyOnly': true }), false).removed === true);\n\n root.remove(sim.getId());\n assert(Utils.getChangesByPath(sim.getId() + '.' + subject2.getId() + '.' + subject3.getId(),\n root, root.serialize({ 'dirtyOnly': true }), false).removed === true);\n assert(Utils.getChangesByPath(sim.getId() + '.' + subject2.getId(), root,\n root.serialize({ 'dirtyOnly': true }), false).removed === true);\n assert(Utils.getChangesByPath(sim.getId(), root, root.serialize({ 'dirtyOnly': true }), false).removed === true);\n\n root.resolvePath('map').remove('entry2');\n root.resolvePath('array').remove(0);\n root.resolvePath('array').removeRange(1, 2);\n });\n\n it('should correctly strip typeids in removes', function() {\n var modifyChangeSet = root._serialize(true);\n Utils._stripTypeids(modifyChangeSet);\n expect(modifyChangeSet).to.deep.equal({\n 'modify': {\n 'array': {\n 'remove': [[0, 1], [2, 2]],\n },\n 'map': {\n 'remove': ['entry2'],\n },\n },\n 'remove': ['simulation'],\n });\n });\n\n it('should work for nested templates', function() {\n var nestedTemplate = PropertyFactory.create('autodesk.tests:nestedTemplate-1.0.0');\n nestedTemplate._properties.c.myNestedProp.errorMsg.value = 'testString';\n var changeSet = nestedTemplate._serialize(true);\n\n var changes = Utils.getChangesByType('String', changeSet);\n expect(changes.modify['c.myNestedProp.errorMsg']).to.equal('testString');\n\n expect(Utils.getChangesByPath('c.myNestedProp.errorMsg',\n nestedTemplate, changeSet, false)).to.have.keys('modify');\n });\n\n it('should work for an object with characters that have to be quoted', function() {\n var node = PropertyFactory.create('autodesk.tests:property.with.quotable.characters-1.0.0');\n node.get('simple_property').value = 'test';\n node.get('test.property').value = 'test';\n node.get('test\"property\"').value = 'test';\n node.get('test[property]').get('.property.').get('test').value = 'test';\n\n var changeSet = node._serialize(true);\n var changes = Utils.getChangesByType('String', changeSet);\n expect(changes.modify).to.have.keys('simple_property',\n '\"test.property\"',\n '\"test\\\\\"property\\\\\"\"',\n '\"test[property]\".\".property.\".test');\n\n expect(Utils.getChangesByPath('simple_property', node, changeSet, false)).to.have.keys('modify');\n expect(Utils.getChangesByPath('\"test.property\"', node, changeSet, false)).to.have.keys('modify');\n expect(Utils.getChangesByPath('\"test\\\\\"property\\\\\"\"', node, changeSet, false)).to.have.keys('modify');\n expect(Utils.getChangesByPath('\"test[property]\".\".property.\".test',\n node, changeSet, false)).to.have.keys('modify');\n });\n\n it('should work for a node property with characters that have to be quoted', function() {\n var node = PropertyFactory.create('NodeProperty');\n node.insert('simple_property', PropertyFactory.create('String', undefined, 'test'));\n node.insert('test.property', PropertyFactory.create('String', undefined, 'test'));\n node.insert('test\"property\"', PropertyFactory.create('String', undefined, 'test'));\n node.insert('test[property]', PropertyFactory.create('NodeProperty'));\n node.get('test[property]').insert('.property.', PropertyFactory.create('NodeProperty'));\n node.get('test[property]').get('.property.').insert('test',\n PropertyFactory.create('String', undefined, 'test'));\n\n var changeSet = node._serialize(true);\n var changes = Utils.getChangesByType('String', changeSet);\n expect(changes.insert).to.have.keys('simple_property',\n '\"test.property\"',\n '\"test\\\\\"property\\\\\"\"',\n '\"test[property]\".\".property.\".test');\n\n expect(Utils.getChangesByPath('simple_property', node, changeSet, false)).to.have.keys('insert');\n expect(Utils.getChangesByPath('\"test.property\"', node, changeSet, false)).to.have.keys('insert');\n expect(Utils.getChangesByPath('\"test\\\\\"property\\\\\"\"', node, changeSet, false)).to.have.keys('insert');\n expect(Utils.getChangesByPath('\"test[property]\".\".property.\".test',\n node, changeSet, false)).to.have.keys('insert');\n });\n });\n\n describe('Utils.getChangesToTokenizedPaths', function() {\n var CS = {\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n '__doubleUnderscore': 'text',\n },\n },\n },\n },\n },\n },\n 'nested2': {},\n },\n 'array<>': {\n 'nestedArray': {\n 'insert': [\n [\n 0,\n [\n {\n 'typeid': 'NodeProperty',\n },\n {\n 'typeid': 'NodeProperty',\n 'insert': {\n 'String': {\n 'text': '',\n },\n },\n },\n ],\n ],\n ],\n },\n },\n 'String': {\n 'string': 'text',\n },\n },\n };\n\n it('should work using objects', function() {\n var visitedPaths = [];\n Utils.getChangesToTokenizedPaths({\n 'String': {},\n 'nested1': {\n 'nested2': {\n 'string': {\n '__hidden': {\n 'myCallback': function() { return 'hello'; },\n 'myValue': 1,\n },\n },\n '___doubleUnderscore': {}, // Yes, there are 3 '_', as escapeLeadingDoubleUnderscore = true\n },\n },\n 'nestedArray': {\n '1': {\n 'String': {},\n },\n },\n }, CS, function(in_context, in_nested, in_tokenizedPath) {\n var currentPath = in_tokenizedPath.join('.');\n visitedPaths.push(currentPath);\n if (currentPath === 'nested1.nested2.string') {\n expect(in_nested).to.exist;\n expect(in_nested.__hidden).to.exist;\n expect(in_nested.__hidden.myCallback).to.exist;\n expect(in_nested.__hidden.myCallback()).to.eql('hello');\n expect(in_nested.__hidden.myValue).to.eql(1);\n }\n }, {\n rootOperation: 'modify',\n rootTypeid: 'NodeProperty',\n escapeLeadingDoubleUnderscore: true,\n });\n expect(visitedPaths).to.deep.equal(['', 'nested1', 'nested1.nested2', 'nested1.nested2.string',\n 'nested1.nested2.__doubleUnderscore', 'nestedArray', 'nestedArray.1']);\n });\n\n it('should work using maps', function() {\n var visitedPaths = [];\n Utils.getChangesToTokenizedPaths(new Map([\n ['String', new Map()],\n ['nested1', new Map([\n ['nested2', new Map([\n ['string', new Map([\n ['__hidden', new Map([\n ['myCallback', function() { return 'hello'; }],\n ['myValue', 1],\n ])],\n ])],\n ['___doubleUnderscore', new Map()], // Yes, there are 3 '_', as escapeLeadingDoubleUnderscore = true\n ])],\n ])],\n ['nestedArray', new Map([\n ['1', new Map([\n ['String', new Map()],\n ])],\n ])],\n ]), CS, function(in_context, in_nested, in_tokenizedPath) {\n var currentPath = in_tokenizedPath.join('.');\n visitedPaths.push(currentPath);\n if (currentPath === 'nested1.nested2.string') {\n expect(in_nested).to.exist;\n expect(in_nested).to.have.key('__hidden');\n expect(in_nested.get('__hidden')).to.have.all.keys('myCallback', 'myValue');\n expect(in_nested.get('__hidden').get('myCallback')()).to.eql('hello');\n expect(in_nested.get('__hidden').get('myValue')).to.eql(1);\n }\n }, {\n rootOperation: 'modify',\n rootTypeid: 'NodeProperty',\n escapeLeadingDoubleUnderscore: true,\n });\n expect(visitedPaths).to.deep.equal(['', 'nested1', 'nested1.nested2', 'nested1.nested2.string',\n 'nested1.nested2.__doubleUnderscore', 'nestedArray', 'nestedArray.1']);\n });\n\n it('should assume paths as literal when the escapeLeadingDoubleUnderscore flag is off ', function() {\n var visitedPaths = [];\n Utils.getChangesToTokenizedPaths({\n 'nested1': {\n 'nested2': {\n '__doubleUnderscore': {}, // The amount of underscores is the same as in the changeSet\n },\n },\n }, CS, function(in_context, in_nested, in_tokenizedPath) {\n visitedPaths.push(in_tokenizedPath.join('.'));\n }, {\n rootOperation: 'modify',\n rootTypeid: 'NodeProperty',\n escapeLeadingDoubleUnderscore: false,\n });\n expect(visitedPaths).to.deep.equal(['', 'nested1', 'nested1.nested2', 'nested1.nested2.__doubleUnderscore']);\n });\n });\n\n /* describe('Utils.insertPropertyChangeIntoChangeset', function() {\n var checkPropertyForModifications = function(in_property, in_arrayTests) {\n // Prepare the check by appending a float Property\n var floatProperty = PropertyFactory.create('Float64', undefined, 10);\n in_property.insert('float', floatProperty);\n var rootProperty = in_property.getRoot();\n rootProperty.cleanDirty();\n\n var expectedTarget = in_arrayTests ?\n {insert: {Float64: {'float': 10}}, typeid: 'NodeProperty'} :\n {insert: {Float64: {'float': 10}}};\n\n // Check that creating a new insert operation works\n var emptyChangeSet = {};\n if (!in_arrayTests) {\n var result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n emptyChangeSet, true);\n expect(result.propertyChangeSet).to.exist;\n expect(result.insert).to.be.true;\n result.propertyChangeSet.insert = {Float64: {'float': 10}};\n expect(emptyChangeSet).to.deep.equal(rootProperty._serialize(false));\n }\n\n // Check that inserting into a full serialization is a NOP\n var serializedChangeSet = rootProperty._serialize(false);\n var result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, true);\n expect(result.propertyChangeSet).to.exist;\n expect(result.propertyChangeSet).to.deep.equal(expectedTarget);\n expect(result.insert).to.be.true;\n expect(serializedChangeSet).to.deep.equal(rootProperty._serialize(false));\n\n // Check that a modify becomes an insert\n serializedChangeSet = rootProperty._serialize(false);\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.propertyChangeSet).to.exist;\n expect(result.propertyChangeSet).to.deep.equal(expectedTarget);\n expect(result.insert).to.be.true;\n expect(serializedChangeSet).to.deep.equal(rootProperty._serialize(false));\n\n // Modify the property to have a baseline to compare to\n floatProperty.value = 15;\n expectedTarget = in_arrayTests ?\n {modify: {Float64: {'float': 15}}, typeid: 'NodeProperty'} :\n {modify: {Float64: {'float': 15}}};\n\n // Check that creating a new modify operation works\n emptyChangeSet = {};\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n emptyChangeSet, false);\n expect(result.propertyChangeSet).to.exist;\n result.propertyChangeSet.modify = {Float64: {'float': 15}};\n expect(result.insert).to.be.false;\n expect(emptyChangeSet).to.deep.equal(rootProperty._serialize(true));\n\n // Check that retrieving an existing modify operation is possible\n serializedChangeSet = rootProperty._serialize(true);\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.propertyChangeSet).to.exist;\n expect(result.propertyChangeSet).to.deep.equal(expectedTarget);\n expect(result.insert).to.be.false;\n expect(serializedChangeSet).to.deep.equal(rootProperty._serialize(true));\n\n // Check that deleting properties returns the correct result\n var currentProperty = floatProperty.getParent();\n while (currentProperty && currentProperty.getParent()) {\n var parent = currentProperty.getParent();\n if (parent instanceof NodeProperty &&\n parent._getDynamicChildrenReadOnly()[currentProperty.getId()]) {\n rootProperty.cleanDirty();\n parent.remove(currentProperty.getId());\n serializedChangeSet = rootProperty._serialize(true);\n\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.remove).to.be.true;\n\n parent.insert(currentProperty.getId(), currentProperty);\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.remove).to.be.true;\n }\n currentProperty = currentProperty.getParent();\n }\n };\n\n it('should work for nested NodeProperties', function() {\n var root = PropertyFactory.create('NodeProperty');\n var child1 = PropertyFactory.create('NodeProperty');\n root.insert('child', child1);\n var child2 = PropertyFactory.create('NodeProperty');\n child1.insert('child', child2);\n\n checkPropertyForModifications(child2, false);\n });\n\n it('should work for NodeProperties in a template', function() {\n var root = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('autodesk.test:staticNodeChild-1.0.0');\n root.insert('child', child);\n\n checkPropertyForModifications(child.get('nodeProperty'), false);\n });\n\n it('should work for NodeProperties in a map', function() {\n var root = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('NodeProperty', 'map');\n root.insert('map', child);\n child.insert('entry', PropertyFactory.create('NodeProperty'));\n\n checkPropertyForModifications(child.get('entry'), false);\n });\n\n it('should work for NodeProperties in an array', function() {\n var root = PropertyFactory.create('NodeProperty');\n var arrayProp = PropertyFactory.create('NodeProperty', 'array');\n root.insert('array', arrayProp);\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n\n checkPropertyForModifications(arrayProp.get(0), true);\n });\n\n it('should work for NodeProperties in an array with complex modifications', function() {\n var root = PropertyFactory.create('NodeProperty');\n var arrayProp = PropertyFactory.create('NodeProperty', 'array');\n root.insert('array', arrayProp);\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n var floatProperty = PropertyFactory.create('Float64', undefined, 10);\n arrayProp.get(3).insert('float', floatProperty);\n root.cleanDirty();\n\n // Create a complex modification set\n floatProperty.value = 15;\n arrayProp.removeRange(0, 2);\n arrayProp.insertRange(0, [PropertyFactory.create('NodeProperty')]);\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n var serializedChangeSet = root.serialize({'dirtyOnly': true});\n var expectedChangeset = floatProperty.getParent().serialize({'dirtyOnly': true, 'includeRootTypeid': true});\n\n var result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), root,\n serializedChangeSet, false);\n expect(result.propertyChangeSet).to.deep.equal(expectedChangeset);\n expect(result.insert).to.be.false;\n });\n }); */\n\n describe('Utils.getFilteredChangeSetByPaths', function() {\n var changeSet = {\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n 'array<>': {\n 'nestedArray': {\n 'insert': [\n [\n 0,\n [\n {\n 'typeid': 'NodeProperty',\n },\n {\n 'typeid': 'NodeProperty',\n 'insert': {\n 'String': {\n 'text': '',\n },\n },\n },\n ],\n ],\n ],\n },\n },\n 'map<>': {\n 'trulyNestedMap': {\n 'insert': {\n 'String': {\n 'key1': 'The value is 1',\n },\n },\n },\n },\n },\n },\n 'nested3': {},\n },\n 'map<>': {\n 'nestedMap': {\n 'insert': {\n 'String': {\n 'nestedMapString': 'Sirius',\n },\n 'Bool': {\n 'nestedMapBoolean': true,\n },\n },\n },\n },\n 'map<mysample:asset-1.0.0>': {\n 'assetMap': {\n 'insert': {\n 'mysample:asset-1.0.0': {\n '1': {\n 'String': {\n 'name': 'test asset 1',\n },\n 'NodeProperty': {\n 'components': {\n },\n },\n },\n },\n },\n },\n },\n 'Reference<String>': {\n 'refProp': '/test.prop',\n },\n 'RepositoryReferenceProperty': {\n 'refRepoProp': {\n 'Bool': {\n 'followBranch': false,\n },\n 'String': {\n 'branchGUID': '846fe4a1-e595-44bf-8cc0-f1d8f6d104a6',\n 'commitGUID': '4c611c89-8241-4764-958e-77470bba3b9b',\n 'repositoryGUID': 'f438bed5-d8f2-4c70-a7e0-aa52b8929d2a',\n },\n },\n },\n 'NamedProperty': {\n 'namedProp': {\n 'String': {\n 'guid': 'e763527c-7f49-417c-8df3-9fb7f90a1932',\n },\n },\n },\n 'NamedNodeProperty': {\n 'namedNodeProp': {\n 'String': {\n 'guid': 'efc68477-53b1-49ac-bd3f-e05a21f85a32',\n },\n 'insert': {\n 'enum<autodesk.core:UnitsEnum-1.0.0>': {\n 'enumProp': 0,\n },\n 'String': {\n 'test': 'blah',\n },\n },\n },\n },\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'b': 'hello',\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n 'String': {\n 'emptyString': '',\n },\n },\n 'modify': {\n 'NodeProperty': {\n 'nested4': {\n 'insert': {\n 'Uint32': {\n 'number': 4,\n },\n },\n 'remove': ['nested5', 'nested6'],\n },\n },\n 'array<Float32>': {\n 'nestedArray2': {\n 'modify': [[0, [0.707, 0.707, 0], [0, 0, 1]]],\n },\n },\n },\n 'remove': [\n 'nested7',\n ],\n };\n\n it('should filter change sets by paths resolving to all types (NodeProperty, array, map, set, NamedNodeProperty, Reference, Primitive types)', function() {\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested1', 'nested4.nested5', 'nested4.number']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n 'array<>': {\n 'nestedArray': {\n 'insert': [\n [\n 0,\n [\n {\n 'typeid': 'NodeProperty',\n },\n {\n 'typeid': 'NodeProperty',\n 'insert': {\n 'String': {\n 'text': '',\n },\n },\n },\n ],\n ],\n ],\n },\n },\n 'map<>': {\n 'trulyNestedMap': {\n 'insert': {\n 'String': {\n 'key1': 'The value is 1',\n },\n },\n },\n },\n },\n },\n },\n },\n 'modify': {\n 'NodeProperty': {\n 'nested4': {\n 'remove': ['nested5'],\n 'insert': {\n 'Uint32': {\n 'number': 4,\n },\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested7', 'nested4', 'nested1.nested2']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n },\n },\n },\n },\n 'modify': {\n 'NodeProperty': {\n 'nested4': {\n 'insert': {\n 'Uint32': {\n 'number': 4,\n },\n },\n 'remove': ['nested5', 'nested6'],\n },\n },\n },\n 'remove': [\n 'nested7',\n ],\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested1.nestedArray', 'nestedMap.nestedMapBoolean', 'nestedArray2']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'array<>': {\n 'nestedArray': {\n 'insert': [\n [\n 0,\n [\n {\n 'typeid': 'NodeProperty',\n },\n {\n 'typeid': 'NodeProperty',\n 'insert': {\n 'String': {\n 'text': '',\n },\n },\n },\n ],\n ],\n ],\n },\n },\n },\n },\n },\n 'map<>': {\n 'nestedMap': {\n 'insert': {\n 'Bool': {\n 'nestedMapBoolean': true,\n },\n },\n },\n },\n },\n 'modify': {\n 'array<Float32>': {\n 'nestedArray2': {\n 'modify': [[0, [0.707, 0.707, 0], [0, 0, 1]]],\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['namedProp.guid', 'namedNodeProp.enumProp', 'namedNodeProp.guid']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NamedProperty': {\n 'namedProp': {\n 'String': {\n 'guid': 'e763527c-7f49-417c-8df3-9fb7f90a1932',\n },\n },\n },\n 'NamedNodeProperty': {\n 'namedNodeProp': {\n 'String': {\n 'guid': 'efc68477-53b1-49ac-bd3f-e05a21f85a32',\n },\n 'insert': {\n 'enum<autodesk.core:UnitsEnum-1.0.0>': {\n 'enumProp': 0,\n },\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.a', 'customTemplate.nested.c.d.e', 'customTemplate.nestedSet']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'nested.c.d.e': 'world',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, new Map([[\n 'customTemplate', new Map(\n [\n ['a', new Map()],\n ['nested', new Map([[\n 'c', new Map([[\n 'd', new Map([[\n 'e', new Map(),\n ]]),\n ]]),\n ]])],\n ['nestedSet', new Map()],\n ],\n ),\n ]]));\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'nested.c.d.e': 'world',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nested.c']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'String': {\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n },\n },\n },\n });\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nested.c.d']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'String': {\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['refProp', 'refRepoProp.commitGUID', 'refRepoProp.followBranch']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'Reference<String>': {\n 'refProp': '/test.prop',\n },\n 'RepositoryReferenceProperty': {\n 'refRepoProp': {\n 'Bool': {\n 'followBranch': false,\n },\n 'String': {\n 'commitGUID': '4c611c89-8241-4764-958e-77470bba3b9b',\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['assetMap[1].name']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'map<mysample:asset-1.0.0>': {\n 'assetMap': {\n 'insert': {\n 'mysample:asset-1.0.0': {\n '1': {\n 'String': {\n 'name': 'test asset 1',\n },\n },\n },\n },\n },\n },\n },\n });\n\n // For maps, using dots as separators, instead of brackets, is also supported.\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['assetMap.1.name']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'map<mysample:asset-1.0.0>': {\n 'assetMap': {\n 'insert': {\n 'mysample:asset-1.0.0': {\n '1': {\n 'String': {\n 'name': 'test asset 1',\n },\n },\n },\n },\n },\n },\n },\n });\n });\n\n it('should ignore overlapping paths', function() {\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate', 'customTemplate.a', 'customTemplate.nested.c.d.e', 'customTemplate.nestedSet']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'b': 'hello',\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nestedSet[91a59cb6-9881-2b5f-2366-84dbdc8b6838].guid']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n // Flip order\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.a', 'customTemplate.nested.c.d.e', 'customTemplate', 'customTemplate.nestedSet']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'b': 'hello',\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n // Duplicate paths\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.a', 'customTemplate', 'customTemplate.nested.c.d.e', 'customTemplate', 'customTemplate.nestedSet']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'b': 'hello',\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['emptyString']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'String': {\n 'emptyString': '',\n },\n },\n });\n });\n\n it('should return an empty change set when filtering by a path that does not exist', function() {\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['path.that.does.not.exist', 'dontExist', 'does.not.exist']);\n\n expect(filteredCS).to.be.eql({});\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested7', 'nested4', 'nested1.nested2', 'path.that.does.not.exist', 'dontExist', 'does.not.exist']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n },\n },\n },\n },\n 'modify': {\n 'NodeProperty': {\n 'nested4': {\n 'insert': {\n 'Uint32': {\n 'number': 4,\n },\n },\n 'remove': ['nested5', 'nested6'],\n },\n },\n },\n 'remove': [\n 'nested7',\n ],\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested1.nested2', 'nested1.nested6']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n // Partially matched paths are included\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['assetMap[2]']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'map<mysample:asset-1.0.0>': {\n 'assetMap': {\n },\n },\n },\n });\n\n // Closest partially matched path 'customTemplate.nested.c.d' cannot be included\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nested.c.d.g']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n },\n },\n },\n });\n\n // Partial match should also work with nested properties\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested1.trulyNestedMap[newKey]']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'map<>': {\n 'trulyNestedMap': {\n },\n },\n },\n },\n },\n },\n });\n\n // Filter a nested non existing entry from a templated property\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nestedSet.nonExisting', 'customTemplate.a']);\n expect(filteredCS).to.eql({\n insert: {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n },\n },\n },\n },\n },\n });\n\n // Make sure, nested removes are treated correctly\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested7.abcd']);\n expect(filteredCS).to.eql({\n 'remove': ['nested7'],\n });\n });\n\n it('should fail filtering change sets with paths that resolve into arrays and sets', function() {\n var failedFilteredFunc = Utils.getFilteredChangeSetByPaths.bind(null, changeSet, ['nested1.nestedArray[0]']);\n\n expect(failedFilteredFunc).to.throw(Error, MSG.FILTER_PATH_WITHIN_ARRAY);\n\n // With valid paths\n failedFilteredFunc = Utils.getFilteredChangeSetByPaths.bind(null, changeSet, ['customTemplate', 'nested1.nestedArray[0]']);\n\n expect(failedFilteredFunc).to.throw(Error, MSG.FILTER_PATH_WITHIN_ARRAY);\n });\n\n it('should work for ChangeSet with segments requiring escapes for NodeProperties', function() {\n var node = PropertyFactory.create('NodeProperty');\n node.insert('.\"test\".', PropertyFactory.create('NodeProperty'));\n node.get('.\"test\".').insert('[abcd]', PropertyFactory.create('String', undefined, 'test'));\n\n var CS = node.serialize();\n var filteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\".\\\\\"test\\\\\".\".\"[abcd]\"']);\n expect(filteredCS).to.deep.equal(CS);\n\n node.cleanDirty();\n node.get('.\"test\".').get('[abcd]').setValue('test2');\n\n // Test a modification\n CS = node.serialize({ dirtyOnly: true });\n filteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\".\\\\\"test\\\\\".\".\"[abcd]\"']);\n expect(filteredCS).to.deep.equal(CS);\n\n // Test a removal\n node.cleanDirty();\n node.get('.\"test\".').remove('[abcd]');\n CS = node.serialize({ dirtyOnly: true });\n filteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\".\\\\\"test\\\\\".\"']);\n expect(filteredCS).to.deep.equal(CS);\n });\n\n it('should work for ChangeSet with segments requiring escapes in template', function() {\n var node = PropertyFactory.create('autodesk.tests:property.with.quotable.characters-1.0.0');\n node.cleanDirty();\n\n node.get(['test[property]', '.property.']).get('test').value = 'test';\n\n var CS = node.serialize({ dirtyOnly: true });\n var filteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\"test[property]\".\".property.\"']);\n expect(filteredCS).to.deep.equal(CS);\n });\n\n it('should work for reversible ChangeSet', function() {\n var originalChangeSet = {\n 'insert': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'F': { 'String': { 'stringProperty': '' } },\n },\n },\n 'remove': ['B', 'C'],\n 'modify': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'A': { 'String': { 'stringProperty': 'hello' } },\n },\n },\n };\n var parentChangeSet = {\n 'insert': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'A': { 'String': { 'stringProperty': '' } },\n 'B': { 'String': { 'stringProperty': '' } },\n 'C': { 'String': { 'stringProperty': '' } },\n },\n },\n };\n\n var cs = new ChangeSet(originalChangeSet);\n cs._toReversibleChangeSet(parentChangeSet);\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(cs.getSerializedChangeSet(), ['A', 'B', 'F']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'F': { 'String': { 'stringProperty': '' } },\n },\n },\n 'remove': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'B': { 'String': { 'stringProperty': '' } },\n },\n }, 'modify': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'A': {\n 'String': {\n 'stringProperty': {\n 'value': 'hello',\n 'oldValue': '',\n },\n },\n },\n },\n },\n });\n });\n });\n\n describe('Utils.getFilteredOutChangeSetByPaths', () => {\n const changeset = {\n 'insert': {\n 'map<NodeProperty>': {\n 'assets': {\n 'insert': {\n 'autodesk.test:sample-1.0.0': {\n 'Prop1': {\n 'String': {\n 'guid': 'Prop1',\n },\n },\n 'Prop2': {\n 'String': {\n 'guid': 'Prop2',\n },\n },\n 'Prop3': {\n 'String': {\n 'guid': 'Prop3',\n },\n },\n },\n },\n },\n },\n },\n };\n\n const singleExclusion = {\n 'insert': {\n 'map<NodeProperty>': {\n 'assets': {\n 'insert': {\n 'autodesk.test:sample-1.0.0': {\n 'Prop1': {\n 'String': {\n 'guid': 'Prop1',\n },\n },\n 'Prop2': {\n 'String': {\n 'guid': 'Prop2',\n },\n },\n },\n },\n },\n },\n },\n };\n\n const multiExclusion = {\n 'insert': {\n 'map<NodeProperty>': {\n 'assets': {\n 'insert': {\n 'autodesk.test:sample-1.0.0': {\n 'Prop1': {\n 'String': {\n 'guid': 'Prop1',\n },\n },\n },\n },\n },\n },\n },\n };\n\n it('should exclude single given path', () => {\n let res = Utils.excludePathsFromChangeSet(changeset, 'assets[Prop3]');\n expect(res).to.be.deep.equal(singleExclusion);\n });\n\n it('should exclude single given path in array', () => {\n let res = Utils.excludePathsFromChangeSet(changeset, ['assets[Prop3]']);\n expect(res).to.be.deep.equal(singleExclusion);\n });\n\n it('should exclude every given path in array', () => {\n let res = Utils.excludePathsFromChangeSet(changeset, ['assets[Prop3]', 'assets[Prop2]']);\n expect(res).to.be.deep.equal(multiExclusion);\n });\n\n it('should return undefined if no changeset is passed', () => {\n let res = Utils.excludePathsFromChangeSet(undefined, ['assets[Prop3]']);\n expect(res).to.be.undefined;\n });\n\n it('should not exclude if no paths are passed', () => {\n expect(Utils.excludePathsFromChangeSet(changeset)).to.be.deep.equal(changeset);\n expect(Utils.excludePathsFromChangeSet(changeset, '')).to.be.deep.equal(changeset);\n expect(Utils.excludePathsFromChangeSet(changeset, [])).to.be.deep.equal(changeset);\n });\n\n it('should not exclude if an invalid path is passed', () => {\n expect(Utils.excludePathsFromChangeSet(changeset, ['a.b.c'])).to.be.deep.equal(changeset);\n });\n\n it('should copy the changeset', () => {\n expect(Utils.excludePathsFromChangeSet(changeset, ['assets[prop3]'])).to.not.be.equal(changeset);\n });\n });\n});\n"]}
1
+ {"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../src/test/utils.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/* globals assert */\n\n/**\n * @fileoverview In this file, we will test the utils described in /src/utils.js\n */\n\nconst { ChangeSet } = require(\"@fluid-experimental/property-changeset\");\nconst { Utils } = require(\"@fluid-experimental/property-changeset\");\nconst { MSG } = require(\"@fluid-experimental/property-common\").constants;\nconst _ = require(\"lodash\");\nconst { PropertyFactory } = require(\"..\");\nconst { BaseProperty } = require(\"..\");\nconst { NodeProperty } = require(\"../properties/nodeProperty\");\n\ndescribe(\"Utils\", function () {\n\tbefore(function () {\n\t\tvar TaskStatus = {\n\t\t\t// inherits : 'Enum',\n\t\t\ttypeid: \"autodesk.test:utils.spec.task.status-1.0.0\",\n\t\t\t/* values : {\n running : 'running',\n created : 'created',\n succeeded : 'succeeded',\n failed : 'failed',\n canceled : 'canceled'\n },\n default : 'created' */\n\t\t};\n\n\t\t// The subject property template to be tracked\n\t\tvar TaskSubject = {\n\t\t\tinherits: [\"NodeProperty\"],\n\t\t\ttypeid: \"autodesk.test:utils.spec.task.subject-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t// {id: 'status', typeid: 'autodesk.test:utils_spec_status-1.0.0'},\n\t\t\t\t{ id: \"errorMsg\", typeid: \"String\" },\n\t\t\t\t// {id: 'result', typeid: 'BaseProperty'},\n\t\t\t\t{ id: \"progress\", typeid: \"Uint32\", annotation: { min: 0, max: 100 } },\n\t\t\t\t// {id: 'timeRemaining' , typeid : 'autodesk.test:utils_spec_datedelta-1.0.0'}\n\t\t\t],\n\t\t};\n\n\t\t// The observer tracking subject(s)\n\t\tvar TaskObserver = {\n\t\t\tinherits: \"autodesk.test:utils.spec.task.subject-1.0.0\",\n\t\t\ttypeid: \"autodesk.test:utils.spec.task.observer-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{ id: \"name\", typeid: \"String\" },\n\t\t\t\t{ id: \"creator\", typeid: \"autodesk.test:utils.spec.user-1.0.0\" },\n\t\t\t\t{\n\t\t\t\t\tid: \"subjects\",\n\t\t\t\t\ttypeid: \"autodesk.test:utils.spec.task.subjectentry-1.0.0\",\n\t\t\t\t\tcontext: \"array\",\n\t\t\t\t},\n\t\t\t\t{ id: \"startTime\", typeid: \"autodesk.test:utils.spec.date-1.0.0\" },\n\t\t\t\t{ id: \"endTime\", typeid: \"autodesk.test:utils.spec.date-1.0.0\" },\n\t\t\t],\n\t\t};\n\n\t\t// Subject entries passed in to the 'subjects' field of the task observer\n\t\tvar TaskSubjectEntries = {\n\t\t\ttypeid: \"autodesk.test:utils.spec.task.subjectentry-1.0.0\",\n\t\t\tproperties: [{ id: \"path\", typeid: \"String\" }],\n\t\t};\n\n\t\t// Example usage of task subjects to be tracked\n\t\tvar Sim = {\n\t\t\tinherits: [\"NodeProperty\"],\n\t\t\ttypeid: \"autodesk.test:utils.spec.pan.sim-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{ id: \"costEstimated\", typeid: \"autodesk.test:utils.spec.task.subject-1.0.0\" },\n\t\t\t\t{ id: \"costFinal\", typeid: \"autodesk.test:utils.spec.task.subject-1.0.0\" },\n\n\t\t\t\t// set by client to start or cancel the simulation\n\t\t\t\t{ id: \"start\", typeid: \"Bool\", default: false },\n\t\t\t\t{ id: \"cancel\", typeid: \"Bool\", default: false },\n\n\t\t\t\t// { id: 'inputs' , typeid: 'autodesk.test:utils_spec_pan.input-1.0.0' },\n\n\t\t\t\t{ id: \"thermalResults\", typeid: \"autodesk.test:utils.spec.task.subject-1.0.0\" },\n\t\t\t\t{ id: \"mechanicalResults\", typeid: \"autodesk.test:utils.spec.task.subject-1.0.0\" },\n\t\t\t],\n\t\t};\n\n\t\tvar nestedTemplate = {\n\t\t\ttypeid: \"autodesk.tests:nestedTemplate-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{\n\t\t\t\t\tid: \"a\",\n\t\t\t\t\ttypeid: \"String\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"b\",\n\t\t\t\t\ttypeid: \"String\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"c\",\n\t\t\t\t\tproperties: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"myNestedProp\",\n\t\t\t\t\t\t\ttypeid: \"autodesk.test:utils.spec.task.subject-1.0.0\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t\tvar QuoatablePropertyObject = {\n\t\t\ttypeid: \"autodesk.tests:property.with.quotable.characters-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{\n\t\t\t\t\tid: \"simple_property\",\n\t\t\t\t\ttypeid: \"String\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"test.property\",\n\t\t\t\t\ttypeid: \"String\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'test\"property\"',\n\t\t\t\t\ttypeid: \"String\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"test[property]\",\n\t\t\t\t\tproperties: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \".property.\",\n\t\t\t\t\t\t\tproperties: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: \"test\",\n\t\t\t\t\t\t\t\t\ttypeid: \"String\",\n\t\t\t\t\t\t\t\t},\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\t\t};\n\n\t\tvar ContainedTemplate = {\n\t\t\ttypeid: \"autodesk.test:utilsTestContained-1.0.0\",\n\t\t\tproperties: [{ id: 'error\"Msg\"', typeid: \"String\" }],\n\t\t};\n\n\t\tvar StaticNodeChild = {\n\t\t\ttypeid: \"autodesk.test:staticNodeChild-1.0.0\",\n\t\t\tinherits: [\"NodeProperty\"],\n\t\t\tproperties: [{ id: \"nodeProperty\", typeid: \"NodeProperty\" }],\n\t\t};\n\n\t\tvar ParentTemplate = {\n\t\t\ttypeid: \"autodesk.test:utilsTestParent-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{ id: \"errorMsg\", typeid: \"String\" },\n\t\t\t\t{ id: \"progress\", typeid: \"Uint32\" },\n\t\t\t\t{\n\t\t\t\t\tid: \"nested\",\n\t\t\t\t\tproperties: [{ id: 'en\"t\"ry', typeid: \"String\" }],\n\t\t\t\t},\n\t\t\t\t{ id: \"contained\", typeid: \"autodesk.test:utilsTestContained-1.0.0\" },\n\t\t\t\t{\n\t\t\t\t\tid: \"containedMap\",\n\t\t\t\t\ttypeid: \"autodesk.test:utilsTestContained-1.0.0\",\n\t\t\t\t\tcontext: \"map\",\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tPropertyFactory._reregister(TaskStatus);\n\t\tPropertyFactory._reregister(TaskSubject);\n\t\tPropertyFactory._reregister(TaskObserver);\n\t\tPropertyFactory._reregister(TaskSubjectEntries);\n\t\tPropertyFactory._reregister(Sim);\n\t\tPropertyFactory._reregister(nestedTemplate);\n\t\tPropertyFactory._reregister(QuoatablePropertyObject);\n\t\tPropertyFactory._reregister(ParentTemplate);\n\t\tPropertyFactory._reregister(ContainedTemplate);\n\t\tPropertyFactory._reregister(StaticNodeChild);\n\t});\n\n\tdescribe(\"Utils.traverseChangeSetRecursively\", function () {\n\t\tvar testRoot, contexts, namedNodePropForSet;\n\t\tit(\"should report correctly for inserts\", function () {\n\t\t\ttestRoot = PropertyFactory.create(\"NodeProperty\");\n\t\t\ttestRoot.insert(\"string\", PropertyFactory.create(\"String\"));\n\t\t\ttestRoot.insert(\n\t\t\t\t'test\"Templated\"Property',\n\t\t\t\tPropertyFactory.create(\"autodesk.test:utilsTestParent-1.0.0\"),\n\t\t\t);\n\t\t\ttestRoot\n\t\t\t\t.resolvePath('\"test\\\\\"Templated\\\\\"Property\".containedMap')\n\t\t\t\t.insert(\"entry\", PropertyFactory.create(\"autodesk.test:utilsTestContained-1.0.0\"));\n\t\t\ttestRoot.insert(\"reference\", PropertyFactory.create(\"Reference<String>\"));\n\n\t\t\t// Test an array with a primitive\n\t\t\ttestRoot.insert(\"floatArray\", PropertyFactory.create(\"Float32\", \"array\"));\n\t\t\ttestRoot._properties.floatArray.insertRange(0, [1, 2, 3, 4, 5]);\n\n\t\t\t// Test an array with a complex type\n\t\t\ttestRoot.insert(\"array\", PropertyFactory.create(\"array<>\"));\n\t\t\tvar arrayNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\ttestRoot._properties.array.push(arrayNode);\n\t\t\tarrayNode.insert(\"string\", PropertyFactory.create(\"String\"));\n\n\t\t\t// Test a map with a primitive\n\t\t\ttestRoot.insert(\"floatMap\", PropertyFactory.create(\"Float32\", \"map\"));\n\t\t\ttestRoot._properties.floatMap.insert(\"test\", 1);\n\t\t\ttestRoot._properties.floatMap.insert(\"test2\", 2);\n\t\t\ttestRoot._properties.floatMap.insert(\"test3\", 3);\n\n\t\t\t// Test a map with complex types\n\t\t\ttestRoot.insert(\"map\", PropertyFactory.create(\"map<>\"));\n\n\t\t\t// add members\n\t\t\t// Simple string\n\t\t\ttestRoot._properties.map.insert(\"string\", PropertyFactory.create(\"String\"));\n\n\t\t\t// String with name that has to be escaped\n\t\t\ttestRoot._properties.map.insert('s\"tr\"ing', PropertyFactory.create(\"String\"));\n\n\t\t\t// A map in a map\n\t\t\ttestRoot._properties.map.insert(\"map\", PropertyFactory.create(\"map<>\"));\n\t\t\ttestRoot._properties.map.get(\"map\").insert(\"string\", PropertyFactory.create(\"String\"));\n\n\t\t\t// An array in a map\n\t\t\ttestRoot._properties.map.insert(\"array\", PropertyFactory.create(\"array<>\"));\n\t\t\ttestRoot._properties.map.get(\"array\").insert(0, PropertyFactory.create(\"NodeProperty\"));\n\t\t\ttestRoot._properties.map\n\t\t\t\t.get(\"array\")\n\t\t\t\t.get(0)\n\t\t\t\t.insert(\"string\", PropertyFactory.create(\"String\"));\n\n\t\t\t// A composed property\n\t\t\ttestRoot._properties.map.insert(\n\t\t\t\t\"testParent\",\n\t\t\t\tPropertyFactory.create(\"autodesk.test:utilsTestParent-1.0.0\"),\n\t\t\t);\n\n\t\t\t// A NodeProperty\n\t\t\ttestRoot._properties.map.insert(\"nodeProperty\", PropertyFactory.create(\"NodeProperty\"));\n\t\t\ttestRoot._properties.map\n\t\t\t\t.get(\"nodeProperty\")\n\t\t\t\t.insert(\"string\", PropertyFactory.create(\"String\"));\n\n\t\t\t// Test a set property\n\t\t\ttestRoot.insert(\"set\", PropertyFactory.create(\"set<>\"));\n\t\t\tnamedNodePropForSet = PropertyFactory.create(\"NamedNodeProperty\");\n\t\t\ttestRoot._properties.set.insert(namedNodePropForSet);\n\t\t\tnamedNodePropForSet.insert(\"string\", PropertyFactory.create(\"String\"));\n\n\t\t\tcontexts = [];\n\t\t\tUtils.traverseChangeSetRecursively(testRoot.serialize({ dirtyOnly: false }), {\n\t\t\t\tpreCallback: function (in_context) {\n\t\t\t\t\t// Do some basic sanity checks\n\t\t\t\t\tvar node = testRoot.resolvePath(in_context.getFullPath() + \"*\");\n\t\t\t\t\texpect(node).to.be.instanceof(BaseProperty);\n\t\t\t\t\texpect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n\t\t\t\t\tif (in_context._fullPath !== \"\") {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"insert\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t}\n\n\t\t\t\t\tcontexts.push(in_context.clone());\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(contexts.length).to.equal(38);\n\t\t});\n\n\t\tit(\"should work for modifications of primitive types\", function () {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\tvar modifiedStringCount = 0;\n\t\t\tfor (var i = 0; i < contexts.length; i++) {\n\t\t\t\tvar modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n\n\t\t\t\t// modify strings\n\t\t\t\tif (contexts[i].getTypeid() === \"String\" && modifyNode.getId() !== \"guid\") {\n\t\t\t\t\tmodifyNode.setValue(\"modified\");\n\t\t\t\t\tmodifiedStringCount++;\n\t\t\t\t}\n\n\t\t\t\t// modify float arrays\n\t\t\t\tif (contexts[i].getTypeid() === \"array<Float32>\") {\n\t\t\t\t\tmodifyNode.push(15);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// modify a float map\n\t\t\t// note: set removed, setValue not implemented yet\n\t\t\ttestRoot._properties.floatMap.set(\"test\", 5);\n\t\t\ttestRoot._properties.floatMap.set(\"new_test\", 7);\n\n\t\t\tvar reportedStringModifiedCount = 0;\n\t\t\tUtils.traverseChangeSetRecursively(testRoot.serialize({ dirtyOnly: true }), {\n\t\t\t\tpreCallback: function (in_context) {\n\t\t\t\t\t// Do some basic sanity checks\n\t\t\t\t\tvar node = testRoot.resolvePath(in_context.getFullPath());\n\t\t\t\t\texpect(node).to.be.instanceof(BaseProperty);\n\t\t\t\t\texpect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\n\t\t\t\t\tif (node.getTypeid() === \"String\") {\n\t\t\t\t\t\treportedStringModifiedCount++;\n\t\t\t\t\t\texpect(in_context.getNestedChangeSet()).to.equal(\"modified\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (in_context.getTypeid() === \"array<Float32>\") {\n\t\t\t\t\t\texpect(in_context.getNestedChangeSet()).to.deep.equal({\n\t\t\t\t\t\t\tinsert: [[5, [15]]],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (in_context.getTypeid() === \"map<Float32>\") {\n\t\t\t\t\t\texpect(in_context.getNestedChangeSet()).to.deep.equal({\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\tnew_test: 7,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\t\ttest: 5,\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\t// Make sure all modified strings have been reported\n\t\t\texpect(reportedStringModifiedCount).to.equal(modifiedStringCount);\n\t\t});\n\n\t\tit(\"should work for inserts in strings\", function () {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\tfor (var i = 0; i < contexts.length; i++) {\n\t\t\t\tif (contexts[i].getTypeid() === \"String\") {\n\t\t\t\t\tvar modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n\t\t\t\t\tif (modifyNode.getId() !== \"guid\") {\n\t\t\t\t\t\tmodifyNode.insert(3, \"_inserted_\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tUtils.traverseChangeSetRecursively(testRoot.serialize({ dirtyOnly: true }), {\n\t\t\t\tpreCallback: function (in_context) {\n\t\t\t\t\t// Do some basic sanity checks\n\t\t\t\t\tvar node = testRoot.resolvePath(in_context.getFullPath());\n\t\t\t\t\texpect(node).to.be.instanceof(BaseProperty);\n\t\t\t\t\texpect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\n\t\t\t\t\tif (node.getTypeid() === \"String\") {\n\t\t\t\t\t\texpect(in_context.getNestedChangeSet()).to.deep.equal({\n\t\t\t\t\t\t\tinsert: [[3, \"_inserted_\"]],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should work for inserts in arrays\", function () {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\tvar newArrayNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\ttestRoot._properties.array.push(newArrayNode);\n\t\t\tnewArrayNode.insert(\"string\", PropertyFactory.create(\"String\"));\n\t\t\tnewArrayNode._properties.string.value = \"test\";\n\n\t\t\tUtils.traverseChangeSetRecursively(testRoot.serialize({ dirtyOnly: true }), {\n\t\t\t\tpreCallback: function (in_context) {\n\t\t\t\t\t// Do some basic sanity checks\n\t\t\t\t\tvar node = testRoot.resolvePath(in_context.getFullPath());\n\t\t\t\t\texpect(node).to.be.instanceof(BaseProperty);\n\t\t\t\t\texpect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n\t\t\t\t\tif (in_context.getFullPath() !== \"\" && in_context.getFullPath() !== \"array\") {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"insert\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node.getTypeid() === \"String\") {\n\t\t\t\t\t\texpect(in_context.getNestedChangeSet()).to.equal(\"test\");\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should work for inserts in sets\", function () {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\tvar newSetNode = PropertyFactory.create(\"NamedNodeProperty\");\n\t\t\ttestRoot._properties.set.insert(newSetNode);\n\t\t\tnewSetNode.insert(\"string\", PropertyFactory.create(\"String\"));\n\t\t\tnewSetNode._properties.string.setValue(\"test\");\n\n\t\t\tUtils.traverseChangeSetRecursively(testRoot.serialize({ dirtyOnly: true }), {\n\t\t\t\tpreCallback: function (in_context) {\n\t\t\t\t\t// Do some basic sanity checks\n\t\t\t\t\tvar node = testRoot.resolvePath(in_context.getFullPath());\n\t\t\t\t\texpect(node).to.be.instanceof(BaseProperty);\n\t\t\t\t\texpect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n\t\t\t\t\tif (in_context.getFullPath() !== \"\" && in_context.getFullPath() !== \"set\") {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"insert\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node.getTypeid() === \"String\") {\n\t\t\t\t\t\texpect(in_context.getNestedChangeSet()).to.equal(node.value);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should work for node property removals\", function () {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\tvar removedStrings = [];\n\t\t\tfor (var i = 0; i < contexts.length; i++) {\n\t\t\t\tif (contexts[i].getTypeid() === \"NodeProperty\") {\n\t\t\t\t\tvar modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n\t\t\t\t\tremovedStrings.push(modifyNode._properties.string.getAbsolutePath());\n\n\t\t\t\t\tmodifyNode.remove(\"string\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar actualStringRemoveCount = 0;\n\t\t\tUtils.traverseChangeSetRecursively(testRoot.serialize({ dirtyOnly: true }), {\n\t\t\t\tpreCallback: function (in_context) {\n\t\t\t\t\tvar node = testRoot.resolvePath(in_context.getFullPath());\n\t\t\t\t\tif (node) {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"remove\");\n\t\t\t\t\t\texpect(removedStrings.indexOf(\"/\" + in_context.getFullPath())).to.not.equal(\n\t\t\t\t\t\t\t-1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tactualStringRemoveCount++;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(removedStrings.length).to.equal(actualStringRemoveCount);\n\t\t});\n\n\t\tit(\"should work for array removals\", function () {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\ttestRoot._properties.array.removeRange(0, 2);\n\t\t\tvar arrayRemovalCount = 0;\n\t\t\tUtils.traverseChangeSetRecursively(testRoot.serialize({ dirtyOnly: true }), {\n\t\t\t\tpreCallback: function (in_context) {\n\t\t\t\t\tif (in_context.getFullPath() === \"\" || in_context.getFullPath() === \"array\") {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"remove\");\n\t\t\t\t\t\tarrayRemovalCount++;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(arrayRemovalCount).to.equal(2);\n\t\t});\n\n\t\tit(\"should work for map removals\", function () {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\ttestRoot._properties.map.remove(\"string\");\n\t\t\tvar mapRemovalCount = 0;\n\t\t\tUtils.traverseChangeSetRecursively(testRoot.serialize({ dirtyOnly: true }), {\n\t\t\t\tpreCallback: function (in_context) {\n\t\t\t\t\tif (in_context.getFullPath() === \"\" || in_context.getFullPath() === \"map\") {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"remove\");\n\t\t\t\t\t\tmapRemovalCount++;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(mapRemovalCount).to.equal(1);\n\t\t});\n\n\t\tit(\"should work for set removals\", function () {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\ttestRoot._properties.set.remove(namedNodePropForSet);\n\n\t\t\tvar setRemovalCount = 0;\n\t\t\tUtils.traverseChangeSetRecursively(testRoot.serialize({ dirtyOnly: true }), {\n\t\t\t\tpreCallback: function (in_context) {\n\t\t\t\t\tif (in_context.getFullPath() === \"\" || in_context.getFullPath() === \"set\") {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"remove\");\n\t\t\t\t\t\tsetRemovalCount++;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(setRemovalCount).to.equal(1);\n\t\t});\n\n\t\tit(\"should clone the context correctly\", function () {\n\t\t\ttestRoot.insert(\"setClone\", PropertyFactory.create(\"set<>\"));\n\t\t\tvar namedNodePropForSet1 = PropertyFactory.create(\"NamedNodeProperty\");\n\t\t\tvar namedNodePropForSet2 = PropertyFactory.create(\"NamedNodeProperty\");\n\t\t\tvar namedNodePropForSet3 = PropertyFactory.create(\"NamedNodeProperty\");\n\t\t\ttestRoot._properties.setClone.insert(namedNodePropForSet1);\n\t\t\ttestRoot._properties.setClone.insert(namedNodePropForSet2);\n\t\t\ttestRoot._properties.setClone.insert(namedNodePropForSet3);\n\t\t\tnamedNodePropForSet1.insert(\"string1\", PropertyFactory.create(\"String\"));\n\t\t\tnamedNodePropForSet2.insert(\"string2\", PropertyFactory.create(\"String\"));\n\t\t\tnamedNodePropForSet3.insert(\"string3\", PropertyFactory.create(\"String\"));\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\ttestRoot._properties.setClone.remove(namedNodePropForSet1);\n\t\t\ttestRoot._properties.setClone.remove(namedNodePropForSet2);\n\t\t\ttestRoot._properties.setClone.remove(namedNodePropForSet3);\n\n\t\t\tvar setRemovalCount = 0;\n\t\t\tvar contextCloneCount = 0;\n\t\t\tUtils.traverseChangeSetRecursively(testRoot.serialize({ dirtyOnly: true }), {\n\t\t\t\tpreCallback: function (in_context) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tin_context.getFullPath() === \"\" ||\n\t\t\t\t\t\tin_context.getFullPath() === \"setClone\"\n\t\t\t\t\t) {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"remove\");\n\t\t\t\t\t\tsetRemovalCount++;\n\t\t\t\t\t}\n\t\t\t\t\tvar cloneContext = in_context.clone();\n\t\t\t\t\texpect(cloneContext).to.deep.equal(in_context);\n\t\t\t\t\tcontextCloneCount++;\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(setRemovalCount).to.equal(3);\n\t\t\texpect(contextCloneCount >= 3).to.be.true; // we should clone at least 3 times (probably more)\n\t\t});\n\n\t\tit(\"@regression should work when replacing a map element\", function () {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\t\t\ttestRoot._properties.map.set(\n\t\t\t\t\"nodeProperty\",\n\t\t\t\tPropertyFactory.create(\"NamedNodeProperty\"),\n\t\t\t);\n\t\t\tvar operationtypes = [];\n\t\t\tUtils.traverseChangeSetRecursively(testRoot.serialize({ dirtyOnly: true }), {\n\t\t\t\tpreCallback: function (in_context) {\n\t\t\t\t\t// expect operations to be 'remove' and 'insert'\n\t\t\t\t\tif (in_context.getFullPath() === \"map[nodeProperty]\") {\n\t\t\t\t\t\toperationtypes.push(in_context.getOperationType());\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(operationtypes).to.deep.equal([\"remove\", \"insert\"]);\n\t\t});\n\t});\n\n\tdescribe(\"Utils.traverseChangeSetRecursivelyAsync\", function () {\n\t\tvar testRoot, contexts, namedNodePropForSet;\n\t\tit(\"should report correctly for inserts\", function (done) {\n\t\t\ttestRoot = PropertyFactory.create(\"NodeProperty\");\n\t\t\ttestRoot.insert(\"string\", PropertyFactory.create(\"String\"));\n\t\t\ttestRoot.insert(\n\t\t\t\t'test\"Templated\"Property',\n\t\t\t\tPropertyFactory.create(\"autodesk.test:utilsTestParent-1.0.0\"),\n\t\t\t);\n\t\t\ttestRoot\n\t\t\t\t.resolvePath('\"test\\\\\"Templated\\\\\"Property\".containedMap')\n\t\t\t\t.insert(\"entry\", PropertyFactory.create(\"autodesk.test:utilsTestContained-1.0.0\"));\n\t\t\ttestRoot.insert(\"reference\", PropertyFactory.create(\"Reference<String>\"));\n\n\t\t\t// Test an array with a primitive\n\t\t\ttestRoot.insert(\"floatArray\", PropertyFactory.create(\"Float32\", \"array\"));\n\t\t\ttestRoot._properties.floatArray.insertRange(0, [1, 2, 3, 4, 5]);\n\n\t\t\t// Test an array with a complex type\n\t\t\ttestRoot.insert(\"array\", PropertyFactory.create(\"array<>\"));\n\t\t\tvar arrayNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\ttestRoot._properties.array.push(arrayNode);\n\t\t\tarrayNode.insert(\"string\", PropertyFactory.create(\"String\"));\n\n\t\t\t// Test a map with a primitive\n\t\t\ttestRoot.insert(\"floatMap\", PropertyFactory.create(\"Float32\", \"map\"));\n\t\t\ttestRoot._properties.floatMap.insert(\"test\", 1);\n\t\t\ttestRoot._properties.floatMap.insert(\"test2\", 2);\n\t\t\ttestRoot._properties.floatMap.insert(\"test3\", 3);\n\n\t\t\t// Test a map with complex types\n\t\t\ttestRoot.insert(\"map\", PropertyFactory.create(\"map<>\"));\n\n\t\t\t// add members\n\t\t\t// Simple string\n\t\t\ttestRoot._properties.map.insert(\"string\", PropertyFactory.create(\"String\"));\n\n\t\t\t// String with name that has to be escaped\n\t\t\ttestRoot._properties.map.insert('s\"tr\"ing', PropertyFactory.create(\"String\"));\n\n\t\t\t// A map in a map\n\t\t\ttestRoot._properties.map.insert(\"map\", PropertyFactory.create(\"map<>\"));\n\t\t\ttestRoot._properties.map.get(\"map\").insert(\"string\", PropertyFactory.create(\"String\"));\n\n\t\t\t// An array in a map\n\t\t\ttestRoot._properties.map.insert(\"array\", PropertyFactory.create(\"array<>\"));\n\t\t\ttestRoot._properties.map.get(\"array\").insert(0, PropertyFactory.create(\"NodeProperty\"));\n\t\t\ttestRoot._properties.map\n\t\t\t\t.get(\"array\")\n\t\t\t\t.get(0)\n\t\t\t\t.insert(\"string\", PropertyFactory.create(\"String\"));\n\n\t\t\t// A composed property\n\t\t\ttestRoot._properties.map.insert(\n\t\t\t\t\"testParent\",\n\t\t\t\tPropertyFactory.create(\"autodesk.test:utilsTestParent-1.0.0\"),\n\t\t\t);\n\n\t\t\t// A NodeProperty\n\t\t\ttestRoot._properties.map.insert(\"nodeProperty\", PropertyFactory.create(\"NodeProperty\"));\n\t\t\ttestRoot._properties.map\n\t\t\t\t.get(\"nodeProperty\")\n\t\t\t\t.insert(\"string\", PropertyFactory.create(\"String\"));\n\n\t\t\t// Test a set property\n\t\t\ttestRoot.insert(\"set\", PropertyFactory.create(\"set<>\"));\n\t\t\tnamedNodePropForSet = PropertyFactory.create(\"NamedNodeProperty\");\n\t\t\ttestRoot._properties.set.insert(namedNodePropForSet);\n\t\t\tnamedNodePropForSet.insert(\"string\", PropertyFactory.create(\"String\"));\n\n\t\t\tcontexts = [];\n\t\t\tUtils.traverseChangeSetRecursivelyAsync(\n\t\t\t\ttestRoot.serialize({ dirtyOnly: false }),\n\t\t\t\t{\n\t\t\t\t\tpreCallback: function (in_context, cb) {\n\t\t\t\t\t\t// Do some basic sanity checks\n\t\t\t\t\t\tvar node = testRoot.resolvePath(in_context.getFullPath() + \"*\");\n\t\t\t\t\t\texpect(node).to.be.instanceof(BaseProperty);\n\t\t\t\t\t\texpect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n\t\t\t\t\t\tif (in_context._fullPath !== \"\") {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"insert\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontexts.push(in_context.clone());\n\t\t\t\t\t\tsetImmediate(cb);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\texpect(contexts.length).to.equal(38);\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\n\t\tit(\"should work for modifications of primitive types\", function (done) {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\tvar modifiedStringCount = 0;\n\t\t\tfor (var i = 0; i < contexts.length; i++) {\n\t\t\t\tvar modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n\n\t\t\t\t// modify strings\n\t\t\t\tif (contexts[i].getTypeid() === \"String\" && modifyNode.getId() !== \"guid\") {\n\t\t\t\t\tmodifyNode.setValue(\"modified\");\n\t\t\t\t\tmodifiedStringCount++;\n\t\t\t\t}\n\n\t\t\t\t// modify float arrays\n\t\t\t\tif (contexts[i].getTypeid() === \"array<Float32>\") {\n\t\t\t\t\tmodifyNode.push(15);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// modify a float map\n\t\t\t// note: set removed, setValue not implemented yet\n\t\t\ttestRoot._properties.floatMap.set(\"test\", 5);\n\t\t\ttestRoot._properties.floatMap.set(\"new_test\", 7);\n\n\t\t\tvar reportedStringModifiedCount = 0;\n\t\t\tUtils.traverseChangeSetRecursivelyAsync(\n\t\t\t\ttestRoot.serialize({ dirtyOnly: true }),\n\t\t\t\t{\n\t\t\t\t\tpreCallback: function (in_context, cb) {\n\t\t\t\t\t\t// Do some basic sanity checks\n\t\t\t\t\t\tvar node = testRoot.resolvePath(in_context.getFullPath());\n\t\t\t\t\t\texpect(node).to.be.instanceof(BaseProperty);\n\t\t\t\t\t\texpect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\n\t\t\t\t\t\tif (node.getTypeid() === \"String\") {\n\t\t\t\t\t\t\treportedStringModifiedCount++;\n\t\t\t\t\t\t\texpect(in_context.getNestedChangeSet()).to.equal(\"modified\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (in_context.getTypeid() === \"array<Float32>\") {\n\t\t\t\t\t\t\texpect(in_context.getNestedChangeSet()).to.deep.equal({\n\t\t\t\t\t\t\t\tinsert: [[5, [15]]],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (in_context.getTypeid() === \"map<Float32>\") {\n\t\t\t\t\t\t\texpect(in_context.getNestedChangeSet()).to.deep.equal({\n\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\tnew_test: 7,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\t\t\ttest: 5,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetImmediate(cb);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\t// Make sure all modified strings have been reported\n\t\t\t\t\texpect(reportedStringModifiedCount).to.equal(modifiedStringCount);\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\n\t\tit(\"should work for inserts in strings\", function (done) {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\tfor (var i = 0; i < contexts.length; i++) {\n\t\t\t\tif (contexts[i].getTypeid() === \"String\") {\n\t\t\t\t\tvar modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n\t\t\t\t\tif (modifyNode.getId() !== \"guid\") {\n\t\t\t\t\t\tmodifyNode.insert(3, \"_inserted_\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tUtils.traverseChangeSetRecursivelyAsync(\n\t\t\t\ttestRoot.serialize({ dirtyOnly: true }),\n\t\t\t\t{\n\t\t\t\t\tpreCallback: function (in_context, cb) {\n\t\t\t\t\t\t// Do some basic sanity checks\n\t\t\t\t\t\tvar node = testRoot.resolvePath(in_context.getFullPath());\n\t\t\t\t\t\texpect(node).to.be.instanceof(BaseProperty);\n\t\t\t\t\t\texpect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\n\t\t\t\t\t\tif (node.getTypeid() === \"String\") {\n\t\t\t\t\t\t\texpect(in_context.getNestedChangeSet()).to.deep.equal({\n\t\t\t\t\t\t\t\tinsert: [[3, \"_inserted_\"]],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetImmediate(cb);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\n\t\tit(\"should work for inserts in arrays\", function (done) {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\tvar newArrayNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\ttestRoot._properties.array.push(newArrayNode);\n\t\t\tnewArrayNode.insert(\"string\", PropertyFactory.create(\"String\"));\n\t\t\tnewArrayNode._properties.string.value = \"test\";\n\n\t\t\tUtils.traverseChangeSetRecursivelyAsync(\n\t\t\t\ttestRoot.serialize({ dirtyOnly: true }),\n\t\t\t\t{\n\t\t\t\t\tpreCallback: function (in_context, cb) {\n\t\t\t\t\t\t// Do some basic sanity checks\n\t\t\t\t\t\tvar node = testRoot.resolvePath(in_context.getFullPath());\n\t\t\t\t\t\texpect(node).to.be.instanceof(BaseProperty);\n\t\t\t\t\t\texpect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tin_context.getFullPath() !== \"\" &&\n\t\t\t\t\t\t\tin_context.getFullPath() !== \"array\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"insert\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (node.getTypeid() === \"String\") {\n\t\t\t\t\t\t\texpect(in_context.getNestedChangeSet()).to.equal(\"test\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetImmediate(cb);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\n\t\tit(\"should work for inserts in sets\", function (done) {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\tvar newSetNode = PropertyFactory.create(\"NamedNodeProperty\");\n\t\t\ttestRoot._properties.set.insert(newSetNode);\n\t\t\tnewSetNode.insert(\"string\", PropertyFactory.create(\"String\"));\n\t\t\tnewSetNode._properties.string.setValue(\"test\");\n\n\t\t\tUtils.traverseChangeSetRecursivelyAsync(\n\t\t\t\ttestRoot.serialize({ dirtyOnly: true }),\n\t\t\t\t{\n\t\t\t\t\tpreCallback: function (in_context, cb) {\n\t\t\t\t\t\t// Do some basic sanity checks\n\t\t\t\t\t\tvar node = testRoot.resolvePath(in_context.getFullPath());\n\t\t\t\t\t\texpect(node).to.be.instanceof(BaseProperty);\n\t\t\t\t\t\texpect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n\t\t\t\t\t\tif (in_context.getFullPath() !== \"\" && in_context.getFullPath() !== \"set\") {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"insert\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (node.getTypeid() === \"String\") {\n\t\t\t\t\t\t\texpect(in_context.getNestedChangeSet()).to.equal(node.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetImmediate(cb);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdone,\n\t\t\t);\n\t\t});\n\n\t\tit(\"should work for node property removals\", function (done) {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\tvar removedStrings = [];\n\t\t\tfor (var i = 0; i < contexts.length; i++) {\n\t\t\t\tif (contexts[i].getTypeid() === \"NodeProperty\") {\n\t\t\t\t\tvar modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n\t\t\t\t\tremovedStrings.push(modifyNode._properties.string.getAbsolutePath());\n\n\t\t\t\t\tmodifyNode.remove(\"string\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar actualStringRemoveCount = 0;\n\t\t\tUtils.traverseChangeSetRecursivelyAsync(\n\t\t\t\ttestRoot.serialize({ dirtyOnly: true }),\n\t\t\t\t{\n\t\t\t\t\tpreCallback: function (in_context, cb) {\n\t\t\t\t\t\tvar node = testRoot.resolvePath(in_context.getFullPath());\n\t\t\t\t\t\tif (node) {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"remove\");\n\t\t\t\t\t\t\texpect(\n\t\t\t\t\t\t\t\tremovedStrings.indexOf(\"/\" + in_context.getFullPath()),\n\t\t\t\t\t\t\t).to.not.equal(-1);\n\t\t\t\t\t\t\tactualStringRemoveCount++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetImmediate(cb);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\texpect(removedStrings.length).to.equal(actualStringRemoveCount);\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\n\t\tit(\"should work for array removals\", function (done) {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\ttestRoot._properties.array.removeRange(0, 2);\n\t\t\tvar arrayRemovalCount = 0;\n\t\t\tUtils.traverseChangeSetRecursivelyAsync(\n\t\t\t\ttestRoot.serialize({ dirtyOnly: true }),\n\t\t\t\t{\n\t\t\t\t\tpreCallback: function (in_context, cb) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tin_context.getFullPath() === \"\" ||\n\t\t\t\t\t\t\tin_context.getFullPath() === \"array\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"remove\");\n\t\t\t\t\t\t\tarrayRemovalCount++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetImmediate(cb);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\texpect(arrayRemovalCount).to.equal(2);\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\n\t\tit(\"should work for map removals\", function (done) {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\ttestRoot._properties.map.remove(\"string\");\n\t\t\tvar mapRemovalCount = 0;\n\t\t\tUtils.traverseChangeSetRecursivelyAsync(\n\t\t\t\ttestRoot.serialize({ dirtyOnly: true }),\n\t\t\t\t{\n\t\t\t\t\tpreCallback: function (in_context, cb) {\n\t\t\t\t\t\tif (in_context.getFullPath() === \"\" || in_context.getFullPath() === \"map\") {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"remove\");\n\t\t\t\t\t\t\tmapRemovalCount++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetImmediate(cb);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\texpect(mapRemovalCount).to.equal(1);\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\n\t\tit(\"should work for set removals\", function (done) {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\ttestRoot._properties.set.remove(namedNodePropForSet);\n\n\t\t\tvar setRemovalCount = 0;\n\t\t\tUtils.traverseChangeSetRecursivelyAsync(\n\t\t\t\ttestRoot.serialize({ dirtyOnly: true }),\n\t\t\t\t{\n\t\t\t\t\tpreCallback: function (in_context, cb) {\n\t\t\t\t\t\tif (in_context.getFullPath() === \"\" || in_context.getFullPath() === \"set\") {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"remove\");\n\t\t\t\t\t\t\tsetRemovalCount++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetImmediate(cb);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\texpect(setRemovalCount).to.equal(1);\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\n\t\tit(\"should clone the context correctly\", function (done) {\n\t\t\ttestRoot.insert(\"setClone\", PropertyFactory.create(\"set<>\"));\n\t\t\tvar namedNodePropForSet1 = PropertyFactory.create(\"NamedNodeProperty\");\n\t\t\tvar namedNodePropForSet2 = PropertyFactory.create(\"NamedNodeProperty\");\n\t\t\tvar namedNodePropForSet3 = PropertyFactory.create(\"NamedNodeProperty\");\n\t\t\ttestRoot._properties.setClone.insert(namedNodePropForSet1);\n\t\t\ttestRoot._properties.setClone.insert(namedNodePropForSet2);\n\t\t\ttestRoot._properties.setClone.insert(namedNodePropForSet3);\n\t\t\tnamedNodePropForSet1.insert(\"string1\", PropertyFactory.create(\"String\"));\n\t\t\tnamedNodePropForSet2.insert(\"string2\", PropertyFactory.create(\"String\"));\n\t\t\tnamedNodePropForSet3.insert(\"string3\", PropertyFactory.create(\"String\"));\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\ttestRoot._properties.setClone.remove(namedNodePropForSet1);\n\t\t\ttestRoot._properties.setClone.remove(namedNodePropForSet2);\n\t\t\ttestRoot._properties.setClone.remove(namedNodePropForSet3);\n\n\t\t\tvar setRemovalCount = 0;\n\t\t\tvar contextCloneCount = 0;\n\t\t\tUtils.traverseChangeSetRecursivelyAsync(\n\t\t\t\ttestRoot.serialize({ dirtyOnly: true }),\n\t\t\t\t{\n\t\t\t\t\tpreCallback: function (in_context, cb) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tin_context.getFullPath() === \"\" ||\n\t\t\t\t\t\t\tin_context.getFullPath() === \"setClone\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"remove\");\n\t\t\t\t\t\t\tsetRemovalCount++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar cloneContext = in_context.clone();\n\t\t\t\t\t\texpect(cloneContext).to.deep.equal(in_context);\n\t\t\t\t\t\tcontextCloneCount++;\n\t\t\t\t\t\tsetImmediate(cb);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\texpect(setRemovalCount).to.equal(3);\n\t\t\t\t\texpect(contextCloneCount >= 3).to.be.true; // we should clone at least 3 times (probably more)\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\n\t\tit(\"@regression should work for mixed modifications and removals\", function (done) {\n\t\t\t// This test uses its own property sets tree\n\t\t\tvar ownRoot = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar userInfo = PropertyFactory.create(\"NodeProperty\");\n\t\t\tuserInfo.insert(\"name\", PropertyFactory.create(\"String\", \"single\", \"John Doe\"));\n\t\t\tuserInfo.insert(\"isResident\", PropertyFactory.create(\"Bool\", \"single\", true));\n\t\t\townRoot.insert(\"userInfo\", userInfo);\n\t\t\tvar numberOfResidents = PropertyFactory.create(\"Int32\", \"single\", 1);\n\t\t\townRoot.insert(\"numberOfResidents\", numberOfResidents);\n\n\t\t\townRoot.cleanDirty();\n\n\t\t\townRoot.get([\"userInfo\", \"name\"]).setValue(\"Johnny B. Goode\");\n\t\t\townRoot.get(\"userInfo\").remove(\"isResident\");\n\t\t\townRoot.get(\"numberOfResidents\").setValue(0);\n\n\t\t\tvar modifiedCount = 0;\n\t\t\tvar serializedCS = ownRoot.serialize({ dirtyOnly: true });\n\t\t\tUtils.traverseChangeSetRecursivelyAsync(\n\t\t\t\tserializedCS,\n\t\t\t\t{\n\t\t\t\t\tpreCallback: function (in_context, cb) {\n\t\t\t\t\t\tvar node = ownRoot.resolvePath(in_context.getFullPath());\n\t\t\t\t\t\tif (node) {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"modify\");\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tin_context.getLastSegment() === \"name\" ||\n\t\t\t\t\t\t\t\tin_context.getLastSegment() === \"numberOfResidents\"\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tmodifiedCount++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\texpect(in_context.getOperationType()).to.equal(\"remove\");\n\t\t\t\t\t\t\texpect(in_context.getLastSegment()).to.equal(\"isResident\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetImmediate(cb);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\texpect(modifiedCount).to.equal(2);\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\n\t\tit(\"@regression should work when replacing a map element\", function (done) {\n\t\t\t// Clean the old modifications\n\t\t\ttestRoot.cleanDirty();\n\n\t\t\ttestRoot._properties.map.set(\n\t\t\t\t\"testParent\",\n\t\t\t\tPropertyFactory.create(\"autodesk.test:utilsTestParent-1.0.0\", \"single\", {\n\t\t\t\t\terrorMsg: \"another element\",\n\t\t\t\t\tprogress: 99,\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tvar operations = [];\n\t\t\tUtils.traverseChangeSetRecursivelyAsync(\n\t\t\t\ttestRoot.serialize({ dirtyOnly: true }),\n\t\t\t\t{\n\t\t\t\t\tpreCallback: function (in_context, cb) {\n\t\t\t\t\t\tif (in_context.getFullPath() === \"map[testParent]\") {\n\t\t\t\t\t\t\toperations.push(in_context.getOperationType());\n\t\t\t\t\t\t} else if (in_context.getFullPath() === \"map[testParent].errorMsg\") {\n\t\t\t\t\t\t\texpect(in_context.getNestedChangeSet() === \"another element\");\n\t\t\t\t\t\t} else if (in_context.getFullPath() === \"map[testParent].progress\") {\n\t\t\t\t\t\t\texpect(in_context.getNestedChangeSet() === 99);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetImmediate(cb);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\texpect(operations).to.deep.equal([\"remove\", \"insert\"]);\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"Utils.enumerateSchemas\", function () {\n\t\tvar serializedChangeSet = {\n\t\t\tinsertTemplates: {\n\t\t\t\t\"autodesk.tests:property.set.SimpleNamedPoint-1.0.0\": {\n\t\t\t\t\ttypeid: \"autodesk.tests:property.set.SimpleNamedPoint-1.0.0\",\n\t\t\t\t\tinherits: \"NamedProperty\",\n\t\t\t\t\tproperties: [\n\t\t\t\t\t\t{ id: \"x\", typeid: \"Uint32\" },\n\t\t\t\t\t\t{ id: \"y\", typeid: \"Uint32\" },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t\"autodesk.tests:property.set.SimpleNamedPoint-1.2.0\": {\n\t\t\t\t\ttypeid: \"autodesk.tests:property.set.SimpleNamedPoint-1.0.0\",\n\t\t\t\t\tinherits: \"NamedProperty\",\n\t\t\t\t\tproperties: [\n\t\t\t\t\t\t{ id: \"x\", typeid: \"Uint64\" },\n\t\t\t\t\t\t{ id: \"y\", typeid: \"Uint64\" },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tit(\"should return the schemas, and then call the finalizer\", function (done) {\n\t\t\tvar countedTemplates = 0;\n\t\t\tUtils.enumerateSchemas(\n\t\t\t\tserializedChangeSet,\n\t\t\t\tfunction (t, cb) {\n\t\t\t\t\tcountedTemplates++;\n\t\t\t\t\tif (t.key === \"autodesk.tests:property.set.SimpleNamedPoint-1.0.0\") {\n\t\t\t\t\t\texpect(t.value).to.eql(\n\t\t\t\t\t\t\tserializedChangeSet.insertTemplates[\n\t\t\t\t\t\t\t\t\"autodesk.tests:property.set.SimpleNamedPoint-1.0.0\"\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\tif (t.key === \"autodesk.tests:property.set.SimpleNamedPoint-1.2.0\") {\n\t\t\t\t\t\texpect(t.value).to.eql(\n\t\t\t\t\t\t\tserializedChangeSet.insertTemplates[\n\t\t\t\t\t\t\t\t\"autodesk.tests:property.set.SimpleNamedPoint-1.2.0\"\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\tsetImmediate(cb);\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\texpect(countedTemplates).to.eql(2);\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"Utils.extractTypeids\", function () {\n\t\tit(\"Should work for a simple templated property\", function () {\n\t\t\tvar property = PropertyFactory.create(\"autodesk.test:utilsTestParent-1.0.0\");\n\n\t\t\tvar typeids = Utils.extractTypeids(\n\t\t\t\tproperty.serialize({ dirtyOnly: false, includeRootTypeid: true }),\n\t\t\t);\n\t\t\ttypeids.sort();\n\t\t\t// Note the map from the template isn't included in the ChangeSet since it is empty\n\t\t\texpect(typeids).to.deep.equal([\n\t\t\t\t\"String\",\n\t\t\t\t\"Uint32\",\n\t\t\t\t\"autodesk.test:utilsTestContained-1.0.0\",\n\t\t\t\t\"autodesk.test:utilsTestParent-1.0.0\",\n\t\t\t\t\"map<autodesk.test:utilsTestContained-1.0.0>\",\n\t\t\t]);\n\t\t});\n\n\t\tit(\"Should work for inserts into a NodePropertý\", function () {\n\t\t\tvar property = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar child = PropertyFactory.create(\"autodesk.test:utilsTestParent-1.0.0\");\n\t\t\tproperty.insert(\"child\", child);\n\n\t\t\tvar typeids = Utils.extractTypeids(\n\t\t\t\tproperty.serialize({ dirtyOnly: false, includeRootTypeid: true }),\n\t\t\t);\n\t\t\ttypeids.sort();\n\t\t\texpect(typeids).to.deep.equal([\n\t\t\t\t\"NodeProperty\",\n\t\t\t\t\"String\",\n\t\t\t\t\"Uint32\",\n\t\t\t\t\"autodesk.test:utilsTestContained-1.0.0\",\n\t\t\t\t\"autodesk.test:utilsTestParent-1.0.0\",\n\t\t\t\t\"map<autodesk.test:utilsTestContained-1.0.0>\",\n\t\t\t]);\n\t\t});\n\n\t\tit(\"Should work for inserts into a map\", function () {\n\t\t\tvar property = PropertyFactory.create(\"map<>\");\n\t\t\tvar child = PropertyFactory.create(\"autodesk.test:utilsTestParent-1.0.0\");\n\t\t\tproperty.insert(\"child\", child);\n\n\t\t\tvar typeids = Utils.extractTypeids(property._serialize(false, true));\n\t\t\ttypeids.sort();\n\n\t\t\texpect(typeids).to.deep.equal([\n\t\t\t\t\"String\",\n\t\t\t\t\"Uint32\",\n\t\t\t\t\"autodesk.test:utilsTestContained-1.0.0\",\n\t\t\t\t\"autodesk.test:utilsTestParent-1.0.0\",\n\t\t\t\t\"map<>\",\n\t\t\t\t\"map<autodesk.test:utilsTestContained-1.0.0>\",\n\t\t\t]);\n\t\t});\n\n\t\tit(\"Should work for inserts into an array\", function () {\n\t\t\tvar property = PropertyFactory.create(\"array<>\");\n\t\t\tvar child = PropertyFactory.create(\"autodesk.test:utilsTestParent-1.0.0\");\n\t\t\tproperty.push(child);\n\n\t\t\tvar typeids = Utils.extractTypeids(property._serialize(false, true));\n\t\t\ttypeids.sort();\n\n\t\t\texpect(typeids).to.deep.equal([\n\t\t\t\t\"String\",\n\t\t\t\t\"Uint32\",\n\t\t\t\t\"array<>\",\n\t\t\t\t\"autodesk.test:utilsTestContained-1.0.0\",\n\t\t\t\t\"autodesk.test:utilsTestParent-1.0.0\",\n\t\t\t\t\"map<autodesk.test:utilsTestContained-1.0.0>\",\n\t\t\t]);\n\t\t});\n\n\t\tit(\"Should work for modifications of a NodeProperty\", function () {\n\t\t\tvar property = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar child = PropertyFactory.create(\"autodesk.test:utilsTestParent-1.0.0\");\n\t\t\tproperty.insert(\"child\", child);\n\t\t\tproperty.cleanDirty();\n\t\t\tproperty.resolvePath('child.contained.\"error\\\\\"Msg\\\\\"\"').value = \"modified\";\n\n\t\t\tvar typeids = Utils.extractTypeids(\n\t\t\t\tproperty.serialize({ dirtyOnly: true, in_includeRootTypeid: true }),\n\t\t\t);\n\t\t\ttypeids.sort();\n\t\t\texpect(typeids).to.deep.equal([\n\t\t\t\t\"NodeProperty\",\n\t\t\t\t\"String\",\n\t\t\t\t\"autodesk.test:utilsTestContained-1.0.0\",\n\t\t\t\t\"autodesk.test:utilsTestParent-1.0.0\",\n\t\t\t]);\n\t\t});\n\n\t\tit(\"Should work for modifications of a map\", function () {\n\t\t\tvar property = PropertyFactory.create(\"map<>\");\n\t\t\tvar child = PropertyFactory.create(\"autodesk.test:utilsTestParent-1.0.0\");\n\t\t\tproperty.insert(\"child\", child);\n\t\t\tproperty.cleanDirty();\n\t\t\tproperty.resolvePath('[child].contained.\"error\\\\\"Msg\\\\\"\"').value = \"modified\";\n\n\t\t\tvar typeids = Utils.extractTypeids(property._serialize(true, true));\n\t\t\ttypeids.sort();\n\t\t\texpect(typeids).to.deep.equal([\n\t\t\t\t\"String\",\n\t\t\t\t\"autodesk.test:utilsTestContained-1.0.0\",\n\t\t\t\t\"autodesk.test:utilsTestParent-1.0.0\",\n\t\t\t\t\"map<>\",\n\t\t\t]);\n\t\t});\n\n\t\tit(\"Should work for modifications of an array\", function () {\n\t\t\tvar property = PropertyFactory.create(\"array<>\");\n\t\t\tvar child = PropertyFactory.create(\"autodesk.test:utilsTestParent-1.0.0\");\n\t\t\tproperty.push(child);\n\t\t\tproperty.cleanDirty();\n\t\t\tproperty.resolvePath('[0].contained.\"error\\\\\"Msg\\\\\"\"').setValue(\"modified\");\n\n\t\t\tvar typeids = Utils.extractTypeids(property._serialize(true, true));\n\t\t\ttypeids.sort();\n\t\t\texpect(typeids).to.deep.equal([\n\t\t\t\t\"String\",\n\t\t\t\t\"array<>\",\n\t\t\t\t\"autodesk.test:utilsTestContained-1.0.0\",\n\t\t\t\t\"autodesk.test:utilsTestParent-1.0.0\",\n\t\t\t]);\n\t\t});\n\n\t\tit(\"Should work for removals\", function () {\n\t\t\tvar typeids = Utils.extractTypeids({ remove: [\"xxx-yyy-zzz\"] });\n\n\t\t\texpect(typeids).to.have.lengthOf(1);\n\t\t\texpect(typeids[0]).to.equal(\"NodeProperty\");\n\t\t});\n\t});\n\n\tdescribe(\"Change set helper functions\", function () {\n\t\tvar root, sim, subject1, subject2, subject3;\n\t\t// Create a simple test data-set\n\t\tbefore(function () {\n\t\t\troot = PropertyFactory.create(\"NodeProperty\");\n\t\t\tsim = PropertyFactory.create(\"autodesk.test:utils.spec.pan.sim-1.0.0\");\n\t\t\tsubject1 = PropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\");\n\t\t\tsubject2 = PropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\");\n\n\t\t\troot.insert(\"simulation\", sim);\n\t\t\tsim.insert(\"subject1\", subject1);\n\t\t\tsim.insert(\"subject2\", subject2);\n\n\t\t\tvar arrayProp = PropertyFactory.create(\"array<>\");\n\t\t\troot.insert(\"array\", arrayProp);\n\t\t\tarrayProp.push(PropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"));\n\t\t\tarrayProp.push(PropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"));\n\t\t\tarrayProp.get(1)._properties.progress.value = 1;\n\n\t\t\tvar mapProp = PropertyFactory.create(\"map<>\");\n\t\t\troot.insert(\"map\", mapProp);\n\t\t\tmapProp.insert(\n\t\t\t\t\"entry\",\n\t\t\t\tPropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"),\n\t\t\t);\n\t\t});\n\n\t\tit(\"should work correctly for inserts\", function () {\n\t\t\tvar insertedResults = Utils.getChangesByType(\n\t\t\t\t\"autodesk.test:utils.spec.task.subject-1.0.0\",\n\t\t\t\troot.serialize({ dirtyOnly: true }),\n\t\t\t);\n\t\t\tassert(_.keys(insertedResults.insert).length === 9);\n\t\t\tfor (var i = 0; i < 9; i++) {\n\t\t\t\tassert(root.resolvePath(_.keys(insertedResults.insert)[i]) !== undefined);\n\t\t\t\tassert(\n\t\t\t\t\tUtils.getChangesByPath(\n\t\t\t\t\t\t_.keys(insertedResults.insert)[i],\n\t\t\t\t\t\troot,\n\t\t\t\t\t\troot.serialize(),\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t).insert !== undefined,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\tit(\"should work correctly for the root path\", function () {\n\t\t\tvar AnonymousTestPropertyTemplate = {\n\t\t\t\ttypeid: \"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\",\n\t\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\" }],\n\t\t\t};\n\t\t\tPropertyFactory._reregister(AnonymousTestPropertyTemplate);\n\n\t\t\tvar prop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\n\t\t\t\t\"A\",\n\t\t\t\tPropertyFactory.create(\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\"),\n\t\t\t);\n\t\t\tvar result = Utils.getChangesByPath(\"\", null, prop.serialize());\n\t\t\texpect(result).to.deep.equal({\n\t\t\t\tmodify: {\n\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\": {\n\t\t\t\t\t\t\tA: {\n\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\tstringProperty: \"\",\n\t\t\t\t\t\t\t\t},\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\t\t});\n\n\t\tit(\"should correctly strip typeids in insertions\", function () {\n\t\t\tvar insertionChangeSet = root.serialize({ dirtyOnly: true });\n\t\t\tUtils._stripTypeids(insertionChangeSet);\n\t\t\texpect(insertionChangeSet).to.deep.equal({\n\t\t\t\tinsert: {\n\t\t\t\t\tsimulation: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tsubject1: {\n\t\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\t\tprogress: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsubject2: {\n\t\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\t\tprogress: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcostEstimated: {\n\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\tprogress: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcostFinal: {\n\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\tprogress: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tthermalResults: {\n\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\tprogress: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmechanicalResults: {\n\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\tprogress: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstart: false,\n\t\t\t\t\t\tcancel: false,\n\t\t\t\t\t},\n\t\t\t\t\tmap: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tentry: {\n\t\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\t\tprogress: 0,\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\tarray: {\n\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\t\t\t\tprogress: 0,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\t\t\t\tprogress: 1,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\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\t\t});\n\n\t\tit(\"should work correctly for modifies\", function () {\n\t\t\troot.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t);\n\n\t\t\tsubject3 = PropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\");\n\t\t\tsubject2.insert(\"subject3\", subject3);\n\n\t\t\tsubject1._properties.errorMsg.value = \"test\";\n\t\t\tsubject2._properties.errorMsg.value = \"test\";\n\t\t\tsim._properties.thermalResults.errorMsg.value = \"test44\";\n\n\t\t\t// Test array modification\n\t\t\troot.resolvePath(\"array[1].errorMsg\").value = \"test\";\n\n\t\t\t// Test array insertion\n\t\t\troot.resolvePath(\"array\").insertRange(1, [\n\t\t\t\tPropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"),\n\t\t\t\tPropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"),\n\t\t\t]);\n\t\t\troot.resolvePath(\"array\").insertRange(0, [\n\t\t\t\tPropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"),\n\t\t\t]);\n\n\t\t\t// Test map modification\n\t\t\troot.resolvePath(\"map[entry].errorMsg\").value = \"test\";\n\n\t\t\t// Test map insertion\n\t\t\troot.resolvePath(\"map\").insert(\n\t\t\t\t\"entry2\",\n\t\t\t\tPropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"),\n\t\t\t);\n\n\t\t\tvar modifiedResults = Utils.getChangesByType(\n\t\t\t\t\"autodesk.test:utils.spec.task.subject-1.0.0\",\n\t\t\t\troot.serialize({ dirtyOnly: true }),\n\t\t\t\ttrue,\n\t\t\t);\n\n\t\t\tassert(_.keys(modifiedResults.insert).length === 5);\n\t\t\tassert(_.keys(modifiedResults.modify).length === 5);\n\n\t\t\tfor (var i = 0; i < 5; i++) {\n\t\t\t\tassert(\n\t\t\t\t\tUtils.getChangesByPath(\n\t\t\t\t\t\t_.keys(modifiedResults.modify)[i],\n\t\t\t\t\t\troot,\n\t\t\t\t\t\troot.serialize({ dirtyOnly: true }),\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t).modify !== undefined,\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (var i = 0; i < 5; i++) {\n\t\t\t\tassert(\n\t\t\t\t\tUtils.getChangesByPath(\n\t\t\t\t\t\t_.keys(modifiedResults.insert)[i],\n\t\t\t\t\t\troot,\n\t\t\t\t\t\troot.serialize({ dirtyOnly: true }),\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t).insert !== undefined,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\tit(\"should correctly strip typeids in modifies\", function () {\n\t\t\tvar modifyChangeSet = root.serialize({ dirtyOnly: true });\n\t\t\tUtils._stripTypeids(modifyChangeSet);\n\t\t\texpect(modifyChangeSet).to.deep.equal({\n\t\t\t\tmodify: {\n\t\t\t\t\tsimulation: {\n\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\tsubject1: {\n\t\t\t\t\t\t\t\terrorMsg: \"test\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsubject2: {\n\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\tsubject3: {\n\t\t\t\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\t\t\t\tprogress: 0,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\terrorMsg: \"test\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tthermalResults: {\n\t\t\t\t\t\t\terrorMsg: \"test44\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tarray: {\n\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\t\t\t\tprogress: 0,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\t\t\t\tprogress: 0,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\t\t\t\tprogress: 0,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t],\n\t\t\t\t\t\tmodify: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\terrorMsg: \"test\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\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\tmap: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tentry2: {\n\t\t\t\t\t\t\t\terrorMsg: \"\",\n\t\t\t\t\t\t\t\tprogress: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\tentry: {\n\t\t\t\t\t\t\t\terrorMsg: \"test\",\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\t\t});\n\n\t\tit(\"should correctly work for removes\", function () {\n\t\t\troot.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t);\n\t\t\tsubject2.remove(subject3.getId());\n\n\t\t\tassert(\n\t\t\t\tUtils.getChangesByPath(\n\t\t\t\t\tsim.getId() + \".\" + subject2.getId() + \".\" + subject3.getId(),\n\t\t\t\t\troot,\n\t\t\t\t\troot.serialize({ dirtyOnly: true }),\n\t\t\t\t\tfalse,\n\t\t\t\t).removed === true,\n\t\t\t);\n\n\t\t\troot.remove(sim.getId());\n\t\t\tassert(\n\t\t\t\tUtils.getChangesByPath(\n\t\t\t\t\tsim.getId() + \".\" + subject2.getId() + \".\" + subject3.getId(),\n\t\t\t\t\troot,\n\t\t\t\t\troot.serialize({ dirtyOnly: true }),\n\t\t\t\t\tfalse,\n\t\t\t\t).removed === true,\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tUtils.getChangesByPath(\n\t\t\t\t\tsim.getId() + \".\" + subject2.getId(),\n\t\t\t\t\troot,\n\t\t\t\t\troot.serialize({ dirtyOnly: true }),\n\t\t\t\t\tfalse,\n\t\t\t\t).removed === true,\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tUtils.getChangesByPath(\n\t\t\t\t\tsim.getId(),\n\t\t\t\t\troot,\n\t\t\t\t\troot.serialize({ dirtyOnly: true }),\n\t\t\t\t\tfalse,\n\t\t\t\t).removed === true,\n\t\t\t);\n\n\t\t\troot.resolvePath(\"map\").remove(\"entry2\");\n\t\t\troot.resolvePath(\"array\").remove(0);\n\t\t\troot.resolvePath(\"array\").removeRange(1, 2);\n\t\t});\n\n\t\tit(\"should correctly strip typeids in removes\", function () {\n\t\t\tvar modifyChangeSet = root._serialize(true);\n\t\t\tUtils._stripTypeids(modifyChangeSet);\n\t\t\texpect(modifyChangeSet).to.deep.equal({\n\t\t\t\tmodify: {\n\t\t\t\t\tarray: {\n\t\t\t\t\t\tremove: [\n\t\t\t\t\t\t\t[0, 1],\n\t\t\t\t\t\t\t[2, 2],\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\tmap: {\n\t\t\t\t\t\tremove: [\"entry2\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tremove: [\"simulation\"],\n\t\t\t});\n\t\t});\n\n\t\tit(\"should work for nested templates\", function () {\n\t\t\tvar nestedTemplate = PropertyFactory.create(\"autodesk.tests:nestedTemplate-1.0.0\");\n\t\t\tnestedTemplate._properties.c.myNestedProp.errorMsg.value = \"testString\";\n\t\t\tvar changeSet = nestedTemplate._serialize(true);\n\n\t\t\tvar changes = Utils.getChangesByType(\"String\", changeSet);\n\t\t\texpect(changes.modify[\"c.myNestedProp.errorMsg\"]).to.equal(\"testString\");\n\n\t\t\texpect(\n\t\t\t\tUtils.getChangesByPath(\"c.myNestedProp.errorMsg\", nestedTemplate, changeSet, false),\n\t\t\t).to.have.keys(\"modify\");\n\t\t});\n\n\t\tit(\"should work for an object with characters that have to be quoted\", function () {\n\t\t\tvar node = PropertyFactory.create(\n\t\t\t\t\"autodesk.tests:property.with.quotable.characters-1.0.0\",\n\t\t\t);\n\t\t\tnode.get(\"simple_property\").value = \"test\";\n\t\t\tnode.get(\"test.property\").value = \"test\";\n\t\t\tnode.get('test\"property\"').value = \"test\";\n\t\t\tnode.get(\"test[property]\").get(\".property.\").get(\"test\").value = \"test\";\n\n\t\t\tvar changeSet = node._serialize(true);\n\t\t\tvar changes = Utils.getChangesByType(\"String\", changeSet);\n\t\t\texpect(changes.modify).to.have.keys(\n\t\t\t\t\"simple_property\",\n\t\t\t\t'\"test.property\"',\n\t\t\t\t'\"test\\\\\"property\\\\\"\"',\n\t\t\t\t'\"test[property]\".\".property.\".test',\n\t\t\t);\n\n\t\t\texpect(Utils.getChangesByPath(\"simple_property\", node, changeSet, false)).to.have.keys(\n\t\t\t\t\"modify\",\n\t\t\t);\n\t\t\texpect(Utils.getChangesByPath('\"test.property\"', node, changeSet, false)).to.have.keys(\n\t\t\t\t\"modify\",\n\t\t\t);\n\t\t\texpect(\n\t\t\t\tUtils.getChangesByPath('\"test\\\\\"property\\\\\"\"', node, changeSet, false),\n\t\t\t).to.have.keys(\"modify\");\n\t\t\texpect(\n\t\t\t\tUtils.getChangesByPath(\n\t\t\t\t\t'\"test[property]\".\".property.\".test',\n\t\t\t\t\tnode,\n\t\t\t\t\tchangeSet,\n\t\t\t\t\tfalse,\n\t\t\t\t),\n\t\t\t).to.have.keys(\"modify\");\n\t\t});\n\n\t\tit(\"should work for a node property with characters that have to be quoted\", function () {\n\t\t\tvar node = PropertyFactory.create(\"NodeProperty\");\n\t\t\tnode.insert(\"simple_property\", PropertyFactory.create(\"String\", undefined, \"test\"));\n\t\t\tnode.insert(\"test.property\", PropertyFactory.create(\"String\", undefined, \"test\"));\n\t\t\tnode.insert('test\"property\"', PropertyFactory.create(\"String\", undefined, \"test\"));\n\t\t\tnode.insert(\"test[property]\", PropertyFactory.create(\"NodeProperty\"));\n\t\t\tnode.get(\"test[property]\").insert(\".property.\", PropertyFactory.create(\"NodeProperty\"));\n\t\t\tnode.get(\"test[property]\")\n\t\t\t\t.get(\".property.\")\n\t\t\t\t.insert(\"test\", PropertyFactory.create(\"String\", undefined, \"test\"));\n\n\t\t\tvar changeSet = node._serialize(true);\n\t\t\tvar changes = Utils.getChangesByType(\"String\", changeSet);\n\t\t\texpect(changes.insert).to.have.keys(\n\t\t\t\t\"simple_property\",\n\t\t\t\t'\"test.property\"',\n\t\t\t\t'\"test\\\\\"property\\\\\"\"',\n\t\t\t\t'\"test[property]\".\".property.\".test',\n\t\t\t);\n\n\t\t\texpect(Utils.getChangesByPath(\"simple_property\", node, changeSet, false)).to.have.keys(\n\t\t\t\t\"insert\",\n\t\t\t);\n\t\t\texpect(Utils.getChangesByPath('\"test.property\"', node, changeSet, false)).to.have.keys(\n\t\t\t\t\"insert\",\n\t\t\t);\n\t\t\texpect(\n\t\t\t\tUtils.getChangesByPath('\"test\\\\\"property\\\\\"\"', node, changeSet, false),\n\t\t\t).to.have.keys(\"insert\");\n\t\t\texpect(\n\t\t\t\tUtils.getChangesByPath(\n\t\t\t\t\t'\"test[property]\".\".property.\".test',\n\t\t\t\t\tnode,\n\t\t\t\t\tchangeSet,\n\t\t\t\t\tfalse,\n\t\t\t\t),\n\t\t\t).to.have.keys(\"insert\");\n\t\t});\n\t});\n\n\tdescribe(\"Utils.getChangesToTokenizedPaths\", function () {\n\t\tvar CS = {\n\t\t\tinsert: {\n\t\t\t\t\"NodeProperty\": {\n\t\t\t\t\tnested1: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tNodeProperty: {\n\t\t\t\t\t\t\t\tnested2: {\n\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\tstring: \"text\",\n\t\t\t\t\t\t\t\t\t\t\t__doubleUnderscore: \"text\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\tnested2: {},\n\t\t\t\t},\n\t\t\t\t\"array<>\": {\n\t\t\t\t\tnestedArray: {\n\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttypeid: \"NodeProperty\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttypeid: \"NodeProperty\",\n\t\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\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\t\"String\": {\n\t\t\t\t\tstring: \"text\",\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tit(\"should work using objects\", function () {\n\t\t\tvar visitedPaths = [];\n\t\t\tUtils.getChangesToTokenizedPaths(\n\t\t\t\t{\n\t\t\t\t\tString: {},\n\t\t\t\t\tnested1: {\n\t\t\t\t\t\tnested2: {\n\t\t\t\t\t\t\tstring: {\n\t\t\t\t\t\t\t\t__hidden: {\n\t\t\t\t\t\t\t\t\tmyCallback: function () {\n\t\t\t\t\t\t\t\t\t\treturn \"hello\";\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tmyValue: 1,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t___doubleUnderscore: {}, // Yes, there are 3 '_', as escapeLeadingDoubleUnderscore = true\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tnestedArray: {\n\t\t\t\t\t\t1: {\n\t\t\t\t\t\t\tString: {},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tCS,\n\t\t\t\tfunction (in_context, in_nested, in_tokenizedPath) {\n\t\t\t\t\tvar currentPath = in_tokenizedPath.join(\".\");\n\t\t\t\t\tvisitedPaths.push(currentPath);\n\t\t\t\t\tif (currentPath === \"nested1.nested2.string\") {\n\t\t\t\t\t\texpect(in_nested).to.exist;\n\t\t\t\t\t\texpect(in_nested.__hidden).to.exist;\n\t\t\t\t\t\texpect(in_nested.__hidden.myCallback).to.exist;\n\t\t\t\t\t\texpect(in_nested.__hidden.myCallback()).to.eql(\"hello\");\n\t\t\t\t\t\texpect(in_nested.__hidden.myValue).to.eql(1);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\trootOperation: \"modify\",\n\t\t\t\t\trootTypeid: \"NodeProperty\",\n\t\t\t\t\tescapeLeadingDoubleUnderscore: true,\n\t\t\t\t},\n\t\t\t);\n\t\t\texpect(visitedPaths).to.deep.equal([\n\t\t\t\t\"\",\n\t\t\t\t\"nested1\",\n\t\t\t\t\"nested1.nested2\",\n\t\t\t\t\"nested1.nested2.string\",\n\t\t\t\t\"nested1.nested2.__doubleUnderscore\",\n\t\t\t\t\"nestedArray\",\n\t\t\t\t\"nestedArray.1\",\n\t\t\t]);\n\t\t});\n\n\t\tit(\"should work using maps\", function () {\n\t\t\tvar visitedPaths = [];\n\t\t\tUtils.getChangesToTokenizedPaths(\n\t\t\t\tnew Map([\n\t\t\t\t\t[\"String\", new Map()],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"nested1\",\n\t\t\t\t\t\tnew Map([\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\"nested2\",\n\t\t\t\t\t\t\t\tnew Map([\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\t\t\t\tnew Map([\n\t\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t\t\"__hidden\",\n\t\t\t\t\t\t\t\t\t\t\t\tnew Map([\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"myCallback\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn \"hello\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\"myValue\", 1],\n\t\t\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t[\"___doubleUnderscore\", new Map()], // Yes, there are 3 '_', as escapeLeadingDoubleUnderscore = true\n\t\t\t\t\t\t\t\t]),\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\t[\"nestedArray\", new Map([[\"1\", new Map([[\"String\", new Map()]])]])],\n\t\t\t\t]),\n\t\t\t\tCS,\n\t\t\t\tfunction (in_context, in_nested, in_tokenizedPath) {\n\t\t\t\t\tvar currentPath = in_tokenizedPath.join(\".\");\n\t\t\t\t\tvisitedPaths.push(currentPath);\n\t\t\t\t\tif (currentPath === \"nested1.nested2.string\") {\n\t\t\t\t\t\texpect(in_nested).to.exist;\n\t\t\t\t\t\texpect(in_nested).to.have.key(\"__hidden\");\n\t\t\t\t\t\texpect(in_nested.get(\"__hidden\")).to.have.all.keys(\"myCallback\", \"myValue\");\n\t\t\t\t\t\texpect(in_nested.get(\"__hidden\").get(\"myCallback\")()).to.eql(\"hello\");\n\t\t\t\t\t\texpect(in_nested.get(\"__hidden\").get(\"myValue\")).to.eql(1);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\trootOperation: \"modify\",\n\t\t\t\t\trootTypeid: \"NodeProperty\",\n\t\t\t\t\tescapeLeadingDoubleUnderscore: true,\n\t\t\t\t},\n\t\t\t);\n\t\t\texpect(visitedPaths).to.deep.equal([\n\t\t\t\t\"\",\n\t\t\t\t\"nested1\",\n\t\t\t\t\"nested1.nested2\",\n\t\t\t\t\"nested1.nested2.string\",\n\t\t\t\t\"nested1.nested2.__doubleUnderscore\",\n\t\t\t\t\"nestedArray\",\n\t\t\t\t\"nestedArray.1\",\n\t\t\t]);\n\t\t});\n\n\t\tit(\"should assume paths as literal when the escapeLeadingDoubleUnderscore flag is off \", function () {\n\t\t\tvar visitedPaths = [];\n\t\t\tUtils.getChangesToTokenizedPaths(\n\t\t\t\t{\n\t\t\t\t\tnested1: {\n\t\t\t\t\t\tnested2: {\n\t\t\t\t\t\t\t__doubleUnderscore: {}, // The amount of underscores is the same as in the changeSet\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tCS,\n\t\t\t\tfunction (in_context, in_nested, in_tokenizedPath) {\n\t\t\t\t\tvisitedPaths.push(in_tokenizedPath.join(\".\"));\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\trootOperation: \"modify\",\n\t\t\t\t\trootTypeid: \"NodeProperty\",\n\t\t\t\t\tescapeLeadingDoubleUnderscore: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\texpect(visitedPaths).to.deep.equal([\n\t\t\t\t\"\",\n\t\t\t\t\"nested1\",\n\t\t\t\t\"nested1.nested2\",\n\t\t\t\t\"nested1.nested2.__doubleUnderscore\",\n\t\t\t]);\n\t\t});\n\t});\n\n\t/* describe('Utils.insertPropertyChangeIntoChangeset', function() {\n var checkPropertyForModifications = function(in_property, in_arrayTests) {\n // Prepare the check by appending a float Property\n var floatProperty = PropertyFactory.create('Float64', undefined, 10);\n in_property.insert('float', floatProperty);\n var rootProperty = in_property.getRoot();\n rootProperty.cleanDirty();\n\n var expectedTarget = in_arrayTests ?\n {insert: {Float64: {'float': 10}}, typeid: 'NodeProperty'} :\n {insert: {Float64: {'float': 10}}};\n\n // Check that creating a new insert operation works\n var emptyChangeSet = {};\n if (!in_arrayTests) {\n var result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n emptyChangeSet, true);\n expect(result.propertyChangeSet).to.exist;\n expect(result.insert).to.be.true;\n result.propertyChangeSet.insert = {Float64: {'float': 10}};\n expect(emptyChangeSet).to.deep.equal(rootProperty._serialize(false));\n }\n\n // Check that inserting into a full serialization is a NOP\n var serializedChangeSet = rootProperty._serialize(false);\n var result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, true);\n expect(result.propertyChangeSet).to.exist;\n expect(result.propertyChangeSet).to.deep.equal(expectedTarget);\n expect(result.insert).to.be.true;\n expect(serializedChangeSet).to.deep.equal(rootProperty._serialize(false));\n\n // Check that a modify becomes an insert\n serializedChangeSet = rootProperty._serialize(false);\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.propertyChangeSet).to.exist;\n expect(result.propertyChangeSet).to.deep.equal(expectedTarget);\n expect(result.insert).to.be.true;\n expect(serializedChangeSet).to.deep.equal(rootProperty._serialize(false));\n\n // Modify the property to have a baseline to compare to\n floatProperty.value = 15;\n expectedTarget = in_arrayTests ?\n {modify: {Float64: {'float': 15}}, typeid: 'NodeProperty'} :\n {modify: {Float64: {'float': 15}}};\n\n // Check that creating a new modify operation works\n emptyChangeSet = {};\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n emptyChangeSet, false);\n expect(result.propertyChangeSet).to.exist;\n result.propertyChangeSet.modify = {Float64: {'float': 15}};\n expect(result.insert).to.be.false;\n expect(emptyChangeSet).to.deep.equal(rootProperty._serialize(true));\n\n // Check that retrieving an existing modify operation is possible\n serializedChangeSet = rootProperty._serialize(true);\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.propertyChangeSet).to.exist;\n expect(result.propertyChangeSet).to.deep.equal(expectedTarget);\n expect(result.insert).to.be.false;\n expect(serializedChangeSet).to.deep.equal(rootProperty._serialize(true));\n\n // Check that deleting properties returns the correct result\n var currentProperty = floatProperty.getParent();\n while (currentProperty && currentProperty.getParent()) {\n var parent = currentProperty.getParent();\n if (parent instanceof NodeProperty &&\n parent._getDynamicChildrenReadOnly()[currentProperty.getId()]) {\n rootProperty.cleanDirty();\n parent.remove(currentProperty.getId());\n serializedChangeSet = rootProperty._serialize(true);\n\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.remove).to.be.true;\n\n parent.insert(currentProperty.getId(), currentProperty);\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.remove).to.be.true;\n }\n currentProperty = currentProperty.getParent();\n }\n };\n\n it('should work for nested NodeProperties', function() {\n var root = PropertyFactory.create('NodeProperty');\n var child1 = PropertyFactory.create('NodeProperty');\n root.insert('child', child1);\n var child2 = PropertyFactory.create('NodeProperty');\n child1.insert('child', child2);\n\n checkPropertyForModifications(child2, false);\n });\n\n it('should work for NodeProperties in a template', function() {\n var root = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('autodesk.test:staticNodeChild-1.0.0');\n root.insert('child', child);\n\n checkPropertyForModifications(child.get('nodeProperty'), false);\n });\n\n it('should work for NodeProperties in a map', function() {\n var root = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('NodeProperty', 'map');\n root.insert('map', child);\n child.insert('entry', PropertyFactory.create('NodeProperty'));\n\n checkPropertyForModifications(child.get('entry'), false);\n });\n\n it('should work for NodeProperties in an array', function() {\n var root = PropertyFactory.create('NodeProperty');\n var arrayProp = PropertyFactory.create('NodeProperty', 'array');\n root.insert('array', arrayProp);\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n\n checkPropertyForModifications(arrayProp.get(0), true);\n });\n\n it('should work for NodeProperties in an array with complex modifications', function() {\n var root = PropertyFactory.create('NodeProperty');\n var arrayProp = PropertyFactory.create('NodeProperty', 'array');\n root.insert('array', arrayProp);\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n var floatProperty = PropertyFactory.create('Float64', undefined, 10);\n arrayProp.get(3).insert('float', floatProperty);\n root.cleanDirty();\n\n // Create a complex modification set\n floatProperty.value = 15;\n arrayProp.removeRange(0, 2);\n arrayProp.insertRange(0, [PropertyFactory.create('NodeProperty')]);\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n var serializedChangeSet = root.serialize({'dirtyOnly': true});\n var expectedChangeset = floatProperty.getParent().serialize({'dirtyOnly': true, 'includeRootTypeid': true});\n\n var result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), root,\n serializedChangeSet, false);\n expect(result.propertyChangeSet).to.deep.equal(expectedChangeset);\n expect(result.insert).to.be.false;\n });\n }); */\n\n\tdescribe(\"Utils.getFilteredChangeSetByPaths\", function () {\n\t\tvar changeSet = {\n\t\t\tinsert: {\n\t\t\t\t\"NodeProperty\": {\n\t\t\t\t\tnested1: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\"NodeProperty\": {\n\t\t\t\t\t\t\t\tnested2: {\n\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\tstring: \"text\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"array<>\": {\n\t\t\t\t\t\t\t\tnestedArray: {\n\t\t\t\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\ttypeid: \"NodeProperty\",\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\ttypeid: \"NodeProperty\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"map<>\": {\n\t\t\t\t\t\t\t\ttrulyNestedMap: {\n\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\tkey1: \"The value is 1\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\tnested3: {},\n\t\t\t\t},\n\t\t\t\t\"map<>\": {\n\t\t\t\t\tnestedMap: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\tnestedMapString: \"Sirius\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBool: {\n\t\t\t\t\t\t\t\tnestedMapBoolean: true,\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\t\"map<mysample:asset-1.0.0>\": {\n\t\t\t\t\tassetMap: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\"mysample:asset-1.0.0\": {\n\t\t\t\t\t\t\t\t1: {\n\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\tname: \"test asset 1\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tNodeProperty: {\n\t\t\t\t\t\t\t\t\t\tcomponents: {},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\t\"Reference<String>\": {\n\t\t\t\t\trefProp: \"/test.prop\",\n\t\t\t\t},\n\t\t\t\t\"RepositoryReferenceProperty\": {\n\t\t\t\t\trefRepoProp: {\n\t\t\t\t\t\tBool: {\n\t\t\t\t\t\t\tfollowBranch: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\tbranchGUID: \"846fe4a1-e595-44bf-8cc0-f1d8f6d104a6\",\n\t\t\t\t\t\t\tcommitGUID: \"4c611c89-8241-4764-958e-77470bba3b9b\",\n\t\t\t\t\t\t\trepositoryGUID: \"f438bed5-d8f2-4c70-a7e0-aa52b8929d2a\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"NamedProperty\": {\n\t\t\t\t\tnamedProp: {\n\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\tguid: \"e763527c-7f49-417c-8df3-9fb7f90a1932\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"NamedNodeProperty\": {\n\t\t\t\t\tnamedNodeProp: {\n\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\tguid: \"efc68477-53b1-49ac-bd3f-e05a21f85a32\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\"enum<autodesk.core:UnitsEnum-1.0.0>\": {\n\t\t\t\t\t\t\t\tenumProp: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"String\": {\n\t\t\t\t\t\t\t\ttest: \"blah\",\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\t\"autodesk.test:testProp-1.0.0\": {\n\t\t\t\t\tcustomTemplate: {\n\t\t\t\t\t\t\"Uint32\": {\n\t\t\t\t\t\t\ta: 922337203685,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"String\": {\n\t\t\t\t\t\t\t\"b\": \"hello\",\n\t\t\t\t\t\t\t\"nested.c.d.e\": \"world\",\n\t\t\t\t\t\t\t\"nested.c.d.f\": \"hello\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"set<NamedProperty>\": {\n\t\t\t\t\t\t\tnestedSet: {\n\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\tNamedProperty: {\n\t\t\t\t\t\t\t\t\t\t\"91a59cb6-9881-2b5f-2366-84dbdc8b6838\": {\n\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\tguid: \"91a59cb6-9881-2b5f-2366-84dbdc8b6838\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\t\"String\": {\n\t\t\t\t\temptyString: \"\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tmodify: {\n\t\t\t\t\"NodeProperty\": {\n\t\t\t\t\tnested4: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tUint32: {\n\t\t\t\t\t\t\t\tnumber: 4,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tremove: [\"nested5\", \"nested6\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"array<Float32>\": {\n\t\t\t\t\tnestedArray2: {\n\t\t\t\t\t\tmodify: [[0, [0.707, 0.707, 0], [0, 0, 1]]],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tremove: [\"nested7\"],\n\t\t};\n\n\t\tit(\"should filter change sets by paths resolving to all types (NodeProperty, array, map, set, NamedNodeProperty, Reference, Primitive types)\", function () {\n\t\t\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"nested1\",\n\t\t\t\t\"nested4.nested5\",\n\t\t\t\t\"nested4.number\",\n\t\t\t]);\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\tNodeProperty: {\n\t\t\t\t\t\tnested1: {\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\"NodeProperty\": {\n\t\t\t\t\t\t\t\t\tnested2: {\n\t\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\tstring: \"text\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"array<>\": {\n\t\t\t\t\t\t\t\t\tnestedArray: {\n\t\t\t\t\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttypeid: \"NodeProperty\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttypeid: \"NodeProperty\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"map<>\": {\n\t\t\t\t\t\t\t\t\ttrulyNestedMap: {\n\t\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\tkey1: \"The value is 1\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\tmodify: {\n\t\t\t\t\tNodeProperty: {\n\t\t\t\t\t\tnested4: {\n\t\t\t\t\t\t\tremove: [\"nested5\"],\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\tUint32: {\n\t\t\t\t\t\t\t\t\tnumber: 4,\n\t\t\t\t\t\t\t\t},\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\tfilteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"nested7\",\n\t\t\t\t\"nested4\",\n\t\t\t\t\"nested1.nested2\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\tNodeProperty: {\n\t\t\t\t\t\tnested1: {\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\tNodeProperty: {\n\t\t\t\t\t\t\t\t\tnested2: {\n\t\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\tstring: \"text\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\tmodify: {\n\t\t\t\t\tNodeProperty: {\n\t\t\t\t\t\tnested4: {\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\tUint32: {\n\t\t\t\t\t\t\t\t\tnumber: 4,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tremove: [\"nested5\", \"nested6\"],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tremove: [\"nested7\"],\n\t\t\t});\n\n\t\t\tfilteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"nested1.nestedArray\",\n\t\t\t\t\"nestedMap.nestedMapBoolean\",\n\t\t\t\t\"nestedArray2\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"NodeProperty\": {\n\t\t\t\t\t\tnested1: {\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\"array<>\": {\n\t\t\t\t\t\t\t\t\tnestedArray: {\n\t\t\t\t\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttypeid: \"NodeProperty\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttypeid: \"NodeProperty\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\t\"map<>\": {\n\t\t\t\t\t\tnestedMap: {\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\tBool: {\n\t\t\t\t\t\t\t\t\tnestedMapBoolean: true,\n\t\t\t\t\t\t\t\t},\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\tmodify: {\n\t\t\t\t\t\"array<Float32>\": {\n\t\t\t\t\t\tnestedArray2: {\n\t\t\t\t\t\t\tmodify: [[0, [0.707, 0.707, 0], [0, 0, 1]]],\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\tfilteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"namedProp.guid\",\n\t\t\t\t\"namedNodeProp.enumProp\",\n\t\t\t\t\"namedNodeProp.guid\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\tNamedProperty: {\n\t\t\t\t\t\tnamedProp: {\n\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\tguid: \"e763527c-7f49-417c-8df3-9fb7f90a1932\",\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\tNamedNodeProperty: {\n\t\t\t\t\t\tnamedNodeProp: {\n\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\tguid: \"efc68477-53b1-49ac-bd3f-e05a21f85a32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\"enum<autodesk.core:UnitsEnum-1.0.0>\": {\n\t\t\t\t\t\t\t\t\tenumProp: 0,\n\t\t\t\t\t\t\t\t},\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\tfilteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"customTemplate.a\",\n\t\t\t\t\"customTemplate.nested.c.d.e\",\n\t\t\t\t\"customTemplate.nestedSet\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"autodesk.test:testProp-1.0.0\": {\n\t\t\t\t\t\tcustomTemplate: {\n\t\t\t\t\t\t\t\"Uint32\": {\n\t\t\t\t\t\t\t\ta: 922337203685,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"String\": {\n\t\t\t\t\t\t\t\t\"nested.c.d.e\": \"world\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"set<NamedProperty>\": {\n\t\t\t\t\t\t\t\tnestedSet: {\n\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\tNamedProperty: {\n\t\t\t\t\t\t\t\t\t\t\t\"91a59cb6-9881-2b5f-2366-84dbdc8b6838\": {\n\t\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tguid: \"91a59cb6-9881-2b5f-2366-84dbdc8b6838\",\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\tfilteredCS = Utils.getFilteredChangeSetByPaths(\n\t\t\t\tchangeSet,\n\t\t\t\tnew Map([\n\t\t\t\t\t[\n\t\t\t\t\t\t\"customTemplate\",\n\t\t\t\t\t\tnew Map([\n\t\t\t\t\t\t\t[\"a\", new Map()],\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\"nested\",\n\t\t\t\t\t\t\t\tnew Map([[\"c\", new Map([[\"d\", new Map([[\"e\", new Map()]])]])]]),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t[\"nestedSet\", new Map()],\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(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"autodesk.test:testProp-1.0.0\": {\n\t\t\t\t\t\tcustomTemplate: {\n\t\t\t\t\t\t\t\"Uint32\": {\n\t\t\t\t\t\t\t\ta: 922337203685,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"String\": {\n\t\t\t\t\t\t\t\t\"nested.c.d.e\": \"world\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"set<NamedProperty>\": {\n\t\t\t\t\t\t\t\tnestedSet: {\n\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\tNamedProperty: {\n\t\t\t\t\t\t\t\t\t\t\t\"91a59cb6-9881-2b5f-2366-84dbdc8b6838\": {\n\t\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tguid: \"91a59cb6-9881-2b5f-2366-84dbdc8b6838\",\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"customTemplate.nested.c\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"autodesk.test:testProp-1.0.0\": {\n\t\t\t\t\t\tcustomTemplate: {\n\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\"nested.c.d.e\": \"world\",\n\t\t\t\t\t\t\t\t\"nested.c.d.f\": \"hello\",\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\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"customTemplate.nested.c.d\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"autodesk.test:testProp-1.0.0\": {\n\t\t\t\t\t\tcustomTemplate: {\n\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\"nested.c.d.e\": \"world\",\n\t\t\t\t\t\t\t\t\"nested.c.d.f\": \"hello\",\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\tfilteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"refProp\",\n\t\t\t\t\"refRepoProp.commitGUID\",\n\t\t\t\t\"refRepoProp.followBranch\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"Reference<String>\": {\n\t\t\t\t\t\trefProp: \"/test.prop\",\n\t\t\t\t\t},\n\t\t\t\t\t\"RepositoryReferenceProperty\": {\n\t\t\t\t\t\trefRepoProp: {\n\t\t\t\t\t\t\tBool: {\n\t\t\t\t\t\t\t\tfollowBranch: false,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\tcommitGUID: \"4c611c89-8241-4764-958e-77470bba3b9b\",\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\tfilteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\"assetMap[1].name\"]);\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"map<mysample:asset-1.0.0>\": {\n\t\t\t\t\t\tassetMap: {\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\"mysample:asset-1.0.0\": {\n\t\t\t\t\t\t\t\t\t1: {\n\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\tname: \"test asset 1\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\t// For maps, using dots as separators, instead of brackets, is also supported.\n\t\t\tfilteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\"assetMap.1.name\"]);\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"map<mysample:asset-1.0.0>\": {\n\t\t\t\t\t\tassetMap: {\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\"mysample:asset-1.0.0\": {\n\t\t\t\t\t\t\t\t\t1: {\n\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\tname: \"test asset 1\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\t\t});\n\n\t\tit(\"should ignore overlapping paths\", function () {\n\t\t\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"customTemplate\",\n\t\t\t\t\"customTemplate.a\",\n\t\t\t\t\"customTemplate.nested.c.d.e\",\n\t\t\t\t\"customTemplate.nestedSet\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"autodesk.test:testProp-1.0.0\": {\n\t\t\t\t\t\tcustomTemplate: {\n\t\t\t\t\t\t\t\"Uint32\": {\n\t\t\t\t\t\t\t\ta: 922337203685,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"String\": {\n\t\t\t\t\t\t\t\t\"b\": \"hello\",\n\t\t\t\t\t\t\t\t\"nested.c.d.e\": \"world\",\n\t\t\t\t\t\t\t\t\"nested.c.d.f\": \"hello\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"set<NamedProperty>\": {\n\t\t\t\t\t\t\t\tnestedSet: {\n\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\tNamedProperty: {\n\t\t\t\t\t\t\t\t\t\t\t\"91a59cb6-9881-2b5f-2366-84dbdc8b6838\": {\n\t\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tguid: \"91a59cb6-9881-2b5f-2366-84dbdc8b6838\",\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"customTemplate.nestedSet[91a59cb6-9881-2b5f-2366-84dbdc8b6838].guid\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"autodesk.test:testProp-1.0.0\": {\n\t\t\t\t\t\tcustomTemplate: {\n\t\t\t\t\t\t\t\"set<NamedProperty>\": {\n\t\t\t\t\t\t\t\tnestedSet: {\n\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\tNamedProperty: {\n\t\t\t\t\t\t\t\t\t\t\t\"91a59cb6-9881-2b5f-2366-84dbdc8b6838\": {\n\t\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tguid: \"91a59cb6-9881-2b5f-2366-84dbdc8b6838\",\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\t// Flip order\n\t\t\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"customTemplate.a\",\n\t\t\t\t\"customTemplate.nested.c.d.e\",\n\t\t\t\t\"customTemplate\",\n\t\t\t\t\"customTemplate.nestedSet\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"autodesk.test:testProp-1.0.0\": {\n\t\t\t\t\t\tcustomTemplate: {\n\t\t\t\t\t\t\t\"Uint32\": {\n\t\t\t\t\t\t\t\ta: 922337203685,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"String\": {\n\t\t\t\t\t\t\t\t\"b\": \"hello\",\n\t\t\t\t\t\t\t\t\"nested.c.d.e\": \"world\",\n\t\t\t\t\t\t\t\t\"nested.c.d.f\": \"hello\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"set<NamedProperty>\": {\n\t\t\t\t\t\t\t\tnestedSet: {\n\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\tNamedProperty: {\n\t\t\t\t\t\t\t\t\t\t\t\"91a59cb6-9881-2b5f-2366-84dbdc8b6838\": {\n\t\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tguid: \"91a59cb6-9881-2b5f-2366-84dbdc8b6838\",\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\t// Duplicate paths\n\t\t\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"customTemplate.a\",\n\t\t\t\t\"customTemplate\",\n\t\t\t\t\"customTemplate.nested.c.d.e\",\n\t\t\t\t\"customTemplate\",\n\t\t\t\t\"customTemplate.nestedSet\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"autodesk.test:testProp-1.0.0\": {\n\t\t\t\t\t\tcustomTemplate: {\n\t\t\t\t\t\t\t\"Uint32\": {\n\t\t\t\t\t\t\t\ta: 922337203685,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"String\": {\n\t\t\t\t\t\t\t\t\"b\": \"hello\",\n\t\t\t\t\t\t\t\t\"nested.c.d.e\": \"world\",\n\t\t\t\t\t\t\t\t\"nested.c.d.f\": \"hello\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"set<NamedProperty>\": {\n\t\t\t\t\t\t\t\tnestedSet: {\n\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\tNamedProperty: {\n\t\t\t\t\t\t\t\t\t\t\t\"91a59cb6-9881-2b5f-2366-84dbdc8b6838\": {\n\t\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tguid: \"91a59cb6-9881-2b5f-2366-84dbdc8b6838\",\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\"emptyString\"]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\tString: {\n\t\t\t\t\t\temptyString: \"\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should return an empty change set when filtering by a path that does not exist\", function () {\n\t\t\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"path.that.does.not.exist\",\n\t\t\t\t\"dontExist\",\n\t\t\t\t\"does.not.exist\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.be.eql({});\n\n\t\t\tfilteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"nested7\",\n\t\t\t\t\"nested4\",\n\t\t\t\t\"nested1.nested2\",\n\t\t\t\t\"path.that.does.not.exist\",\n\t\t\t\t\"dontExist\",\n\t\t\t\t\"does.not.exist\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\tNodeProperty: {\n\t\t\t\t\t\tnested1: {\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\tNodeProperty: {\n\t\t\t\t\t\t\t\t\tnested2: {\n\t\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\tstring: \"text\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\tmodify: {\n\t\t\t\t\tNodeProperty: {\n\t\t\t\t\t\tnested4: {\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\tUint32: {\n\t\t\t\t\t\t\t\t\tnumber: 4,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tremove: [\"nested5\", \"nested6\"],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tremove: [\"nested7\"],\n\t\t\t});\n\n\t\t\tfilteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"nested1.nested2\",\n\t\t\t\t\"nested1.nested6\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\tNodeProperty: {\n\t\t\t\t\t\tnested1: {\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\tNodeProperty: {\n\t\t\t\t\t\t\t\t\tnested2: {\n\t\t\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\t\t\tstring: \"text\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\t// Partially matched paths are included\n\t\t\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\"assetMap[2]\"]);\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"map<mysample:asset-1.0.0>\": {\n\t\t\t\t\t\tassetMap: {},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\t// Closest partially matched path 'customTemplate.nested.c.d' cannot be included\n\t\t\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"customTemplate.nested.c.d.g\",\n\t\t\t]);\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"autodesk.test:testProp-1.0.0\": {\n\t\t\t\t\t\tcustomTemplate: {},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\t// Partial match should also work with nested properties\n\t\t\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"nested1.trulyNestedMap[newKey]\",\n\t\t\t]);\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\tNodeProperty: {\n\t\t\t\t\t\tnested1: {\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\"map<>\": {\n\t\t\t\t\t\t\t\t\ttrulyNestedMap: {},\n\t\t\t\t\t\t\t\t},\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\t// Filter a nested non existing entry from a templated property\n\t\t\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\n\t\t\t\t\"customTemplate.nestedSet.nonExisting\",\n\t\t\t\t\"customTemplate.a\",\n\t\t\t]);\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"autodesk.test:testProp-1.0.0\": {\n\t\t\t\t\t\tcustomTemplate: {\n\t\t\t\t\t\t\t\"Uint32\": {\n\t\t\t\t\t\t\t\ta: 922337203685,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"set<NamedProperty>\": {\n\t\t\t\t\t\t\t\tnestedSet: {},\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\t// Make sure, nested removes are treated correctly\n\t\t\tvar filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, [\"nested7.abcd\"]);\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tremove: [\"nested7\"],\n\t\t\t});\n\t\t});\n\n\t\tit(\"should fail filtering change sets with paths that resolve into arrays and sets\", function () {\n\t\t\tvar failedFilteredFunc = Utils.getFilteredChangeSetByPaths.bind(null, changeSet, [\n\t\t\t\t\"nested1.nestedArray[0]\",\n\t\t\t]);\n\n\t\t\texpect(failedFilteredFunc).to.throw(Error, MSG.FILTER_PATH_WITHIN_ARRAY);\n\n\t\t\t// With valid paths\n\t\t\tfailedFilteredFunc = Utils.getFilteredChangeSetByPaths.bind(null, changeSet, [\n\t\t\t\t\"customTemplate\",\n\t\t\t\t\"nested1.nestedArray[0]\",\n\t\t\t]);\n\n\t\t\texpect(failedFilteredFunc).to.throw(Error, MSG.FILTER_PATH_WITHIN_ARRAY);\n\t\t});\n\n\t\tit(\"should work for ChangeSet with segments requiring escapes for NodeProperties\", function () {\n\t\t\tvar node = PropertyFactory.create(\"NodeProperty\");\n\t\t\tnode.insert('.\"test\".', PropertyFactory.create(\"NodeProperty\"));\n\t\t\tnode.get('.\"test\".').insert(\n\t\t\t\t\"[abcd]\",\n\t\t\t\tPropertyFactory.create(\"String\", undefined, \"test\"),\n\t\t\t);\n\n\t\t\tvar CS = node.serialize();\n\t\t\tvar filteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\".\\\\\"test\\\\\".\".\"[abcd]\"']);\n\t\t\texpect(filteredCS).to.deep.equal(CS);\n\n\t\t\tnode.cleanDirty();\n\t\t\tnode.get('.\"test\".').get(\"[abcd]\").setValue(\"test2\");\n\n\t\t\t// Test a modification\n\t\t\tCS = node.serialize({ dirtyOnly: true });\n\t\t\tfilteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\".\\\\\"test\\\\\".\".\"[abcd]\"']);\n\t\t\texpect(filteredCS).to.deep.equal(CS);\n\n\t\t\t// Test a removal\n\t\t\tnode.cleanDirty();\n\t\t\tnode.get('.\"test\".').remove(\"[abcd]\");\n\t\t\tCS = node.serialize({ dirtyOnly: true });\n\t\t\tfilteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\".\\\\\"test\\\\\".\"']);\n\t\t\texpect(filteredCS).to.deep.equal(CS);\n\t\t});\n\n\t\tit(\"should work for ChangeSet with segments requiring escapes in template\", function () {\n\t\t\tvar node = PropertyFactory.create(\n\t\t\t\t\"autodesk.tests:property.with.quotable.characters-1.0.0\",\n\t\t\t);\n\t\t\tnode.cleanDirty();\n\n\t\t\tnode.get([\"test[property]\", \".property.\"]).get(\"test\").value = \"test\";\n\n\t\t\tvar CS = node.serialize({ dirtyOnly: true });\n\t\t\tvar filteredCS = Utils.getFilteredChangeSetByPaths(CS, [\n\t\t\t\t'\"test[property]\".\".property.\"',\n\t\t\t]);\n\t\t\texpect(filteredCS).to.deep.equal(CS);\n\t\t});\n\n\t\tit(\"should work for reversible ChangeSet\", function () {\n\t\t\tvar originalChangeSet = {\n\t\t\t\tinsert: {\n\t\t\t\t\t\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\": {\n\t\t\t\t\t\tF: { String: { stringProperty: \"\" } },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tremove: [\"B\", \"C\"],\n\t\t\t\tmodify: {\n\t\t\t\t\t\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\": {\n\t\t\t\t\t\tA: { String: { stringProperty: \"hello\" } },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tvar parentChangeSet = {\n\t\t\t\tinsert: {\n\t\t\t\t\t\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\": {\n\t\t\t\t\t\tA: { String: { stringProperty: \"\" } },\n\t\t\t\t\t\tB: { String: { stringProperty: \"\" } },\n\t\t\t\t\t\tC: { String: { stringProperty: \"\" } },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tvar cs = new ChangeSet(originalChangeSet);\n\t\t\tcs._toReversibleChangeSet(parentChangeSet);\n\n\t\t\tvar filteredCS = Utils.getFilteredChangeSetByPaths(cs.getSerializedChangeSet(), [\n\t\t\t\t\"A\",\n\t\t\t\t\"B\",\n\t\t\t\t\"F\",\n\t\t\t]);\n\n\t\t\texpect(filteredCS).to.eql({\n\t\t\t\tinsert: {\n\t\t\t\t\t\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\": {\n\t\t\t\t\t\tF: { String: { stringProperty: \"\" } },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tremove: {\n\t\t\t\t\t\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\": {\n\t\t\t\t\t\tB: { String: { stringProperty: \"\" } },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmodify: {\n\t\t\t\t\t\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\": {\n\t\t\t\t\t\tA: {\n\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\tstringProperty: {\n\t\t\t\t\t\t\t\t\tvalue: \"hello\",\n\t\t\t\t\t\t\t\t\toldValue: \"\",\n\t\t\t\t\t\t\t\t},\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\t\t});\n\t});\n\n\tdescribe(\"Utils.getFilteredOutChangeSetByPaths\", () => {\n\t\tconst changeset = {\n\t\t\tinsert: {\n\t\t\t\t\"map<NodeProperty>\": {\n\t\t\t\t\tassets: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\"autodesk.test:sample-1.0.0\": {\n\t\t\t\t\t\t\t\tProp1: {\n\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\tguid: \"Prop1\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tProp2: {\n\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\tguid: \"Prop2\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tProp3: {\n\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\tguid: \"Prop3\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\t\t};\n\n\t\tconst singleExclusion = {\n\t\t\tinsert: {\n\t\t\t\t\"map<NodeProperty>\": {\n\t\t\t\t\tassets: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\"autodesk.test:sample-1.0.0\": {\n\t\t\t\t\t\t\t\tProp1: {\n\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\tguid: \"Prop1\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tProp2: {\n\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\tguid: \"Prop2\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\t\t};\n\n\t\tconst multiExclusion = {\n\t\t\tinsert: {\n\t\t\t\t\"map<NodeProperty>\": {\n\t\t\t\t\tassets: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\"autodesk.test:sample-1.0.0\": {\n\t\t\t\t\t\t\t\tProp1: {\n\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\tguid: \"Prop1\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\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\t\t};\n\n\t\tit(\"should exclude single given path\", () => {\n\t\t\tlet res = Utils.excludePathsFromChangeSet(changeset, \"assets[Prop3]\");\n\t\t\texpect(res).to.be.deep.equal(singleExclusion);\n\t\t});\n\n\t\tit(\"should exclude single given path in array\", () => {\n\t\t\tlet res = Utils.excludePathsFromChangeSet(changeset, [\"assets[Prop3]\"]);\n\t\t\texpect(res).to.be.deep.equal(singleExclusion);\n\t\t});\n\n\t\tit(\"should exclude every given path in array\", () => {\n\t\t\tlet res = Utils.excludePathsFromChangeSet(changeset, [\n\t\t\t\t\"assets[Prop3]\",\n\t\t\t\t\"assets[Prop2]\",\n\t\t\t]);\n\t\t\texpect(res).to.be.deep.equal(multiExclusion);\n\t\t});\n\n\t\tit(\"should return undefined if no changeset is passed\", () => {\n\t\t\tlet res = Utils.excludePathsFromChangeSet(undefined, [\"assets[Prop3]\"]);\n\t\t\texpect(res).to.be.undefined;\n\t\t});\n\n\t\tit(\"should not exclude if no paths are passed\", () => {\n\t\t\texpect(Utils.excludePathsFromChangeSet(changeset)).to.be.deep.equal(changeset);\n\t\t\texpect(Utils.excludePathsFromChangeSet(changeset, \"\")).to.be.deep.equal(changeset);\n\t\t\texpect(Utils.excludePathsFromChangeSet(changeset, [])).to.be.deep.equal(changeset);\n\t\t});\n\n\t\tit(\"should not exclude if an invalid path is passed\", () => {\n\t\t\texpect(Utils.excludePathsFromChangeSet(changeset, [\"a.b.c\"])).to.be.deep.equal(\n\t\t\t\tchangeset,\n\t\t\t);\n\t\t});\n\n\t\tit(\"should copy the changeset\", () => {\n\t\t\texpect(Utils.excludePathsFromChangeSet(changeset, [\"assets[prop3]\"])).to.not.be.equal(\n\t\t\t\tchangeset,\n\t\t\t);\n\t\t});\n\t});\n});\n"]}