@fluid-experimental/property-properties 2.93.0 → 2.101.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 (30) hide show
  1. package/dist/test/properties/arrayProperty.spec.js +11 -12
  2. package/dist/test/properties/arrayProperty.spec.js.map +1 -1
  3. package/dist/test/properties/baseProperty.spec.js +4 -1
  4. package/dist/test/properties/baseProperty.spec.js.map +1 -1
  5. package/dist/test/properties/containerProperty.spec.js +1 -1
  6. package/dist/test/properties/containerProperty.spec.js.map +1 -1
  7. package/dist/test/properties/customArrayProperty.spec.js +2 -2
  8. package/dist/test/properties/customArrayProperty.spec.js.map +1 -1
  9. package/dist/test/properties/int64ArrayProperty.spec.js +4 -4
  10. package/dist/test/properties/int64ArrayProperty.spec.js.map +1 -1
  11. package/dist/test/properties/int64Property.spec.js +2 -2
  12. package/dist/test/properties/int64Property.spec.js.map +1 -1
  13. package/dist/test/properties/isLeafNode.spec.js +1 -7
  14. package/dist/test/properties/isLeafNode.spec.js.map +1 -1
  15. package/dist/test/properties/namedNodeProperty.spec.js +1 -2
  16. package/dist/test/properties/namedNodeProperty.spec.js.map +1 -1
  17. package/dist/test/properties/nodeProperty.spec.js +1 -1
  18. package/dist/test/properties/nodeProperty.spec.js.map +1 -1
  19. package/dist/test/properties/stringProperty.spec.js +6 -5
  20. package/dist/test/properties/stringProperty.spec.js.map +1 -1
  21. package/dist/test/properties/valueMapProperty.spec.js +8 -3
  22. package/dist/test/properties/valueMapProperty.spec.js.map +1 -1
  23. package/dist/test/properties/valueProperty.spec.js +5 -1
  24. package/dist/test/properties/valueProperty.spec.js.map +1 -1
  25. package/dist/test/propertyFactory.spec.js +15 -10
  26. package/dist/test/propertyFactory.spec.js.map +1 -1
  27. package/dist/test/tsconfig.tsbuildinfo +1 -1
  28. package/dist/test/utils.spec.js +13 -7
  29. package/dist/test/utils.spec.js.map +1 -1
  30. package/package.json +7 -6
@@ -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\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\");\n\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(-1);\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 (in_context.getFullPath() === \"\" || in_context.getFullPath() === \"setClone\") {\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 (in_context.getFullPath() !== \"\" && in_context.getFullPath() !== \"array\") {\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(removedStrings.indexOf(\"/\" + in_context.getFullPath())).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 (in_context.getFullPath() === \"\" || in_context.getFullPath() === \"array\") {\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 (in_context.getFullPath() === \"\" || in_context.getFullPath() === \"setClone\") {\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\n\t\t\t\t.resolvePath(\"array\")\n\t\t\t\t.insertRange(1, [\n\t\t\t\t\tPropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"),\n\t\t\t\t\tPropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"),\n\t\t\t\t]);\n\t\t\troot\n\t\t\t\t.resolvePath(\"array\")\n\t\t\t\t.insertRange(0, [\n\t\t\t\t\tPropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"),\n\t\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\n\t\t\t\t.resolvePath(\"map\")\n\t\t\t\t.insert(\n\t\t\t\t\t\"entry2\",\n\t\t\t\t\tPropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"),\n\t\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(sim.getId(), root, root.serialize({ dirtyOnly: true }), false)\n\t\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('\"test[property]\".\".property.\".test', node, changeSet, false),\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\n\t\t\t\t.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('\"test[property]\".\".property.\".test', node, changeSet, false),\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[\"nested\", new Map([[\"c\", new Map([[\"d\", new Map([[\"e\", new Map()]])]])]])],\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\n\t\t\t\t.get('.\"test\".')\n\t\t\t\t.insert(\"[abcd]\", PropertyFactory.create(\"String\", undefined, \"test\"));\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, [\"assets[Prop3]\", \"assets[Prop2]\"]);\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"]}
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\n/* globals assert, expect */\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\");\n\nconst { PropertyFactory } = require(\"..\");\nconst { BaseProperty } = require(\"..\");\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(-1);\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 (in_context.getFullPath() === \"\" || in_context.getFullPath() === \"setClone\") {\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 (in_context.getFullPath() !== \"\" && in_context.getFullPath() !== \"array\") {\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(removedStrings.indexOf(\"/\" + in_context.getFullPath())).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 (in_context.getFullPath() === \"\" || in_context.getFullPath() === \"array\") {\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 (in_context.getFullPath() === \"\" || in_context.getFullPath() === \"setClone\") {\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\n\t\t\t\t.resolvePath(\"array\")\n\t\t\t\t.insertRange(1, [\n\t\t\t\t\tPropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"),\n\t\t\t\t\tPropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"),\n\t\t\t\t]);\n\t\t\troot\n\t\t\t\t.resolvePath(\"array\")\n\t\t\t\t.insertRange(0, [\n\t\t\t\t\tPropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"),\n\t\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\n\t\t\t\t.resolvePath(\"map\")\n\t\t\t\t.insert(\n\t\t\t\t\t\"entry2\",\n\t\t\t\t\tPropertyFactory.create(\"autodesk.test:utils.spec.task.subject-1.0.0\"),\n\t\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(sim.getId(), root, root.serialize({ dirtyOnly: true }), false)\n\t\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('\"test[property]\".\".property.\".test', node, changeSet, false),\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\n\t\t\t\t.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('\"test[property]\".\".property.\".test', node, changeSet, false),\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/** @type {Array<[string, any]>} */ ([\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\t\t\"myCallback\",\n\t\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\t\treturn \"hello\";\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\t[\"myValue\", 1],\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\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[\"nested\", new Map([[\"c\", new Map([[\"d\", new Map([[\"e\", new Map()]])]])]])],\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\n\t\t\t\t.get('.\"test\".')\n\t\t\t\t.insert(\"[abcd]\", PropertyFactory.create(\"String\", undefined, \"test\"));\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(\n\t\t\t\tchangeset,\n\t\t\t\t// @ts-expect-error - testing the case when in_paths argument is a string instead of an array\n\t\t\t\t\"assets[Prop3]\",\n\t\t\t);\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, [\"assets[Prop3]\", \"assets[Prop2]\"]);\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(\n\t\t\t\t// @ts-expect-error - testing the case when in_paths argument is not passed\n\t\t\t\tUtils.excludePathsFromChangeSet(changeset),\n\t\t\t).to.be.deep.equal(changeset);\n\t\t\texpect(\n\t\t\t\tUtils.excludePathsFromChangeSet(\n\t\t\t\t\tchangeset,\n\t\t\t\t\t// @ts-expect-error - testing the case when in_paths argument is an empty string\n\t\t\t\t\t\"\",\n\t\t\t\t),\n\t\t\t).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"]}