@fluid-experimental/property-properties 0.59.2001 → 0.59.3000-66610
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.
- package/dist/containerSerializer.d.ts +2 -2
- package/dist/containerSerializer.d.ts.map +1 -1
- package/dist/properties/abstractStaticCollectionProperty.d.ts +1 -1
- package/dist/properties/abstractStaticCollectionProperty.d.ts.map +1 -1
- package/dist/properties/arrayProperty.d.ts +9 -9
- package/dist/properties/arrayProperty.d.ts.map +1 -1
- package/dist/properties/baseProperty.d.ts.map +1 -1
- package/dist/properties/baseProperty.js.map +1 -1
- package/dist/properties/containerProperty.d.ts +1 -6
- package/dist/properties/containerProperty.d.ts.map +1 -1
- package/dist/properties/enumProperty.d.ts +0 -9
- package/dist/properties/enumProperty.d.ts.map +1 -1
- package/dist/properties/floatProperties.d.ts +0 -18
- package/dist/properties/floatProperties.d.ts.map +1 -1
- package/dist/properties/indexedCollectionBaseProperty.d.ts +1 -1
- package/dist/properties/indexedCollectionBaseProperty.d.ts.map +1 -1
- package/dist/properties/intProperties.d.ts +0 -28
- package/dist/properties/intProperties.d.ts.map +1 -1
- package/dist/properties/mapProperty.d.ts +1 -1
- package/dist/properties/mapProperty.d.ts.map +1 -1
- package/dist/properties/nodeProperty.d.ts +0 -10
- package/dist/properties/nodeProperty.d.ts.map +1 -1
- package/dist/properties/referenceArrayProperty.d.ts +0 -10
- package/dist/properties/referenceArrayProperty.d.ts.map +1 -1
- package/dist/properties/referenceMapProperty.d.ts +0 -10
- package/dist/properties/referenceMapProperty.d.ts.map +1 -1
- package/dist/properties/referenceProperty.d.ts +0 -10
- package/dist/properties/referenceProperty.d.ts.map +1 -1
- package/dist/properties/setProperty.d.ts +3 -3
- package/dist/properties/setProperty.d.ts.map +1 -1
- package/dist/properties/uintProperties.d.ts +0 -27
- package/dist/properties/uintProperties.d.ts.map +1 -1
- package/dist/properties/valueArrayProperty.d.ts +0 -128
- package/dist/properties/valueArrayProperty.d.ts.map +1 -1
- package/dist/properties/valueMapProperty.d.ts +0 -129
- package/dist/properties/valueMapProperty.d.ts.map +1 -1
- package/dist/propertyFactory.js.map +1 -1
- package/dist/propertyTemplate.d.ts +1 -1
- package/dist/propertyTemplate.d.ts.map +1 -1
- package/dist/propertyTemplateWrapper.d.ts +5 -5
- package/dist/propertyTemplateWrapper.d.ts.map +1 -1
- package/dist/propertyUtils.d.ts +1 -1
- package/dist/propertyUtils.d.ts.map +1 -1
- package/dist/test/propertyFactory.spec.js +1 -0
- package/dist/test/propertyFactory.spec.js.map +1 -1
- package/dist/test/tsconfig.tsbuildinfo +1 -2387
- package/dist/test/utils.spec.js +12 -3
- package/dist/test/utils.spec.js.map +1 -1
- package/lib/containerSerializer.d.ts +2 -2
- package/lib/containerSerializer.d.ts.map +1 -1
- package/lib/properties/abstractStaticCollectionProperty.d.ts +1 -1
- package/lib/properties/abstractStaticCollectionProperty.d.ts.map +1 -1
- package/lib/properties/arrayProperty.d.ts +9 -9
- package/lib/properties/arrayProperty.d.ts.map +1 -1
- package/lib/properties/baseProperty.d.ts.map +1 -1
- package/lib/properties/baseProperty.js.map +1 -1
- package/lib/properties/containerProperty.d.ts +1 -6
- package/lib/properties/containerProperty.d.ts.map +1 -1
- package/lib/properties/enumProperty.d.ts +0 -9
- package/lib/properties/enumProperty.d.ts.map +1 -1
- package/lib/properties/floatProperties.d.ts +0 -18
- package/lib/properties/floatProperties.d.ts.map +1 -1
- package/lib/properties/indexedCollectionBaseProperty.d.ts +1 -1
- package/lib/properties/indexedCollectionBaseProperty.d.ts.map +1 -1
- package/lib/properties/intProperties.d.ts +0 -28
- package/lib/properties/intProperties.d.ts.map +1 -1
- package/lib/properties/mapProperty.d.ts +1 -1
- package/lib/properties/mapProperty.d.ts.map +1 -1
- package/lib/properties/nodeProperty.d.ts +0 -10
- package/lib/properties/nodeProperty.d.ts.map +1 -1
- package/lib/properties/referenceArrayProperty.d.ts +0 -10
- package/lib/properties/referenceArrayProperty.d.ts.map +1 -1
- package/lib/properties/referenceMapProperty.d.ts +0 -10
- package/lib/properties/referenceMapProperty.d.ts.map +1 -1
- package/lib/properties/referenceProperty.d.ts +0 -10
- package/lib/properties/referenceProperty.d.ts.map +1 -1
- package/lib/properties/setProperty.d.ts +3 -3
- package/lib/properties/setProperty.d.ts.map +1 -1
- package/lib/properties/uintProperties.d.ts +0 -27
- package/lib/properties/uintProperties.d.ts.map +1 -1
- package/lib/properties/valueArrayProperty.d.ts +0 -128
- package/lib/properties/valueArrayProperty.d.ts.map +1 -1
- package/lib/properties/valueMapProperty.d.ts +0 -129
- package/lib/properties/valueMapProperty.d.ts.map +1 -1
- package/lib/propertyFactory.js.map +1 -1
- package/lib/propertyTemplate.d.ts +1 -1
- package/lib/propertyTemplate.d.ts.map +1 -1
- package/lib/propertyTemplateWrapper.d.ts +5 -5
- package/lib/propertyTemplateWrapper.d.ts.map +1 -1
- package/lib/propertyUtils.d.ts +1 -1
- package/lib/propertyUtils.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../src/test/utils.spec.js"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n/* globals assert */\n/* eslint-disable no-unused-expressions */\n/* eslint-disable max-nested-callbacks */\n/* eslint-disable max-len */\n\n/**\n * @fileoverview In this file, we will test the utils\n * described in /src/utils.js\n */\n\nconst { ChangeSet } = require('@fluid-experimental/property-changeset');\nconst { Utils } = require('@fluid-experimental/property-changeset');\nconst { MSG } = require('@fluid-experimental/property-common').constants;\nconst _ = require('lodash');\nconst { PropertyFactory } = require('..');\nconst { BaseProperty } = require('..');\nconst { NodeProperty } = require('../properties/nodeProperty');\n\ndescribe('Utils', function() {\n before(function() {\n var TaskStatus = {\n // inherits : 'Enum',\n typeid: 'autodesk.test:utils.spec.task.status-1.0.0',\n /* values : {\n running : 'running',\n created : 'created',\n succeeded : 'succeeded',\n failed : 'failed',\n canceled : 'canceled'\n },\n default : 'created' */\n };\n\n // The subject property template to be tracked\n var TaskSubject = {\n inherits: ['NodeProperty'],\n typeid: 'autodesk.test:utils.spec.task.subject-1.0.0',\n properties: [\n // {id: 'status', typeid: 'autodesk.test:utils_spec_status-1.0.0'},\n { id: 'errorMsg', typeid: 'String' },\n // {id: 'result', typeid: 'BaseProperty'},\n { id: 'progress', typeid: 'Uint32', annotation: { min: 0, max: 100 } },\n // {id: 'timeRemaining' , typeid : 'autodesk.test:utils_spec_datedelta-1.0.0'}\n ],\n };\n\n // The observer tracking subject(s)\n var TaskObserver = {\n inherits: 'autodesk.test:utils.spec.task.subject-1.0.0',\n typeid: 'autodesk.test:utils.spec.task.observer-1.0.0',\n properties: [\n { id: 'name', typeid: 'String' },\n { id: 'creator', typeid: 'autodesk.test:utils.spec.user-1.0.0' },\n { id: 'subjects', typeid: 'autodesk.test:utils.spec.task.subjectentry-1.0.0', context: 'array' },\n { id: 'startTime', typeid: 'autodesk.test:utils.spec.date-1.0.0' },\n { id: 'endTime', typeid: 'autodesk.test:utils.spec.date-1.0.0' },\n ],\n };\n\n // Subject entries passed in to the 'subjects' field of the task observer\n var TaskSubjectEntries = {\n typeid: 'autodesk.test:utils.spec.task.subjectentry-1.0.0',\n properties: [\n { id: 'path', typeid: 'String' },\n ],\n };\n\n // Example usage of task subjects to be tracked\n var Sim = {\n inherits: ['NodeProperty'],\n typeid: 'autodesk.test:utils.spec.pan.sim-1.0.0',\n properties: [\n\n { id: 'costEstimated', typeid: 'autodesk.test:utils.spec.task.subject-1.0.0' },\n { id: 'costFinal', typeid: 'autodesk.test:utils.spec.task.subject-1.0.0' },\n\n // set by client to start or cancel the simulation\n { id: 'start', typeid: 'Bool', 'default': false },\n { id: 'cancel', typeid: 'Bool', 'default': false },\n\n // { id: 'inputs' , typeid: 'autodesk.test:utils_spec_pan.input-1.0.0' },\n\n { id: 'thermalResults', typeid: 'autodesk.test:utils.spec.task.subject-1.0.0' },\n { id: 'mechanicalResults', typeid: 'autodesk.test:utils.spec.task.subject-1.0.0' },\n ],\n };\n\n var nestedTemplate = {\n typeid: 'autodesk.tests:nestedTemplate-1.0.0',\n properties: [{\n id: 'a',\n typeid: 'String',\n }, {\n id: 'b',\n typeid: 'String',\n }, {\n id: 'c',\n properties: [{\n id: 'myNestedProp',\n typeid: 'autodesk.test:utils.spec.task.subject-1.0.0',\n }],\n }],\n };\n var QuoatablePropertyObject = {\n typeid: 'autodesk.tests:property.with.quotable.characters-1.0.0',\n properties: [{\n id: 'simple_property',\n typeid: 'String',\n }, {\n id: 'test.property',\n typeid: 'String',\n }, {\n id: 'test\"property\"',\n typeid: 'String',\n }, {\n id: 'test[property]',\n properties: [{\n id: '.property.',\n properties: [{\n id: 'test',\n typeid: 'String',\n }],\n }],\n }],\n };\n\n var ContainedTemplate = {\n typeid: 'autodesk.test:utilsTestContained-1.0.0',\n properties: [\n { id: 'error\"Msg\"', typeid: 'String' },\n ],\n };\n\n var StaticNodeChild = {\n typeid: 'autodesk.test:staticNodeChild-1.0.0',\n inherits: ['NodeProperty'],\n properties: [\n { id: 'nodeProperty', typeid: 'NodeProperty' },\n ],\n };\n\n var ParentTemplate = {\n typeid: 'autodesk.test:utilsTestParent-1.0.0',\n properties: [\n { id: 'errorMsg', typeid: 'String' },\n { id: 'progress', typeid: 'Uint32' },\n {\n id: 'nested', properties: [\n { id: 'en\"t\"ry', typeid: 'String' },\n ],\n },\n { id: 'contained', typeid: 'autodesk.test:utilsTestContained-1.0.0' },\n { id: 'containedMap', typeid: 'autodesk.test:utilsTestContained-1.0.0', context: 'map' },\n ],\n };\n\n PropertyFactory._reregister(TaskStatus);\n PropertyFactory._reregister(TaskSubject);\n PropertyFactory._reregister(TaskObserver);\n PropertyFactory._reregister(TaskSubjectEntries);\n PropertyFactory._reregister(Sim);\n PropertyFactory._reregister(nestedTemplate);\n PropertyFactory._reregister(QuoatablePropertyObject);\n PropertyFactory._reregister(ParentTemplate);\n PropertyFactory._reregister(ContainedTemplate);\n PropertyFactory._reregister(StaticNodeChild);\n });\n\n describe('Utils.traverseChangeSetRecursively', function() {\n var testRoot, contexts, namedNodePropForSet;\n it('should report correctly for inserts', function() {\n testRoot = PropertyFactory.create('NodeProperty');\n testRoot.insert('string', PropertyFactory.create('String'));\n testRoot.insert('test\"Templated\"Property',\n PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0'));\n testRoot.resolvePath('\"test\\\\\"Templated\\\\\"Property\".containedMap').insert('entry',\n PropertyFactory.create('autodesk.test:utilsTestContained-1.0.0'));\n testRoot.insert('reference', PropertyFactory.create('Reference<String>'));\n\n // Test an array with a primitive\n testRoot.insert('floatArray', PropertyFactory.create('Float32', 'array'));\n testRoot._properties.floatArray.insertRange(0, [1, 2, 3, 4, 5]);\n\n // Test an array with a complex type\n testRoot.insert('array', PropertyFactory.create('array<>'));\n var arrayNode = PropertyFactory.create('NodeProperty');\n testRoot._properties.array.push(arrayNode);\n arrayNode.insert('string', PropertyFactory.create('String'));\n\n // Test a map with a primitive\n testRoot.insert('floatMap', PropertyFactory.create('Float32', 'map'));\n testRoot._properties.floatMap.insert('test', 1);\n testRoot._properties.floatMap.insert('test2', 2);\n testRoot._properties.floatMap.insert('test3', 3);\n\n // Test a map with complex types\n testRoot.insert('map', PropertyFactory.create('map<>'));\n\n // add members\n // Simple string\n testRoot._properties.map.insert('string',\n PropertyFactory.create('String'));\n\n // String with name that has to be escaped\n testRoot._properties.map.insert('s\"tr\"ing',\n PropertyFactory.create('String'));\n\n // A map in a map\n testRoot._properties.map.insert('map',\n PropertyFactory.create('map<>'));\n testRoot._properties.map.get('map').insert('string',\n PropertyFactory.create('String'));\n\n // An array in a map\n testRoot._properties.map.insert('array',\n PropertyFactory.create('array<>'));\n testRoot._properties.map.get('array').insert(0,\n PropertyFactory.create('NodeProperty'));\n testRoot._properties.map.get('array').get(0).insert('string',\n PropertyFactory.create('String'));\n\n // A composed property\n testRoot._properties.map.insert('testParent',\n PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0'));\n\n // A NodeProperty\n testRoot._properties.map.insert('nodeProperty',\n PropertyFactory.create('NodeProperty'));\n testRoot._properties.map.get('nodeProperty').insert('string',\n PropertyFactory.create('String'));\n\n // Test a set property\n testRoot.insert('set', PropertyFactory.create('set<>'));\n namedNodePropForSet = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.set.insert(namedNodePropForSet);\n namedNodePropForSet.insert('string',\n PropertyFactory.create('String'));\n\n contexts = [];\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': false }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath() + '*');\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context._fullPath !== '') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n contexts.push(in_context.clone());\n },\n });\n expect(contexts.length).to.equal(38);\n });\n\n it('should work for modifications of primitive types', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var modifiedStringCount = 0;\n for (var i = 0; i < contexts.length; i++) {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n\n // modify strings\n if (contexts[i].getTypeid() === 'String' &&\n modifyNode.getId() !== 'guid') {\n modifyNode.setValue('modified');\n modifiedStringCount++;\n }\n\n // modify float arrays\n if (contexts[i].getTypeid() === 'array<Float32>') {\n modifyNode.push(15);\n }\n }\n\n // modify a float map\n // note: set removed, setValue not implemented yet\n testRoot._properties.floatMap.set('test', 5);\n testRoot._properties.floatMap.set('new_test', 7);\n\n var reportedStringModifiedCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n expect(in_context.getOperationType()).to.equal('modify');\n\n if (node.getTypeid() === 'String') {\n reportedStringModifiedCount++;\n expect(in_context.getNestedChangeSet()).to.equal('modified');\n }\n\n if (in_context.getTypeid() === 'array<Float32>') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: [[5, [15]]],\n });\n }\n\n if (in_context.getTypeid() === 'map<Float32>') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: {\n new_test: 7,\n },\n modify: {\n test: 5,\n },\n });\n }\n },\n });\n\n // Make sure all modified strings have been reported\n expect(reportedStringModifiedCount).to.equal(modifiedStringCount);\n });\n\n it('should work for inserts in strings', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n for (var i = 0; i < contexts.length; i++) {\n if (contexts[i].getTypeid() === 'String') {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n if (modifyNode.getId() !== 'guid') {\n modifyNode.insert(3, '_inserted_');\n }\n }\n }\n\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n expect(in_context.getOperationType()).to.equal('modify');\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: [[3, '_inserted_']],\n });\n }\n },\n });\n });\n\n it('should work for inserts in arrays', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var newArrayNode = PropertyFactory.create('NodeProperty');\n testRoot._properties.array.push(newArrayNode);\n newArrayNode.insert('string', PropertyFactory.create('String'));\n newArrayNode._properties.string.value = 'test';\n\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context.getFullPath() !== '' &&\n in_context.getFullPath() !== 'array') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.equal('test');\n }\n },\n });\n });\n\n it('should work for inserts in sets', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var newSetNode = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.set.insert(newSetNode);\n newSetNode.insert('string', PropertyFactory.create('String'));\n newSetNode._properties.string.setValue('test');\n\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context.getFullPath() !== '' &&\n in_context.getFullPath() !== 'set') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.equal(node.value);\n }\n },\n });\n });\n\n it('should work for node property removals', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var removedStrings = [];\n for (var i = 0; i < contexts.length; i++) {\n if (contexts[i].getTypeid() === 'NodeProperty') {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n removedStrings.push(modifyNode._properties.string.getAbsolutePath());\n\n modifyNode.remove('string');\n }\n }\n\n var actualStringRemoveCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n var node = testRoot.resolvePath(in_context.getFullPath());\n if (node) {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n expect(removedStrings.indexOf('/' + in_context.getFullPath())).to.not.equal(-1);\n actualStringRemoveCount++;\n }\n },\n });\n expect(removedStrings.length).to.equal(actualStringRemoveCount);\n });\n\n it('should work for array removals', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.array.removeRange(0, 2);\n var arrayRemovalCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'array') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n arrayRemovalCount++;\n }\n },\n });\n expect(arrayRemovalCount).to.equal(2);\n });\n\n it('should work for map removals', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.map.remove('string');\n var mapRemovalCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'map') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n mapRemovalCount++;\n }\n },\n });\n expect(mapRemovalCount).to.equal(1);\n });\n\n it('should work for set removals', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.set.remove(namedNodePropForSet);\n\n var setRemovalCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'set') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n setRemovalCount++;\n }\n },\n });\n expect(setRemovalCount).to.equal(1);\n });\n\n it('should clone the context correctly', function() {\n testRoot.insert('setClone', PropertyFactory.create('set<>'));\n var namedNodePropForSet1 = PropertyFactory.create('NamedNodeProperty');\n var namedNodePropForSet2 = PropertyFactory.create('NamedNodeProperty');\n var namedNodePropForSet3 = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.setClone.insert(namedNodePropForSet1);\n testRoot._properties.setClone.insert(namedNodePropForSet2);\n testRoot._properties.setClone.insert(namedNodePropForSet3);\n namedNodePropForSet1.insert('string1', PropertyFactory.create('String'));\n namedNodePropForSet2.insert('string2', PropertyFactory.create('String'));\n namedNodePropForSet3.insert('string3', PropertyFactory.create('String'));\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.setClone.remove(namedNodePropForSet1);\n testRoot._properties.setClone.remove(namedNodePropForSet2);\n testRoot._properties.setClone.remove(namedNodePropForSet3);\n\n var setRemovalCount = 0;\n var contextCloneCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'setClone') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n setRemovalCount++;\n }\n var cloneContext = in_context.clone();\n expect(cloneContext).to.deep.equal(in_context);\n contextCloneCount++;\n },\n });\n expect(setRemovalCount).to.equal(3);\n expect(contextCloneCount >= 3).to.be.true; // we should clone at least 3 times (probably more)\n });\n\n it('@regression should work when replacing a map element', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n testRoot._properties.map.set('nodeProperty', PropertyFactory.create('NamedNodeProperty'));\n var operationtypes = [];\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // expect operations to be 'remove' and 'insert'\n if (in_context.getFullPath() === 'map[nodeProperty]') {\n operationtypes.push(in_context.getOperationType());\n }\n },\n });\n expect(operationtypes).to.deep.equal(['remove', 'insert']);\n });\n });\n\n describe('Utils.traverseChangeSetRecursivelyAsync', function() {\n var testRoot, contexts, namedNodePropForSet;\n it('should report correctly for inserts', function(done) {\n testRoot = PropertyFactory.create('NodeProperty');\n testRoot.insert('string', PropertyFactory.create('String'));\n testRoot.insert('test\"Templated\"Property',\n PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0'));\n testRoot.resolvePath('\"test\\\\\"Templated\\\\\"Property\".containedMap').insert('entry',\n PropertyFactory.create('autodesk.test:utilsTestContained-1.0.0'));\n testRoot.insert('reference', PropertyFactory.create('Reference<String>'));\n\n // Test an array with a primitive\n testRoot.insert('floatArray', PropertyFactory.create('Float32', 'array'));\n testRoot._properties.floatArray.insertRange(0, [1, 2, 3, 4, 5]);\n\n // Test an array with a complex type\n testRoot.insert('array', PropertyFactory.create('array<>'));\n var arrayNode = PropertyFactory.create('NodeProperty');\n testRoot._properties.array.push(arrayNode);\n arrayNode.insert('string', PropertyFactory.create('String'));\n\n // Test a map with a primitive\n testRoot.insert('floatMap', PropertyFactory.create('Float32', 'map'));\n testRoot._properties.floatMap.insert('test', 1);\n testRoot._properties.floatMap.insert('test2', 2);\n testRoot._properties.floatMap.insert('test3', 3);\n\n // Test a map with complex types\n testRoot.insert('map', PropertyFactory.create('map<>'));\n\n // add members\n // Simple string\n testRoot._properties.map.insert('string',\n PropertyFactory.create('String'));\n\n // String with name that has to be escaped\n testRoot._properties.map.insert('s\"tr\"ing',\n PropertyFactory.create('String'));\n\n // A map in a map\n testRoot._properties.map.insert('map',\n PropertyFactory.create('map<>'));\n testRoot._properties.map.get('map').insert('string',\n PropertyFactory.create('String'));\n\n // An array in a map\n testRoot._properties.map.insert('array',\n PropertyFactory.create('array<>'));\n testRoot._properties.map.get('array').insert(0,\n PropertyFactory.create('NodeProperty'));\n testRoot._properties.map.get('array').get(0).insert('string',\n PropertyFactory.create('String'));\n\n // A composed property\n testRoot._properties.map.insert('testParent',\n PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0'));\n\n // A NodeProperty\n testRoot._properties.map.insert('nodeProperty',\n PropertyFactory.create('NodeProperty'));\n testRoot._properties.map.get('nodeProperty').insert('string',\n PropertyFactory.create('String'));\n\n // Test a set property\n testRoot.insert('set', PropertyFactory.create('set<>'));\n namedNodePropForSet = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.set.insert(namedNodePropForSet);\n namedNodePropForSet.insert('string',\n PropertyFactory.create('String'));\n\n contexts = [];\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': false }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath() + '*');\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context._fullPath !== '') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n contexts.push(in_context.clone());\n setImmediate(cb);\n },\n }, function() {\n expect(contexts.length).to.equal(38);\n done();\n });\n });\n\n it('should work for modifications of primitive types', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var modifiedStringCount = 0;\n for (var i = 0; i < contexts.length; i++) {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n\n // modify strings\n if (contexts[i].getTypeid() === 'String' &&\n modifyNode.getId() !== 'guid') {\n modifyNode.setValue('modified');\n modifiedStringCount++;\n }\n\n // modify float arrays\n if (contexts[i].getTypeid() === 'array<Float32>') {\n modifyNode.push(15);\n }\n }\n\n // modify a float map\n // note: set removed, setValue not implemented yet\n testRoot._properties.floatMap.set('test', 5);\n testRoot._properties.floatMap.set('new_test', 7);\n\n var reportedStringModifiedCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n expect(in_context.getOperationType()).to.equal('modify');\n\n if (node.getTypeid() === 'String') {\n reportedStringModifiedCount++;\n expect(in_context.getNestedChangeSet()).to.equal('modified');\n }\n\n if (in_context.getTypeid() === 'array<Float32>') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: [[5, [15]]],\n });\n }\n\n if (in_context.getTypeid() === 'map<Float32>') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: {\n new_test: 7,\n },\n modify: {\n test: 5,\n },\n });\n }\n setImmediate(cb);\n },\n }, function() {\n // Make sure all modified strings have been reported\n expect(reportedStringModifiedCount).to.equal(modifiedStringCount);\n done();\n });\n });\n\n it('should work for inserts in strings', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n for (var i = 0; i < contexts.length; i++) {\n if (contexts[i].getTypeid() === 'String') {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n if (modifyNode.getId() !== 'guid') {\n modifyNode.insert(3, '_inserted_');\n }\n }\n }\n\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n expect(in_context.getOperationType()).to.equal('modify');\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: [[3, '_inserted_']],\n });\n }\n setImmediate(cb);\n },\n }, function() {\n done();\n });\n });\n\n it('should work for inserts in arrays', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var newArrayNode = PropertyFactory.create('NodeProperty');\n testRoot._properties.array.push(newArrayNode);\n newArrayNode.insert('string', PropertyFactory.create('String'));\n newArrayNode._properties.string.value = 'test';\n\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context.getFullPath() !== '' &&\n in_context.getFullPath() !== 'array') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.equal('test');\n }\n setImmediate(cb);\n },\n }, function() {\n done();\n });\n });\n\n it('should work for inserts in sets', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var newSetNode = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.set.insert(newSetNode);\n newSetNode.insert('string', PropertyFactory.create('String'));\n newSetNode._properties.string.setValue('test');\n\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context.getFullPath() !== '' &&\n in_context.getFullPath() !== 'set') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.equal(node.value);\n }\n setImmediate(cb);\n },\n }, done);\n });\n\n it('should work for node property removals', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var removedStrings = [];\n for (var i = 0; i < contexts.length; i++) {\n if (contexts[i].getTypeid() === 'NodeProperty') {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n removedStrings.push(modifyNode._properties.string.getAbsolutePath());\n\n modifyNode.remove('string');\n }\n }\n\n var actualStringRemoveCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n var node = testRoot.resolvePath(in_context.getFullPath());\n if (node) {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n expect(removedStrings.indexOf('/' + in_context.getFullPath())).to.not.equal(-1);\n actualStringRemoveCount++;\n }\n setImmediate(cb);\n },\n }, function() {\n expect(removedStrings.length).to.equal(actualStringRemoveCount);\n done();\n });\n });\n\n it('should work for array removals', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.array.removeRange(0, 2);\n var arrayRemovalCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'array') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n arrayRemovalCount++;\n }\n setImmediate(cb);\n },\n }, function() {\n expect(arrayRemovalCount).to.equal(2);\n done();\n });\n });\n\n it('should work for map removals', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.map.remove('string');\n var mapRemovalCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'map') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n mapRemovalCount++;\n }\n setImmediate(cb);\n },\n }, function() {\n expect(mapRemovalCount).to.equal(1);\n done();\n });\n });\n\n it('should work for set removals', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.set.remove(namedNodePropForSet);\n\n var setRemovalCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'set') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n setRemovalCount++;\n }\n setImmediate(cb);\n },\n }, function() {\n expect(setRemovalCount).to.equal(1);\n done();\n });\n });\n\n it('should clone the context correctly', function(done) {\n testRoot.insert('setClone', PropertyFactory.create('set<>'));\n var namedNodePropForSet1 = PropertyFactory.create('NamedNodeProperty');\n var namedNodePropForSet2 = PropertyFactory.create('NamedNodeProperty');\n var namedNodePropForSet3 = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.setClone.insert(namedNodePropForSet1);\n testRoot._properties.setClone.insert(namedNodePropForSet2);\n testRoot._properties.setClone.insert(namedNodePropForSet3);\n namedNodePropForSet1.insert('string1', PropertyFactory.create('String'));\n namedNodePropForSet2.insert('string2', PropertyFactory.create('String'));\n namedNodePropForSet3.insert('string3', PropertyFactory.create('String'));\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.setClone.remove(namedNodePropForSet1);\n testRoot._properties.setClone.remove(namedNodePropForSet2);\n testRoot._properties.setClone.remove(namedNodePropForSet3);\n\n var setRemovalCount = 0;\n var contextCloneCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'setClone') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n setRemovalCount++;\n }\n var cloneContext = in_context.clone();\n expect(cloneContext).to.deep.equal(in_context);\n contextCloneCount++;\n setImmediate(cb);\n },\n }, function() {\n expect(setRemovalCount).to.equal(3);\n expect(contextCloneCount >= 3).to.be.true; // we should clone at least 3 times (probably more)\n done();\n });\n });\n\n it('@regression should work for mixed modifications and removals', function(done) {\n // This test uses its own property sets tree\n var ownRoot = PropertyFactory.create('NodeProperty');\n var userInfo = PropertyFactory.create('NodeProperty');\n userInfo.insert('name', PropertyFactory.create('String', 'single', 'John Doe'));\n userInfo.insert('isResident', PropertyFactory.create('Bool', 'single', true));\n ownRoot.insert('userInfo', userInfo);\n var numberOfResidents = PropertyFactory.create('Int32', 'single', 1);\n ownRoot.insert('numberOfResidents', numberOfResidents);\n\n ownRoot.cleanDirty();\n\n ownRoot.get(['userInfo', 'name']).setValue('Johnny B. Goode');\n ownRoot.get('userInfo').remove('isResident');\n ownRoot.get('numberOfResidents').setValue(0);\n\n var modifiedCount = 0;\n var serializedCS = ownRoot.serialize({ 'dirtyOnly': true });\n Utils.traverseChangeSetRecursivelyAsync(serializedCS, {\n preCallback: function(in_context, cb) {\n var node = ownRoot.resolvePath(in_context.getFullPath());\n if (node) {\n expect(in_context.getOperationType()).to.equal('modify');\n if (in_context.getLastSegment() === 'name' ||\n in_context.getLastSegment() === 'numberOfResidents') {\n modifiedCount++;\n }\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n expect(in_context.getLastSegment()).to.equal('isResident');\n }\n setImmediate(cb);\n },\n }, function() {\n expect(modifiedCount).to.equal(2);\n done();\n });\n });\n\n it('@regression should work when replacing a map element', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.map.set('testParent', PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0',\n 'single', { errorMsg: 'another element', progress: 99 }));\n\n var operations = [];\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === 'map[testParent]') {\n operations.push(in_context.getOperationType());\n } else if (in_context.getFullPath() === 'map[testParent].errorMsg') {\n expect(in_context.getNestedChangeSet() === 'another element');\n } else if (in_context.getFullPath() === 'map[testParent].progress') {\n expect(in_context.getNestedChangeSet() === 99);\n }\n setImmediate(cb);\n },\n }, function() {\n expect(operations).to.deep.equal(['remove', 'insert']);\n done();\n });\n });\n });\n\n describe('Utils.enumerateSchemas', function() {\n var serializedChangeSet = {\n 'insertTemplates': {\n 'autodesk.tests:property.set.SimpleNamedPoint-1.0.0': {\n typeid: 'autodesk.tests:property.set.SimpleNamedPoint-1.0.0',\n inherits: 'NamedProperty',\n properties: [\n { id: 'x', typeid: 'Uint32' },\n { id: 'y', typeid: 'Uint32' },\n ],\n },\n 'autodesk.tests:property.set.SimpleNamedPoint-1.2.0': {\n typeid: 'autodesk.tests:property.set.SimpleNamedPoint-1.0.0',\n inherits: 'NamedProperty',\n properties: [\n { id: 'x', typeid: 'Uint64' },\n { id: 'y', typeid: 'Uint64' },\n ],\n },\n },\n };\n\n it('should return the schemas, and then call the finalizer', function(done) {\n var countedTemplates = 0;\n Utils.enumerateSchemas(serializedChangeSet, function(t, cb) {\n countedTemplates++;\n if (t.key === 'autodesk.tests:property.set.SimpleNamedPoint-1.0.0') {\n expect(t.value).to.eql(serializedChangeSet.insertTemplates['autodesk.tests:property.set.SimpleNamedPoint-1.0.0']);\n }\n if (t.key === 'autodesk.tests:property.set.SimpleNamedPoint-1.2.0') {\n expect(t.value).to.eql(serializedChangeSet.insertTemplates['autodesk.tests:property.set.SimpleNamedPoint-1.2.0']);\n }\n setImmediate(cb);\n }, function() {\n expect(countedTemplates).to.eql(2);\n done();\n });\n });\n });\n\n describe('Utils.extractTypeids', function() {\n it('Should work for a simple templated property', function() {\n var property = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n\n var typeids = Utils.extractTypeids(property.serialize({ 'dirtyOnly': false, 'includeRootTypeid': true }));\n typeids.sort();\n // Note the map from the template isn't included in the ChangeSet since it is empty\n expect(typeids).to.deep.equal(['String', 'Uint32', 'autodesk.test:utilsTestContained-1.0.0',\n 'autodesk.test:utilsTestParent-1.0.0',\n 'map<autodesk.test:utilsTestContained-1.0.0>']);\n });\n\n it('Should work for inserts into a NodePropertý', function() {\n var property = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.insert('child', child);\n\n var typeids = Utils.extractTypeids(property.serialize({ 'dirtyOnly': false, 'includeRootTypeid': true }));\n typeids.sort();\n expect(typeids).to.deep.equal(['NodeProperty', 'String', 'Uint32', 'autodesk.test:utilsTestContained-1.0.0',\n 'autodesk.test:utilsTestParent-1.0.0',\n 'map<autodesk.test:utilsTestContained-1.0.0>']);\n });\n\n it('Should work for inserts into a map', function() {\n var property = PropertyFactory.create('map<>');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.insert('child', child);\n\n var typeids = Utils.extractTypeids(property._serialize(false, true));\n typeids.sort();\n\n expect(typeids).to.deep.equal(['String', 'Uint32', 'autodesk.test:utilsTestContained-1.0.0',\n 'autodesk.test:utilsTestParent-1.0.0', 'map<>',\n 'map<autodesk.test:utilsTestContained-1.0.0>']);\n });\n\n it('Should work for inserts into an array', function() {\n var property = PropertyFactory.create('array<>');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.push(child);\n\n var typeids = Utils.extractTypeids(property._serialize(false, true));\n typeids.sort();\n\n expect(typeids).to.deep.equal(['String', 'Uint32', 'array<>', 'autodesk.test:utilsTestContained-1.0.0',\n 'autodesk.test:utilsTestParent-1.0.0',\n 'map<autodesk.test:utilsTestContained-1.0.0>']);\n });\n\n it('Should work for modifications of a NodeProperty', function() {\n var property = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.insert('child', child);\n property.cleanDirty();\n property.resolvePath('child.contained.\"error\\\\\"Msg\\\\\"\"').value = 'modified';\n\n var typeids = Utils.extractTypeids(property.serialize({ 'dirtyOnly': true, 'in_includeRootTypeid': true }));\n typeids.sort();\n expect(typeids).to.deep.equal([\n 'NodeProperty', 'String', 'autodesk.test:utilsTestContained-1.0.0', 'autodesk.test:utilsTestParent-1.0.0',\n ]);\n });\n\n it('Should work for modifications of a map', function() {\n var property = PropertyFactory.create('map<>');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.insert('child', child);\n property.cleanDirty();\n property.resolvePath('[child].contained.\"error\\\\\"Msg\\\\\"\"').value = 'modified';\n\n var typeids = Utils.extractTypeids(property._serialize(true, true));\n typeids.sort();\n expect(typeids).to.deep.equal([\n 'String', 'autodesk.test:utilsTestContained-1.0.0', 'autodesk.test:utilsTestParent-1.0.0', 'map<>',\n ]);\n });\n\n it('Should work for modifications of an array', function() {\n var property = PropertyFactory.create('array<>');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.push(child);\n property.cleanDirty();\n property.resolvePath('[0].contained.\"error\\\\\"Msg\\\\\"\"').setValue('modified');\n\n var typeids = Utils.extractTypeids(property._serialize(true, true));\n typeids.sort();\n expect(typeids).to.deep.equal([\n 'String', 'array<>', 'autodesk.test:utilsTestContained-1.0.0', 'autodesk.test:utilsTestParent-1.0.0',\n ]);\n });\n\n it('Should work for removals', function() {\n var typeids = Utils.extractTypeids({ remove: ['xxx-yyy-zzz'] });\n\n expect(typeids).to.have.lengthOf(1);\n expect(typeids[0]).to.equal('NodeProperty');\n });\n });\n\n describe('Change set helper functions', function() {\n var root, sim, subject1, subject2, subject3;\n // Create a simple test data-set\n before(function() {\n root = PropertyFactory.create('NodeProperty');\n sim = PropertyFactory.create('autodesk.test:utils.spec.pan.sim-1.0.0');\n subject1 = PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0');\n subject2 = PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0');\n\n root.insert('simulation', sim);\n sim.insert('subject1', subject1);\n sim.insert('subject2', subject2);\n\n var arrayProp = PropertyFactory.create('array<>');\n root.insert('array', arrayProp);\n arrayProp.push(PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'));\n arrayProp.push(PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'));\n arrayProp.get(1)._properties.progress.value = 1;\n\n var mapProp = PropertyFactory.create('map<>');\n root.insert('map', mapProp);\n mapProp.insert('entry', PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'));\n });\n\n it('should work correctly for inserts', function() {\n var insertedResults = Utils.getChangesByType('autodesk.test:utils.spec.task.subject-1.0.0',\n root.serialize({ 'dirtyOnly': true }));\n assert(_.keys(insertedResults.insert).length === 9);\n for (var i = 0; i < 9; i++) {\n assert(root.resolvePath(_.keys(insertedResults.insert)[i]) !== undefined);\n assert(Utils.getChangesByPath(_.keys(insertedResults.insert)[i], root, root.serialize(), false).insert !==\n undefined);\n }\n });\n\n it('should work correctly for the root path', function() {\n var AnonymousTestPropertyTemplate = {\n typeid: 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0',\n properties: [\n { id: 'stringProperty', typeid: 'String' },\n ],\n };\n PropertyFactory._reregister(AnonymousTestPropertyTemplate);\n\n var prop = PropertyFactory.create('NodeProperty');\n prop.insert('A',\n PropertyFactory.create('autodesk.tests:AnonymousMapTestPropertyID-1.0.0'));\n var result = Utils.getChangesByPath('', null, prop.serialize());\n expect(result).to.deep.equal(\n {\n 'modify': {\n 'insert': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'A': {\n 'String': {\n 'stringProperty': '',\n },\n },\n },\n },\n },\n });\n });\n\n it('should correctly strip typeids in insertions', function() {\n var insertionChangeSet = root.serialize({ 'dirtyOnly': true });\n Utils._stripTypeids(insertionChangeSet);\n expect(insertionChangeSet).to.deep.equal({\n 'insert': {\n 'simulation': {\n 'insert': {\n 'subject1': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'subject2': {\n 'errorMsg': '',\n 'progress': 0,\n },\n },\n 'costEstimated': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'costFinal': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'thermalResults': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'mechanicalResults': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'start': false,\n 'cancel': false,\n },\n 'map': {\n 'insert': {\n 'entry': {\n 'errorMsg': '',\n 'progress': 0,\n },\n },\n },\n 'array': {\n 'insert': [[0, [{\n 'errorMsg': '',\n 'progress': 0,\n }, {\n 'errorMsg': '',\n 'progress': 1,\n }]]],\n },\n },\n });\n });\n\n it('should work correctly for modifies', function() {\n root.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE | BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n\n subject3 = PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0');\n subject2.insert('subject3', subject3);\n\n subject1._properties.errorMsg.value = 'test';\n subject2._properties.errorMsg.value = 'test';\n sim._properties.thermalResults.errorMsg.value = 'test44';\n\n // Test array modification\n root.resolvePath('array[1].errorMsg').value = 'test';\n\n // Test array insertion\n root.resolvePath('array').insertRange(1, [\n PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'),\n PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'),\n ]);\n root.resolvePath('array').insertRange(0, [\n PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'),\n ]);\n\n // Test map modification\n root.resolvePath('map[entry].errorMsg').value = 'test';\n\n // Test map insertion\n root.resolvePath('map').insert('entry2',\n PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'));\n\n var modifiedResults = Utils.getChangesByType(\n 'autodesk.test:utils.spec.task.subject-1.0.0',\n root.serialize({ 'dirtyOnly': true }),\n true,\n );\n\n assert(_.keys(modifiedResults.insert).length === 5);\n assert(_.keys(modifiedResults.modify).length === 5);\n\n for (var i = 0; i < 5; i++) {\n assert(Utils.getChangesByPath(_.keys(modifiedResults.modify)[i], root,\n root.serialize({ 'dirtyOnly': true }), false).modify !== undefined);\n }\n for (var i = 0; i < 5; i++) {\n assert(Utils.getChangesByPath(_.keys(modifiedResults.insert)[i], root,\n root.serialize({ 'dirtyOnly': true }), false).insert !== undefined);\n }\n });\n\n it('should correctly strip typeids in modifies', function() {\n var modifyChangeSet = root.serialize({ 'dirtyOnly': true });\n Utils._stripTypeids(modifyChangeSet);\n expect(modifyChangeSet).to.deep.equal({\n 'modify': {\n 'simulation': {\n 'modify': {\n 'subject1': {\n 'errorMsg': 'test',\n },\n 'subject2': {\n 'insert': {\n 'subject3': {\n 'errorMsg': '',\n 'progress': 0,\n },\n },\n 'errorMsg': 'test',\n },\n },\n 'thermalResults': {\n 'errorMsg': 'test44',\n },\n },\n 'array': {\n insert: [[0, [\n {\n 'errorMsg': '',\n 'progress': 0,\n },\n ]], [1, [\n {\n 'errorMsg': '',\n 'progress': 0,\n }, {\n 'errorMsg': '',\n 'progress': 0,\n },\n ]]],\n modify: [[1, [{\n 'errorMsg': 'test',\n }]]],\n },\n 'map': {\n 'insert': {\n 'entry2': {\n 'errorMsg': '',\n 'progress': 0,\n },\n },\n 'modify': {\n 'entry': {\n 'errorMsg': 'test',\n },\n },\n },\n },\n });\n });\n\n it('should correctly work for removes', function() {\n root.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE | BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n subject2.remove(subject3.getId());\n\n assert(Utils.getChangesByPath(sim.getId() + '.' + subject2.getId() + '.' + subject3.getId(),\n root, root.serialize({ 'dirtyOnly': true }), false).removed === true);\n\n root.remove(sim.getId());\n assert(Utils.getChangesByPath(sim.getId() + '.' + subject2.getId() + '.' + subject3.getId(),\n root, root.serialize({ 'dirtyOnly': true }), false).removed === true);\n assert(Utils.getChangesByPath(sim.getId() + '.' + subject2.getId(), root,\n root.serialize({ 'dirtyOnly': true }), false).removed === true);\n assert(Utils.getChangesByPath(sim.getId(), root, root.serialize({ 'dirtyOnly': true }), false).removed === true);\n\n root.resolvePath('map').remove('entry2');\n root.resolvePath('array').remove(0);\n root.resolvePath('array').removeRange(1, 2);\n });\n\n it('should correctly strip typeids in removes', function() {\n var modifyChangeSet = root._serialize(true);\n Utils._stripTypeids(modifyChangeSet);\n expect(modifyChangeSet).to.deep.equal({\n 'modify': {\n 'array': {\n 'remove': [[0, 1], [2, 2]],\n },\n 'map': {\n 'remove': ['entry2'],\n },\n },\n 'remove': ['simulation'],\n });\n });\n\n it('should work for nested templates', function() {\n var nestedTemplate = PropertyFactory.create('autodesk.tests:nestedTemplate-1.0.0');\n nestedTemplate._properties.c.myNestedProp.errorMsg.value = 'testString';\n var changeSet = nestedTemplate._serialize(true);\n\n var changes = Utils.getChangesByType('String', changeSet);\n expect(changes.modify['c.myNestedProp.errorMsg']).to.equal('testString');\n\n expect(Utils.getChangesByPath('c.myNestedProp.errorMsg',\n nestedTemplate, changeSet, false)).to.have.keys('modify');\n });\n\n it('should work for an object with characters that have to be quoted', function() {\n var node = PropertyFactory.create('autodesk.tests:property.with.quotable.characters-1.0.0');\n node.get('simple_property').value = 'test';\n node.get('test.property').value = 'test';\n node.get('test\"property\"').value = 'test';\n node.get('test[property]').get('.property.').get('test').value = 'test';\n\n var changeSet = node._serialize(true);\n var changes = Utils.getChangesByType('String', changeSet);\n expect(changes.modify).to.have.keys('simple_property',\n '\"test.property\"',\n '\"test\\\\\"property\\\\\"\"',\n '\"test[property]\".\".property.\".test');\n\n expect(Utils.getChangesByPath('simple_property', node, changeSet, false)).to.have.keys('modify');\n expect(Utils.getChangesByPath('\"test.property\"', node, changeSet, false)).to.have.keys('modify');\n expect(Utils.getChangesByPath('\"test\\\\\"property\\\\\"\"', node, changeSet, false)).to.have.keys('modify');\n expect(Utils.getChangesByPath('\"test[property]\".\".property.\".test',\n node, changeSet, false)).to.have.keys('modify');\n });\n\n it('should work for a node property with characters that have to be quoted', function() {\n var node = PropertyFactory.create('NodeProperty');\n node.insert('simple_property', PropertyFactory.create('String', undefined, 'test'));\n node.insert('test.property', PropertyFactory.create('String', undefined, 'test'));\n node.insert('test\"property\"', PropertyFactory.create('String', undefined, 'test'));\n node.insert('test[property]', PropertyFactory.create('NodeProperty'));\n node.get('test[property]').insert('.property.', PropertyFactory.create('NodeProperty'));\n node.get('test[property]').get('.property.').insert('test',\n PropertyFactory.create('String', undefined, 'test'));\n\n var changeSet = node._serialize(true);\n var changes = Utils.getChangesByType('String', changeSet);\n expect(changes.insert).to.have.keys('simple_property',\n '\"test.property\"',\n '\"test\\\\\"property\\\\\"\"',\n '\"test[property]\".\".property.\".test');\n\n expect(Utils.getChangesByPath('simple_property', node, changeSet, false)).to.have.keys('insert');\n expect(Utils.getChangesByPath('\"test.property\"', node, changeSet, false)).to.have.keys('insert');\n expect(Utils.getChangesByPath('\"test\\\\\"property\\\\\"\"', node, changeSet, false)).to.have.keys('insert');\n expect(Utils.getChangesByPath('\"test[property]\".\".property.\".test',\n node, changeSet, false)).to.have.keys('insert');\n });\n });\n\n describe('Utils.getChangesToTokenizedPaths', function() {\n var CS = {\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n '__doubleUnderscore': 'text',\n },\n },\n },\n },\n },\n },\n 'nested2': {},\n },\n 'array<>': {\n 'nestedArray': {\n 'insert': [\n [\n 0,\n [\n {\n 'typeid': 'NodeProperty',\n },\n {\n 'typeid': 'NodeProperty',\n 'insert': {\n 'String': {\n 'text': '',\n },\n },\n },\n ],\n ],\n ],\n },\n },\n 'String': {\n 'string': 'text',\n },\n },\n };\n\n it('should work using objects', function() {\n var visitedPaths = [];\n Utils.getChangesToTokenizedPaths({\n 'String': {},\n 'nested1': {\n 'nested2': {\n 'string': {\n '__hidden': {\n 'myCallback': function() { return 'hello'; },\n 'myValue': 1,\n },\n },\n '___doubleUnderscore': {}, // Yes, there are 3 '_', as escapeLeadingDoubleUnderscore = true\n },\n },\n 'nestedArray': {\n '1': {\n 'String': {},\n },\n },\n }, CS, function(in_context, in_nested, in_tokenizedPath) {\n var currentPath = in_tokenizedPath.join('.');\n visitedPaths.push(currentPath);\n if (currentPath === 'nested1.nested2.string') {\n expect(in_nested).to.exist;\n expect(in_nested.__hidden).to.exist;\n expect(in_nested.__hidden.myCallback).to.exist;\n expect(in_nested.__hidden.myCallback()).to.eql('hello');\n expect(in_nested.__hidden.myValue).to.eql(1);\n }\n }, {\n rootOperation: 'modify',\n rootTypeid: 'NodeProperty',\n escapeLeadingDoubleUnderscore: true,\n });\n expect(visitedPaths).to.deep.equal(['', 'nested1', 'nested1.nested2', 'nested1.nested2.string',\n 'nested1.nested2.__doubleUnderscore', 'nestedArray', 'nestedArray.1']);\n });\n\n it('should work using maps', function() {\n var visitedPaths = [];\n Utils.getChangesToTokenizedPaths(new Map([\n ['String', new Map()],\n ['nested1', new Map([\n ['nested2', new Map([\n ['string', new Map([\n ['__hidden', new Map([\n ['myCallback', function() { return 'hello'; }],\n ['myValue', 1],\n ])],\n ])],\n ['___doubleUnderscore', new Map()], // Yes, there are 3 '_', as escapeLeadingDoubleUnderscore = true\n ])],\n ])],\n ['nestedArray', new Map([\n ['1', new Map([\n ['String', new Map()],\n ])],\n ])],\n ]), CS, function(in_context, in_nested, in_tokenizedPath) {\n var currentPath = in_tokenizedPath.join('.');\n visitedPaths.push(currentPath);\n if (currentPath === 'nested1.nested2.string') {\n expect(in_nested).to.exist;\n expect(in_nested).to.have.key('__hidden');\n expect(in_nested.get('__hidden')).to.have.all.keys('myCallback', 'myValue');\n expect(in_nested.get('__hidden').get('myCallback')()).to.eql('hello');\n expect(in_nested.get('__hidden').get('myValue')).to.eql(1);\n }\n }, {\n rootOperation: 'modify',\n rootTypeid: 'NodeProperty',\n escapeLeadingDoubleUnderscore: true,\n });\n expect(visitedPaths).to.deep.equal(['', 'nested1', 'nested1.nested2', 'nested1.nested2.string',\n 'nested1.nested2.__doubleUnderscore', 'nestedArray', 'nestedArray.1']);\n });\n\n it('should assume paths as literal when the escapeLeadingDoubleUnderscore flag is off ', function() {\n var visitedPaths = [];\n Utils.getChangesToTokenizedPaths({\n 'nested1': {\n 'nested2': {\n '__doubleUnderscore': {}, // The amount of underscores is the same as in the changeSet\n },\n },\n }, CS, function(in_context, in_nested, in_tokenizedPath) {\n visitedPaths.push(in_tokenizedPath.join('.'));\n }, {\n rootOperation: 'modify',\n rootTypeid: 'NodeProperty',\n escapeLeadingDoubleUnderscore: false,\n });\n expect(visitedPaths).to.deep.equal(['', 'nested1', 'nested1.nested2', 'nested1.nested2.__doubleUnderscore']);\n });\n });\n\n /* describe('Utils.insertPropertyChangeIntoChangeset', function() {\n var checkPropertyForModifications = function(in_property, in_arrayTests) {\n // Prepare the check by appending a float Property\n var floatProperty = PropertyFactory.create('Float64', undefined, 10);\n in_property.insert('float', floatProperty);\n var rootProperty = in_property.getRoot();\n rootProperty.cleanDirty();\n\n var expectedTarget = in_arrayTests ?\n {insert: {Float64: {'float': 10}}, typeid: 'NodeProperty'} :\n {insert: {Float64: {'float': 10}}};\n\n // Check that creating a new insert operation works\n var emptyChangeSet = {};\n if (!in_arrayTests) {\n var result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n emptyChangeSet, true);\n expect(result.propertyChangeSet).to.exist;\n expect(result.insert).to.be.true;\n result.propertyChangeSet.insert = {Float64: {'float': 10}};\n expect(emptyChangeSet).to.deep.equal(rootProperty._serialize(false));\n }\n\n // Check that inserting into a full serialization is a NOP\n var serializedChangeSet = rootProperty._serialize(false);\n var result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, true);\n expect(result.propertyChangeSet).to.exist;\n expect(result.propertyChangeSet).to.deep.equal(expectedTarget);\n expect(result.insert).to.be.true;\n expect(serializedChangeSet).to.deep.equal(rootProperty._serialize(false));\n\n // Check that a modify becomes an insert\n serializedChangeSet = rootProperty._serialize(false);\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.propertyChangeSet).to.exist;\n expect(result.propertyChangeSet).to.deep.equal(expectedTarget);\n expect(result.insert).to.be.true;\n expect(serializedChangeSet).to.deep.equal(rootProperty._serialize(false));\n\n // Modify the property to have a baseline to compare to\n floatProperty.value = 15;\n expectedTarget = in_arrayTests ?\n {modify: {Float64: {'float': 15}}, typeid: 'NodeProperty'} :\n {modify: {Float64: {'float': 15}}};\n\n // Check that creating a new modify operation works\n emptyChangeSet = {};\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n emptyChangeSet, false);\n expect(result.propertyChangeSet).to.exist;\n result.propertyChangeSet.modify = {Float64: {'float': 15}};\n expect(result.insert).to.be.false;\n expect(emptyChangeSet).to.deep.equal(rootProperty._serialize(true));\n\n // Check that retrieving an existing modify operation is possible\n serializedChangeSet = rootProperty._serialize(true);\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.propertyChangeSet).to.exist;\n expect(result.propertyChangeSet).to.deep.equal(expectedTarget);\n expect(result.insert).to.be.false;\n expect(serializedChangeSet).to.deep.equal(rootProperty._serialize(true));\n\n // Check that deleting properties returns the correct result\n var currentProperty = floatProperty.getParent();\n while (currentProperty && currentProperty.getParent()) {\n var parent = currentProperty.getParent();\n if (parent instanceof NodeProperty &&\n parent._getDynamicChildrenReadOnly()[currentProperty.getId()]) {\n rootProperty.cleanDirty();\n parent.remove(currentProperty.getId());\n serializedChangeSet = rootProperty._serialize(true);\n\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.remove).to.be.true;\n\n parent.insert(currentProperty.getId(), currentProperty);\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.remove).to.be.true;\n }\n currentProperty = currentProperty.getParent();\n }\n };\n\n it('should work for nested NodeProperties', function() {\n var root = PropertyFactory.create('NodeProperty');\n var child1 = PropertyFactory.create('NodeProperty');\n root.insert('child', child1);\n var child2 = PropertyFactory.create('NodeProperty');\n child1.insert('child', child2);\n\n checkPropertyForModifications(child2, false);\n });\n\n it('should work for NodeProperties in a template', function() {\n var root = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('autodesk.test:staticNodeChild-1.0.0');\n root.insert('child', child);\n\n checkPropertyForModifications(child.get('nodeProperty'), false);\n });\n\n it('should work for NodeProperties in a map', function() {\n var root = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('NodeProperty', 'map');\n root.insert('map', child);\n child.insert('entry', PropertyFactory.create('NodeProperty'));\n\n checkPropertyForModifications(child.get('entry'), false);\n });\n\n it('should work for NodeProperties in an array', function() {\n var root = PropertyFactory.create('NodeProperty');\n var arrayProp = PropertyFactory.create('NodeProperty', 'array');\n root.insert('array', arrayProp);\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n\n checkPropertyForModifications(arrayProp.get(0), true);\n });\n\n it('should work for NodeProperties in an array with complex modifications', function() {\n var root = PropertyFactory.create('NodeProperty');\n var arrayProp = PropertyFactory.create('NodeProperty', 'array');\n root.insert('array', arrayProp);\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n var floatProperty = PropertyFactory.create('Float64', undefined, 10);\n arrayProp.get(3).insert('float', floatProperty);\n root.cleanDirty();\n\n // Create a complex modification set\n floatProperty.value = 15;\n arrayProp.removeRange(0, 2);\n arrayProp.insertRange(0, [PropertyFactory.create('NodeProperty')]);\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n var serializedChangeSet = root.serialize({'dirtyOnly': true});\n var expectedChangeset = floatProperty.getParent().serialize({'dirtyOnly': true, 'includeRootTypeid': true});\n\n var result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), root,\n serializedChangeSet, false);\n expect(result.propertyChangeSet).to.deep.equal(expectedChangeset);\n expect(result.insert).to.be.false;\n });\n }); */\n\n describe('Utils.getFilteredChangeSetByPaths', function() {\n var changeSet = {\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n 'array<>': {\n 'nestedArray': {\n 'insert': [\n [\n 0,\n [\n {\n 'typeid': 'NodeProperty',\n },\n {\n 'typeid': 'NodeProperty',\n 'insert': {\n 'String': {\n 'text': '',\n },\n },\n },\n ],\n ],\n ],\n },\n },\n 'map<>': {\n 'trulyNestedMap': {\n 'insert': {\n 'String': {\n 'key1': 'The value is 1',\n },\n },\n },\n },\n },\n },\n 'nested3': {},\n },\n 'map<>': {\n 'nestedMap': {\n 'insert': {\n 'String': {\n 'nestedMapString': 'Sirius',\n },\n 'Bool': {\n 'nestedMapBoolean': true,\n },\n },\n },\n },\n 'map<mysample:asset-1.0.0>': {\n 'assetMap': {\n 'insert': {\n 'mysample:asset-1.0.0': {\n '1': {\n 'String': {\n 'name': 'test asset 1',\n },\n 'NodeProperty': {\n 'components': {\n },\n },\n },\n },\n },\n },\n },\n 'Reference<String>': {\n 'refProp': '/test.prop',\n },\n 'RepositoryReferenceProperty': {\n 'refRepoProp': {\n 'Bool': {\n 'followBranch': false,\n },\n 'String': {\n 'branchGUID': '846fe4a1-e595-44bf-8cc0-f1d8f6d104a6',\n 'commitGUID': '4c611c89-8241-4764-958e-77470bba3b9b',\n 'repositoryGUID': 'f438bed5-d8f2-4c70-a7e0-aa52b8929d2a',\n },\n },\n },\n 'NamedProperty': {\n 'namedProp': {\n 'String': {\n 'guid': 'e763527c-7f49-417c-8df3-9fb7f90a1932',\n },\n },\n },\n 'NamedNodeProperty': {\n 'namedNodeProp': {\n 'String': {\n 'guid': 'efc68477-53b1-49ac-bd3f-e05a21f85a32',\n },\n 'insert': {\n 'enum<autodesk.core:UnitsEnum-1.0.0>': {\n 'enumProp': 0,\n },\n 'String': {\n 'test': 'blah',\n },\n },\n },\n },\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'b': 'hello',\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n 'String': {\n 'emptyString': '',\n },\n },\n 'modify': {\n 'NodeProperty': {\n 'nested4': {\n 'insert': {\n 'Uint32': {\n 'number': 4,\n },\n },\n 'remove': ['nested5', 'nested6'],\n },\n },\n 'array<Float32>': {\n 'nestedArray2': {\n 'modify': [[0, [0.707, 0.707, 0], [0, 0, 1]]],\n },\n },\n },\n 'remove': [\n 'nested7',\n ],\n };\n\n it('should filter change sets by paths resolving to all types (NodeProperty, array, map, set, NamedNodeProperty, Reference, Primitive types)', function() {\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested1', 'nested4.nested5', 'nested4.number']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n 'array<>': {\n 'nestedArray': {\n 'insert': [\n [\n 0,\n [\n {\n 'typeid': 'NodeProperty',\n },\n {\n 'typeid': 'NodeProperty',\n 'insert': {\n 'String': {\n 'text': '',\n },\n },\n },\n ],\n ],\n ],\n },\n },\n 'map<>': {\n 'trulyNestedMap': {\n 'insert': {\n 'String': {\n 'key1': 'The value is 1',\n },\n },\n },\n },\n },\n },\n },\n },\n 'modify': {\n 'NodeProperty': {\n 'nested4': {\n 'remove': ['nested5'],\n 'insert': {\n 'Uint32': {\n 'number': 4,\n },\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested7', 'nested4', 'nested1.nested2']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n },\n },\n },\n },\n 'modify': {\n 'NodeProperty': {\n 'nested4': {\n 'insert': {\n 'Uint32': {\n 'number': 4,\n },\n },\n 'remove': ['nested5', 'nested6'],\n },\n },\n },\n 'remove': [\n 'nested7',\n ],\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested1.nestedArray', 'nestedMap.nestedMapBoolean', 'nestedArray2']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'array<>': {\n 'nestedArray': {\n 'insert': [\n [\n 0,\n [\n {\n 'typeid': 'NodeProperty',\n },\n {\n 'typeid': 'NodeProperty',\n 'insert': {\n 'String': {\n 'text': '',\n },\n },\n },\n ],\n ],\n ],\n },\n },\n },\n },\n },\n 'map<>': {\n 'nestedMap': {\n 'insert': {\n 'Bool': {\n 'nestedMapBoolean': true,\n },\n },\n },\n },\n },\n 'modify': {\n 'array<Float32>': {\n 'nestedArray2': {\n 'modify': [[0, [0.707, 0.707, 0], [0, 0, 1]]],\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['namedProp.guid', 'namedNodeProp.enumProp', 'namedNodeProp.guid']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NamedProperty': {\n 'namedProp': {\n 'String': {\n 'guid': 'e763527c-7f49-417c-8df3-9fb7f90a1932',\n },\n },\n },\n 'NamedNodeProperty': {\n 'namedNodeProp': {\n 'String': {\n 'guid': 'efc68477-53b1-49ac-bd3f-e05a21f85a32',\n },\n 'insert': {\n 'enum<autodesk.core:UnitsEnum-1.0.0>': {\n 'enumProp': 0,\n },\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.a', 'customTemplate.nested.c.d.e', 'customTemplate.nestedSet']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'nested.c.d.e': 'world',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, new Map([[\n 'customTemplate', new Map(\n [\n ['a', new Map()],\n ['nested', new Map([[\n 'c', new Map([[\n 'd', new Map([[\n 'e', new Map(),\n ]]),\n ]]),\n ]])],\n ['nestedSet', new Map()],\n ],\n ),\n ]]));\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'nested.c.d.e': 'world',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nested.c']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'String': {\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n },\n },\n },\n });\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nested.c.d']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'String': {\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['refProp', 'refRepoProp.commitGUID', 'refRepoProp.followBranch']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'Reference<String>': {\n 'refProp': '/test.prop',\n },\n 'RepositoryReferenceProperty': {\n 'refRepoProp': {\n 'Bool': {\n 'followBranch': false,\n },\n 'String': {\n 'commitGUID': '4c611c89-8241-4764-958e-77470bba3b9b',\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['assetMap[1].name']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'map<mysample:asset-1.0.0>': {\n 'assetMap': {\n 'insert': {\n 'mysample:asset-1.0.0': {\n '1': {\n 'String': {\n 'name': 'test asset 1',\n },\n },\n },\n },\n },\n },\n },\n });\n\n // For maps, using dots as separators, instead of brackets, is also supported.\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['assetMap.1.name']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'map<mysample:asset-1.0.0>': {\n 'assetMap': {\n 'insert': {\n 'mysample:asset-1.0.0': {\n '1': {\n 'String': {\n 'name': 'test asset 1',\n },\n },\n },\n },\n },\n },\n },\n });\n });\n\n it('should ignore overlapping paths', function() {\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate', 'customTemplate.a', 'customTemplate.nested.c.d.e', 'customTemplate.nestedSet']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'b': 'hello',\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nestedSet[91a59cb6-9881-2b5f-2366-84dbdc8b6838].guid']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n // Flip order\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.a', 'customTemplate.nested.c.d.e', 'customTemplate', 'customTemplate.nestedSet']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'b': 'hello',\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n // Duplicate paths\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.a', 'customTemplate', 'customTemplate.nested.c.d.e', 'customTemplate', 'customTemplate.nestedSet']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'b': 'hello',\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['emptyString']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'String': {\n 'emptyString': '',\n },\n },\n });\n });\n\n it('should return an empty change set when filtering by a path that does not exist', function() {\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['path.that.does.not.exist', 'dontExist', 'does.not.exist']);\n\n expect(filteredCS).to.be.eql({});\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested7', 'nested4', 'nested1.nested2', 'path.that.does.not.exist', 'dontExist', 'does.not.exist']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n },\n },\n },\n },\n 'modify': {\n 'NodeProperty': {\n 'nested4': {\n 'insert': {\n 'Uint32': {\n 'number': 4,\n },\n },\n 'remove': ['nested5', 'nested6'],\n },\n },\n },\n 'remove': [\n 'nested7',\n ],\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested1.nested2', 'nested1.nested6']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n // Partially matched paths are included\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['assetMap[2]']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'map<mysample:asset-1.0.0>': {\n 'assetMap': {\n },\n },\n },\n });\n\n // Closest partially matched path 'customTemplate.nested.c.d' cannot be included\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nested.c.d.g']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n },\n },\n },\n });\n\n // Partial match should also work with nested properties\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested1.trulyNestedMap[newKey]']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'map<>': {\n 'trulyNestedMap': {\n },\n },\n },\n },\n },\n },\n });\n\n // Filter a nested non existing entry from a templated property\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nestedSet.nonExisting', 'customTemplate.a']);\n expect(filteredCS).to.eql({\n insert: {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n },\n },\n },\n },\n },\n });\n\n // Make sure, nested removes are treated correctly\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested7.abcd']);\n expect(filteredCS).to.eql({\n 'remove': ['nested7'],\n });\n });\n\n it('should fail filtering change sets with paths that resolve into arrays and sets', function() {\n var failedFilteredFunc = Utils.getFilteredChangeSetByPaths.bind(null, changeSet, ['nested1.nestedArray[0]']);\n\n expect(failedFilteredFunc).to.throw(Error, MSG.FILTER_PATH_WITHIN_ARRAY);\n\n // With valid paths\n failedFilteredFunc = Utils.getFilteredChangeSetByPaths.bind(null, changeSet, ['customTemplate', 'nested1.nestedArray[0]']);\n\n expect(failedFilteredFunc).to.throw(Error, MSG.FILTER_PATH_WITHIN_ARRAY);\n });\n\n it('should work for ChangeSet with segments requiring escapes for NodeProperties', function() {\n var node = PropertyFactory.create('NodeProperty');\n node.insert('.\"test\".', PropertyFactory.create('NodeProperty'));\n node.get('.\"test\".').insert('[abcd]', PropertyFactory.create('String', undefined, 'test'));\n\n var CS = node.serialize();\n var filteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\".\\\\\"test\\\\\".\".\"[abcd]\"']);\n expect(filteredCS).to.deep.equal(CS);\n\n node.cleanDirty();\n node.get('.\"test\".').get('[abcd]').setValue('test2');\n\n // Test a modification\n CS = node.serialize({ dirtyOnly: true });\n filteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\".\\\\\"test\\\\\".\".\"[abcd]\"']);\n expect(filteredCS).to.deep.equal(CS);\n\n // Test a removal\n node.cleanDirty();\n node.get('.\"test\".').remove('[abcd]');\n CS = node.serialize({ dirtyOnly: true });\n filteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\".\\\\\"test\\\\\".\"']);\n expect(filteredCS).to.deep.equal(CS);\n });\n\n it('should work for ChangeSet with segments requiring escapes in template', function() {\n var node = PropertyFactory.create('autodesk.tests:property.with.quotable.characters-1.0.0');\n node.cleanDirty();\n\n node.get(['test[property]', '.property.']).get('test').value = 'test';\n\n var CS = node.serialize({ dirtyOnly: true });\n var filteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\"test[property]\".\".property.\"']);\n expect(filteredCS).to.deep.equal(CS);\n });\n\n it('should work for reversible ChangeSet', function() {\n var originalChangeSet = {\n 'insert': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'F': { 'String': { 'stringProperty': '' } },\n },\n },\n 'remove': ['B', 'C'],\n 'modify': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'A': { 'String': { 'stringProperty': 'hello' } },\n },\n },\n };\n var parentChangeSet = {\n 'insert': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'A': { 'String': { 'stringProperty': '' } },\n 'B': { 'String': { 'stringProperty': '' } },\n 'C': { 'String': { 'stringProperty': '' } },\n },\n },\n };\n\n var cs = new ChangeSet(originalChangeSet);\n cs._toReversibleChangeSet(parentChangeSet);\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(cs.getSerializedChangeSet(), ['A', 'B', 'F']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'F': { 'String': { 'stringProperty': '' } },\n },\n },\n 'remove': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'B': { 'String': { 'stringProperty': '' } },\n },\n }, 'modify': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'A': {\n 'String': {\n 'stringProperty': {\n 'value': 'hello',\n 'oldValue': '',\n },\n },\n },\n },\n },\n });\n });\n });\n\n describe('Utils.getFilteredOutChangeSetByPaths', () => {\n const changeset = {\n 'insert': {\n 'map<NodeProperty>': {\n 'assets': {\n 'insert': {\n 'autodesk.test:sample-1.0.0': {\n 'Prop1': {\n 'String': {\n 'guid': 'Prop1',\n },\n },\n 'Prop2': {\n 'String': {\n 'guid': 'Prop2',\n },\n },\n 'Prop3': {\n 'String': {\n 'guid': 'Prop3',\n },\n },\n },\n },\n },\n },\n },\n };\n\n const singleExclusion = {\n 'insert': {\n 'map<NodeProperty>': {\n 'assets': {\n 'insert': {\n 'autodesk.test:sample-1.0.0': {\n 'Prop1': {\n 'String': {\n 'guid': 'Prop1',\n },\n },\n 'Prop2': {\n 'String': {\n 'guid': 'Prop2',\n },\n },\n },\n },\n },\n },\n },\n };\n\n const multiExclusion = {\n 'insert': {\n 'map<NodeProperty>': {\n 'assets': {\n 'insert': {\n 'autodesk.test:sample-1.0.0': {\n 'Prop1': {\n 'String': {\n 'guid': 'Prop1',\n },\n },\n },\n },\n },\n },\n },\n };\n\n it('should exclude single given path', () => {\n let res = Utils.excludePathsFromChangeSet(changeset, 'assets[Prop3]');\n expect(res).to.be.deep.equal(singleExclusion);\n });\n\n it('should exclude single given path in array', () => {\n let res = Utils.excludePathsFromChangeSet(changeset, ['assets[Prop3]']);\n expect(res).to.be.deep.equal(singleExclusion);\n });\n\n it('should exclude every given path in array', () => {\n let res = Utils.excludePathsFromChangeSet(changeset, ['assets[Prop3]', 'assets[Prop2]']);\n expect(res).to.be.deep.equal(multiExclusion);\n });\n\n it('should return undefined if no changeset is passed', () => {\n let res = Utils.excludePathsFromChangeSet(undefined, ['assets[Prop3]']);\n expect(res).to.be.undefined;\n });\n\n it('should not exclude if no paths are passed', () => {\n expect(Utils.excludePathsFromChangeSet(changeset)).to.be.deep.equal(changeset);\n expect(Utils.excludePathsFromChangeSet(changeset, '')).to.be.deep.equal(changeset);\n expect(Utils.excludePathsFromChangeSet(changeset, [])).to.be.deep.equal(changeset);\n });\n\n it('should not exclude if an invalid path is passed', () => {\n expect(Utils.excludePathsFromChangeSet(changeset, ['a.b.c'])).to.be.deep.equal(changeset);\n });\n\n it('should copy the changeset', () => {\n expect(Utils.excludePathsFromChangeSet(changeset, ['assets[prop3]'])).to.not.be.equal(changeset);\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../src/test/utils.spec.js"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n/* globals assert */\n/* eslint-disable no-unused-expressions */\n/* eslint-disable max-nested-callbacks */\n/* eslint-disable max-len */\n\n/**\n * @fileoverview In this file, we will test the utils\n * described in /src/utils.js\n */\n\nconst { ChangeSet } = require('@fluid-experimental/property-changeset');\nconst { Utils } = require('@fluid-experimental/property-changeset');\nconst { MSG } = require('@fluid-experimental/property-common').constants;\nconst _ = require('lodash');\nconst { PropertyFactory } = require('..');\nconst { BaseProperty } = require('..');\nconst { NodeProperty } = require('../properties/nodeProperty');\n\ndescribe('Utils', function() {\n before(function() {\n var TaskStatus = {\n // inherits : 'Enum',\n typeid: 'autodesk.test:utils.spec.task.status-1.0.0',\n /* values : {\n running : 'running',\n created : 'created',\n succeeded : 'succeeded',\n failed : 'failed',\n canceled : 'canceled'\n },\n default : 'created' */\n };\n\n // The subject property template to be tracked\n var TaskSubject = {\n inherits: ['NodeProperty'],\n typeid: 'autodesk.test:utils.spec.task.subject-1.0.0',\n properties: [\n // {id: 'status', typeid: 'autodesk.test:utils_spec_status-1.0.0'},\n { id: 'errorMsg', typeid: 'String' },\n // {id: 'result', typeid: 'BaseProperty'},\n { id: 'progress', typeid: 'Uint32', annotation: { min: 0, max: 100 } },\n // {id: 'timeRemaining' , typeid : 'autodesk.test:utils_spec_datedelta-1.0.0'}\n ],\n };\n\n // The observer tracking subject(s)\n var TaskObserver = {\n inherits: 'autodesk.test:utils.spec.task.subject-1.0.0',\n typeid: 'autodesk.test:utils.spec.task.observer-1.0.0',\n properties: [\n { id: 'name', typeid: 'String' },\n { id: 'creator', typeid: 'autodesk.test:utils.spec.user-1.0.0' },\n { id: 'subjects', typeid: 'autodesk.test:utils.spec.task.subjectentry-1.0.0', context: 'array' },\n { id: 'startTime', typeid: 'autodesk.test:utils.spec.date-1.0.0' },\n { id: 'endTime', typeid: 'autodesk.test:utils.spec.date-1.0.0' },\n ],\n };\n\n // Subject entries passed in to the 'subjects' field of the task observer\n var TaskSubjectEntries = {\n typeid: 'autodesk.test:utils.spec.task.subjectentry-1.0.0',\n properties: [\n { id: 'path', typeid: 'String' },\n ],\n };\n\n // Example usage of task subjects to be tracked\n var Sim = {\n inherits: ['NodeProperty'],\n typeid: 'autodesk.test:utils.spec.pan.sim-1.0.0',\n properties: [\n\n { id: 'costEstimated', typeid: 'autodesk.test:utils.spec.task.subject-1.0.0' },\n { id: 'costFinal', typeid: 'autodesk.test:utils.spec.task.subject-1.0.0' },\n\n // set by client to start or cancel the simulation\n { id: 'start', typeid: 'Bool', 'default': false },\n { id: 'cancel', typeid: 'Bool', 'default': false },\n\n // { id: 'inputs' , typeid: 'autodesk.test:utils_spec_pan.input-1.0.0' },\n\n { id: 'thermalResults', typeid: 'autodesk.test:utils.spec.task.subject-1.0.0' },\n { id: 'mechanicalResults', typeid: 'autodesk.test:utils.spec.task.subject-1.0.0' },\n ],\n };\n\n var nestedTemplate = {\n typeid: 'autodesk.tests:nestedTemplate-1.0.0',\n properties: [{\n id: 'a',\n typeid: 'String',\n }, {\n id: 'b',\n typeid: 'String',\n }, {\n id: 'c',\n properties: [{\n id: 'myNestedProp',\n typeid: 'autodesk.test:utils.spec.task.subject-1.0.0',\n }],\n }],\n };\n var QuoatablePropertyObject = {\n typeid: 'autodesk.tests:property.with.quotable.characters-1.0.0',\n properties: [{\n id: 'simple_property',\n typeid: 'String',\n }, {\n id: 'test.property',\n typeid: 'String',\n }, {\n id: 'test\"property\"',\n typeid: 'String',\n }, {\n id: 'test[property]',\n properties: [{\n id: '.property.',\n properties: [{\n id: 'test',\n typeid: 'String',\n }],\n }],\n }],\n };\n\n var ContainedTemplate = {\n typeid: 'autodesk.test:utilsTestContained-1.0.0',\n properties: [\n { id: 'error\"Msg\"', typeid: 'String' },\n ],\n };\n\n var StaticNodeChild = {\n typeid: 'autodesk.test:staticNodeChild-1.0.0',\n inherits: ['NodeProperty'],\n properties: [\n { id: 'nodeProperty', typeid: 'NodeProperty' },\n ],\n };\n\n var ParentTemplate = {\n typeid: 'autodesk.test:utilsTestParent-1.0.0',\n properties: [\n { id: 'errorMsg', typeid: 'String' },\n { id: 'progress', typeid: 'Uint32' },\n {\n id: 'nested', properties: [\n { id: 'en\"t\"ry', typeid: 'String' },\n ],\n },\n { id: 'contained', typeid: 'autodesk.test:utilsTestContained-1.0.0' },\n { id: 'containedMap', typeid: 'autodesk.test:utilsTestContained-1.0.0', context: 'map' },\n ],\n };\n\n PropertyFactory._reregister(TaskStatus);\n PropertyFactory._reregister(TaskSubject);\n PropertyFactory._reregister(TaskObserver);\n PropertyFactory._reregister(TaskSubjectEntries);\n PropertyFactory._reregister(Sim);\n PropertyFactory._reregister(nestedTemplate);\n PropertyFactory._reregister(QuoatablePropertyObject);\n PropertyFactory._reregister(ParentTemplate);\n PropertyFactory._reregister(ContainedTemplate);\n PropertyFactory._reregister(StaticNodeChild);\n });\n\n describe('Utils.traverseChangeSetRecursively', function() {\n var testRoot, contexts, namedNodePropForSet;\n it('should report correctly for inserts', function() {\n testRoot = PropertyFactory.create('NodeProperty');\n testRoot.insert('string', PropertyFactory.create('String'));\n testRoot.insert('test\"Templated\"Property',\n PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0'));\n testRoot.resolvePath('\"test\\\\\"Templated\\\\\"Property\".containedMap').insert('entry',\n PropertyFactory.create('autodesk.test:utilsTestContained-1.0.0'));\n testRoot.insert('reference', PropertyFactory.create('Reference<String>'));\n\n // Test an array with a primitive\n testRoot.insert('floatArray', PropertyFactory.create('Float32', 'array'));\n testRoot._properties.floatArray.insertRange(0, [1, 2, 3, 4, 5]);\n\n // Test an array with a complex type\n testRoot.insert('array', PropertyFactory.create('array<>'));\n var arrayNode = PropertyFactory.create('NodeProperty');\n testRoot._properties.array.push(arrayNode);\n arrayNode.insert('string', PropertyFactory.create('String'));\n\n // Test a map with a primitive\n testRoot.insert('floatMap', PropertyFactory.create('Float32', 'map'));\n testRoot._properties.floatMap.insert('test', 1);\n testRoot._properties.floatMap.insert('test2', 2);\n testRoot._properties.floatMap.insert('test3', 3);\n\n // Test a map with complex types\n testRoot.insert('map', PropertyFactory.create('map<>'));\n\n // add members\n // Simple string\n testRoot._properties.map.insert('string',\n PropertyFactory.create('String'));\n\n // String with name that has to be escaped\n testRoot._properties.map.insert('s\"tr\"ing',\n PropertyFactory.create('String'));\n\n // A map in a map\n testRoot._properties.map.insert('map',\n PropertyFactory.create('map<>'));\n testRoot._properties.map.get('map').insert('string',\n PropertyFactory.create('String'));\n\n // An array in a map\n testRoot._properties.map.insert('array',\n PropertyFactory.create('array<>'));\n testRoot._properties.map.get('array').insert(0,\n PropertyFactory.create('NodeProperty'));\n testRoot._properties.map.get('array').get(0).insert('string',\n PropertyFactory.create('String'));\n\n // A composed property\n testRoot._properties.map.insert('testParent',\n PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0'));\n\n // A NodeProperty\n testRoot._properties.map.insert('nodeProperty',\n PropertyFactory.create('NodeProperty'));\n testRoot._properties.map.get('nodeProperty').insert('string',\n PropertyFactory.create('String'));\n\n // Test a set property\n testRoot.insert('set', PropertyFactory.create('set<>'));\n namedNodePropForSet = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.set.insert(namedNodePropForSet);\n namedNodePropForSet.insert('string',\n PropertyFactory.create('String'));\n\n contexts = [];\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': false }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath() + '*');\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context._fullPath !== '') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n contexts.push(in_context.clone());\n },\n });\n expect(contexts.length).to.equal(38);\n });\n\n it('should work for modifications of primitive types', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var modifiedStringCount = 0;\n for (var i = 0; i < contexts.length; i++) {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n\n // modify strings\n if (contexts[i].getTypeid() === 'String' &&\n modifyNode.getId() !== 'guid') {\n modifyNode.setValue('modified');\n modifiedStringCount++;\n }\n\n // modify float arrays\n if (contexts[i].getTypeid() === 'array<Float32>') {\n modifyNode.push(15);\n }\n }\n\n // modify a float map\n // note: set removed, setValue not implemented yet\n testRoot._properties.floatMap.set('test', 5);\n testRoot._properties.floatMap.set('new_test', 7);\n\n var reportedStringModifiedCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n expect(in_context.getOperationType()).to.equal('modify');\n\n if (node.getTypeid() === 'String') {\n reportedStringModifiedCount++;\n expect(in_context.getNestedChangeSet()).to.equal('modified');\n }\n\n if (in_context.getTypeid() === 'array<Float32>') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: [[5, [15]]],\n });\n }\n\n if (in_context.getTypeid() === 'map<Float32>') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: {\n new_test: 7,\n },\n modify: {\n test: 5,\n },\n });\n }\n },\n });\n\n // Make sure all modified strings have been reported\n expect(reportedStringModifiedCount).to.equal(modifiedStringCount);\n });\n\n it('should work for inserts in strings', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n for (var i = 0; i < contexts.length; i++) {\n if (contexts[i].getTypeid() === 'String') {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n if (modifyNode.getId() !== 'guid') {\n modifyNode.insert(3, '_inserted_');\n }\n }\n }\n\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n expect(in_context.getOperationType()).to.equal('modify');\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: [[3, '_inserted_']],\n });\n }\n },\n });\n });\n\n it('should work for inserts in arrays', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var newArrayNode = PropertyFactory.create('NodeProperty');\n testRoot._properties.array.push(newArrayNode);\n newArrayNode.insert('string', PropertyFactory.create('String'));\n newArrayNode._properties.string.value = 'test';\n\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context.getFullPath() !== '' &&\n in_context.getFullPath() !== 'array') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.equal('test');\n }\n },\n });\n });\n\n it('should work for inserts in sets', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var newSetNode = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.set.insert(newSetNode);\n newSetNode.insert('string', PropertyFactory.create('String'));\n newSetNode._properties.string.setValue('test');\n\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context.getFullPath() !== '' &&\n in_context.getFullPath() !== 'set') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.equal(node.value);\n }\n },\n });\n });\n\n it('should work for node property removals', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var removedStrings = [];\n for (var i = 0; i < contexts.length; i++) {\n if (contexts[i].getTypeid() === 'NodeProperty') {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n removedStrings.push(modifyNode._properties.string.getAbsolutePath());\n\n modifyNode.remove('string');\n }\n }\n\n var actualStringRemoveCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n var node = testRoot.resolvePath(in_context.getFullPath());\n if (node) {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n expect(removedStrings.indexOf('/' + in_context.getFullPath())).to.not.equal(-1);\n actualStringRemoveCount++;\n }\n },\n });\n expect(removedStrings.length).to.equal(actualStringRemoveCount);\n });\n\n it('should work for array removals', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.array.removeRange(0, 2);\n var arrayRemovalCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'array') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n arrayRemovalCount++;\n }\n },\n });\n expect(arrayRemovalCount).to.equal(2);\n });\n\n it('should work for map removals', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.map.remove('string');\n var mapRemovalCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'map') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n mapRemovalCount++;\n }\n },\n });\n expect(mapRemovalCount).to.equal(1);\n });\n\n it('should work for set removals', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.set.remove(namedNodePropForSet);\n\n var setRemovalCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'set') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n setRemovalCount++;\n }\n },\n });\n expect(setRemovalCount).to.equal(1);\n });\n\n it('should clone the context correctly', function() {\n testRoot.insert('setClone', PropertyFactory.create('set<>'));\n var namedNodePropForSet1 = PropertyFactory.create('NamedNodeProperty');\n var namedNodePropForSet2 = PropertyFactory.create('NamedNodeProperty');\n var namedNodePropForSet3 = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.setClone.insert(namedNodePropForSet1);\n testRoot._properties.setClone.insert(namedNodePropForSet2);\n testRoot._properties.setClone.insert(namedNodePropForSet3);\n namedNodePropForSet1.insert('string1', PropertyFactory.create('String'));\n namedNodePropForSet2.insert('string2', PropertyFactory.create('String'));\n namedNodePropForSet3.insert('string3', PropertyFactory.create('String'));\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.setClone.remove(namedNodePropForSet1);\n testRoot._properties.setClone.remove(namedNodePropForSet2);\n testRoot._properties.setClone.remove(namedNodePropForSet3);\n\n var setRemovalCount = 0;\n var contextCloneCount = 0;\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'setClone') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n setRemovalCount++;\n }\n var cloneContext = in_context.clone();\n expect(cloneContext).to.deep.equal(in_context);\n contextCloneCount++;\n },\n });\n expect(setRemovalCount).to.equal(3);\n expect(contextCloneCount >= 3).to.be.true; // we should clone at least 3 times (probably more)\n });\n\n it('@regression should work when replacing a map element', function() {\n // Clean the old modifications\n testRoot.cleanDirty();\n testRoot._properties.map.set('nodeProperty', PropertyFactory.create('NamedNodeProperty'));\n var operationtypes = [];\n Utils.traverseChangeSetRecursively(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context) {\n // expect operations to be 'remove' and 'insert'\n if (in_context.getFullPath() === 'map[nodeProperty]') {\n operationtypes.push(in_context.getOperationType());\n }\n },\n });\n expect(operationtypes).to.deep.equal(['remove', 'insert']);\n });\n });\n\n describe('Utils.traverseChangeSetRecursivelyAsync', function() {\n var testRoot, contexts, namedNodePropForSet;\n it('should report correctly for inserts', function(done) {\n testRoot = PropertyFactory.create('NodeProperty');\n testRoot.insert('string', PropertyFactory.create('String'));\n testRoot.insert('test\"Templated\"Property',\n PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0'));\n testRoot.resolvePath('\"test\\\\\"Templated\\\\\"Property\".containedMap').insert('entry',\n PropertyFactory.create('autodesk.test:utilsTestContained-1.0.0'));\n testRoot.insert('reference', PropertyFactory.create('Reference<String>'));\n\n // Test an array with a primitive\n testRoot.insert('floatArray', PropertyFactory.create('Float32', 'array'));\n testRoot._properties.floatArray.insertRange(0, [1, 2, 3, 4, 5]);\n\n // Test an array with a complex type\n testRoot.insert('array', PropertyFactory.create('array<>'));\n var arrayNode = PropertyFactory.create('NodeProperty');\n testRoot._properties.array.push(arrayNode);\n arrayNode.insert('string', PropertyFactory.create('String'));\n\n // Test a map with a primitive\n testRoot.insert('floatMap', PropertyFactory.create('Float32', 'map'));\n testRoot._properties.floatMap.insert('test', 1);\n testRoot._properties.floatMap.insert('test2', 2);\n testRoot._properties.floatMap.insert('test3', 3);\n\n // Test a map with complex types\n testRoot.insert('map', PropertyFactory.create('map<>'));\n\n // add members\n // Simple string\n testRoot._properties.map.insert('string',\n PropertyFactory.create('String'));\n\n // String with name that has to be escaped\n testRoot._properties.map.insert('s\"tr\"ing',\n PropertyFactory.create('String'));\n\n // A map in a map\n testRoot._properties.map.insert('map',\n PropertyFactory.create('map<>'));\n testRoot._properties.map.get('map').insert('string',\n PropertyFactory.create('String'));\n\n // An array in a map\n testRoot._properties.map.insert('array',\n PropertyFactory.create('array<>'));\n testRoot._properties.map.get('array').insert(0,\n PropertyFactory.create('NodeProperty'));\n testRoot._properties.map.get('array').get(0).insert('string',\n PropertyFactory.create('String'));\n\n // A composed property\n testRoot._properties.map.insert('testParent',\n PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0'));\n\n // A NodeProperty\n testRoot._properties.map.insert('nodeProperty',\n PropertyFactory.create('NodeProperty'));\n testRoot._properties.map.get('nodeProperty').insert('string',\n PropertyFactory.create('String'));\n\n // Test a set property\n testRoot.insert('set', PropertyFactory.create('set<>'));\n namedNodePropForSet = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.set.insert(namedNodePropForSet);\n namedNodePropForSet.insert('string',\n PropertyFactory.create('String'));\n\n contexts = [];\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': false }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath() + '*');\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context._fullPath !== '') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n contexts.push(in_context.clone());\n setImmediate(cb);\n },\n }, function() {\n expect(contexts.length).to.equal(38);\n done();\n });\n });\n\n it('should work for modifications of primitive types', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var modifiedStringCount = 0;\n for (var i = 0; i < contexts.length; i++) {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n\n // modify strings\n if (contexts[i].getTypeid() === 'String' &&\n modifyNode.getId() !== 'guid') {\n modifyNode.setValue('modified');\n modifiedStringCount++;\n }\n\n // modify float arrays\n if (contexts[i].getTypeid() === 'array<Float32>') {\n modifyNode.push(15);\n }\n }\n\n // modify a float map\n // note: set removed, setValue not implemented yet\n testRoot._properties.floatMap.set('test', 5);\n testRoot._properties.floatMap.set('new_test', 7);\n\n var reportedStringModifiedCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n expect(in_context.getOperationType()).to.equal('modify');\n\n if (node.getTypeid() === 'String') {\n reportedStringModifiedCount++;\n expect(in_context.getNestedChangeSet()).to.equal('modified');\n }\n\n if (in_context.getTypeid() === 'array<Float32>') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: [[5, [15]]],\n });\n }\n\n if (in_context.getTypeid() === 'map<Float32>') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: {\n new_test: 7,\n },\n modify: {\n test: 5,\n },\n });\n }\n setImmediate(cb);\n },\n }, function() {\n // Make sure all modified strings have been reported\n expect(reportedStringModifiedCount).to.equal(modifiedStringCount);\n done();\n });\n });\n\n it('should work for inserts in strings', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n for (var i = 0; i < contexts.length; i++) {\n if (contexts[i].getTypeid() === 'String') {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n if (modifyNode.getId() !== 'guid') {\n modifyNode.insert(3, '_inserted_');\n }\n }\n }\n\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n expect(in_context.getOperationType()).to.equal('modify');\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.deep.equal({\n insert: [[3, '_inserted_']],\n });\n }\n setImmediate(cb);\n },\n }, function() {\n done();\n });\n });\n\n it('should work for inserts in arrays', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var newArrayNode = PropertyFactory.create('NodeProperty');\n testRoot._properties.array.push(newArrayNode);\n newArrayNode.insert('string', PropertyFactory.create('String'));\n newArrayNode._properties.string.value = 'test';\n\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context.getFullPath() !== '' &&\n in_context.getFullPath() !== 'array') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.equal('test');\n }\n setImmediate(cb);\n },\n }, function() {\n done();\n });\n });\n\n it('should work for inserts in sets', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var newSetNode = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.set.insert(newSetNode);\n newSetNode.insert('string', PropertyFactory.create('String'));\n newSetNode._properties.string.setValue('test');\n\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n // Do some basic sanity checks\n var node = testRoot.resolvePath(in_context.getFullPath());\n expect(node).to.be.instanceof(BaseProperty);\n expect(node.getTypeid()).to.equal(in_context._splitTypeId.typeid);\n\n if (in_context.getFullPath() !== '' &&\n in_context.getFullPath() !== 'set') {\n expect(in_context.getOperationType()).to.equal('insert');\n } else {\n expect(in_context.getOperationType()).to.equal('modify');\n }\n\n if (node.getTypeid() === 'String') {\n expect(in_context.getNestedChangeSet()).to.equal(node.value);\n }\n setImmediate(cb);\n },\n }, done);\n });\n\n it('should work for node property removals', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n var removedStrings = [];\n for (var i = 0; i < contexts.length; i++) {\n if (contexts[i].getTypeid() === 'NodeProperty') {\n var modifyNode = testRoot.resolvePath(contexts[i].getFullPath());\n removedStrings.push(modifyNode._properties.string.getAbsolutePath());\n\n modifyNode.remove('string');\n }\n }\n\n var actualStringRemoveCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n var node = testRoot.resolvePath(in_context.getFullPath());\n if (node) {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n expect(removedStrings.indexOf('/' + in_context.getFullPath())).to.not.equal(-1);\n actualStringRemoveCount++;\n }\n setImmediate(cb);\n },\n }, function() {\n expect(removedStrings.length).to.equal(actualStringRemoveCount);\n done();\n });\n });\n\n it('should work for array removals', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.array.removeRange(0, 2);\n var arrayRemovalCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'array') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n arrayRemovalCount++;\n }\n setImmediate(cb);\n },\n }, function() {\n expect(arrayRemovalCount).to.equal(2);\n done();\n });\n });\n\n it('should work for map removals', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.map.remove('string');\n var mapRemovalCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'map') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n mapRemovalCount++;\n }\n setImmediate(cb);\n },\n }, function() {\n expect(mapRemovalCount).to.equal(1);\n done();\n });\n });\n\n it('should work for set removals', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.set.remove(namedNodePropForSet);\n\n var setRemovalCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'set') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n setRemovalCount++;\n }\n setImmediate(cb);\n },\n }, function() {\n expect(setRemovalCount).to.equal(1);\n done();\n });\n });\n\n it('should clone the context correctly', function(done) {\n testRoot.insert('setClone', PropertyFactory.create('set<>'));\n var namedNodePropForSet1 = PropertyFactory.create('NamedNodeProperty');\n var namedNodePropForSet2 = PropertyFactory.create('NamedNodeProperty');\n var namedNodePropForSet3 = PropertyFactory.create('NamedNodeProperty');\n testRoot._properties.setClone.insert(namedNodePropForSet1);\n testRoot._properties.setClone.insert(namedNodePropForSet2);\n testRoot._properties.setClone.insert(namedNodePropForSet3);\n namedNodePropForSet1.insert('string1', PropertyFactory.create('String'));\n namedNodePropForSet2.insert('string2', PropertyFactory.create('String'));\n namedNodePropForSet3.insert('string3', PropertyFactory.create('String'));\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.setClone.remove(namedNodePropForSet1);\n testRoot._properties.setClone.remove(namedNodePropForSet2);\n testRoot._properties.setClone.remove(namedNodePropForSet3);\n\n var setRemovalCount = 0;\n var contextCloneCount = 0;\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === '' ||\n in_context.getFullPath() === 'setClone') {\n expect(in_context.getOperationType()).to.equal('modify');\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n setRemovalCount++;\n }\n var cloneContext = in_context.clone();\n expect(cloneContext).to.deep.equal(in_context);\n contextCloneCount++;\n setImmediate(cb);\n },\n }, function() {\n expect(setRemovalCount).to.equal(3);\n expect(contextCloneCount >= 3).to.be.true; // we should clone at least 3 times (probably more)\n done();\n });\n });\n\n it('@regression should work for mixed modifications and removals', function(done) {\n // This test uses its own property sets tree\n var ownRoot = PropertyFactory.create('NodeProperty');\n var userInfo = PropertyFactory.create('NodeProperty');\n userInfo.insert('name', PropertyFactory.create('String', 'single', 'John Doe'));\n userInfo.insert('isResident', PropertyFactory.create('Bool', 'single', true));\n ownRoot.insert('userInfo', userInfo);\n var numberOfResidents = PropertyFactory.create('Int32', 'single', 1);\n ownRoot.insert('numberOfResidents', numberOfResidents);\n\n ownRoot.cleanDirty();\n\n ownRoot.get(['userInfo', 'name']).setValue('Johnny B. Goode');\n ownRoot.get('userInfo').remove('isResident');\n ownRoot.get('numberOfResidents').setValue(0);\n\n var modifiedCount = 0;\n var serializedCS = ownRoot.serialize({ 'dirtyOnly': true });\n Utils.traverseChangeSetRecursivelyAsync(serializedCS, {\n preCallback: function(in_context, cb) {\n var node = ownRoot.resolvePath(in_context.getFullPath());\n if (node) {\n expect(in_context.getOperationType()).to.equal('modify');\n if (in_context.getLastSegment() === 'name' ||\n in_context.getLastSegment() === 'numberOfResidents') {\n modifiedCount++;\n }\n } else {\n expect(in_context.getOperationType()).to.equal('remove');\n expect(in_context.getLastSegment()).to.equal('isResident');\n }\n setImmediate(cb);\n },\n }, function() {\n expect(modifiedCount).to.equal(2);\n done();\n });\n });\n\n it('@regression should work when replacing a map element', function(done) {\n // Clean the old modifications\n testRoot.cleanDirty();\n\n testRoot._properties.map.set('testParent', PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0',\n 'single', { errorMsg: 'another element', progress: 99 }));\n\n var operations = [];\n Utils.traverseChangeSetRecursivelyAsync(testRoot.serialize({ 'dirtyOnly': true }), {\n preCallback: function(in_context, cb) {\n if (in_context.getFullPath() === 'map[testParent]') {\n operations.push(in_context.getOperationType());\n } else if (in_context.getFullPath() === 'map[testParent].errorMsg') {\n expect(in_context.getNestedChangeSet() === 'another element');\n } else if (in_context.getFullPath() === 'map[testParent].progress') {\n expect(in_context.getNestedChangeSet() === 99);\n }\n setImmediate(cb);\n },\n }, function() {\n expect(operations).to.deep.equal(['remove', 'insert']);\n done();\n });\n });\n });\n\n describe('Utils.enumerateSchemas', function() {\n var serializedChangeSet = {\n 'insertTemplates': {\n 'autodesk.tests:property.set.SimpleNamedPoint-1.0.0': {\n typeid: 'autodesk.tests:property.set.SimpleNamedPoint-1.0.0',\n inherits: 'NamedProperty',\n properties: [\n { id: 'x', typeid: 'Uint32' },\n { id: 'y', typeid: 'Uint32' },\n ],\n },\n 'autodesk.tests:property.set.SimpleNamedPoint-1.2.0': {\n typeid: 'autodesk.tests:property.set.SimpleNamedPoint-1.0.0',\n inherits: 'NamedProperty',\n properties: [\n { id: 'x', typeid: 'Uint64' },\n { id: 'y', typeid: 'Uint64' },\n ],\n },\n },\n };\n\n it('should return the schemas, and then call the finalizer', function(done) {\n var countedTemplates = 0;\n Utils.enumerateSchemas(serializedChangeSet, function(t, cb) {\n countedTemplates++;\n if (t.key === 'autodesk.tests:property.set.SimpleNamedPoint-1.0.0') {\n expect(t.value).to.eql(serializedChangeSet.insertTemplates['autodesk.tests:property.set.SimpleNamedPoint-1.0.0']);\n }\n if (t.key === 'autodesk.tests:property.set.SimpleNamedPoint-1.2.0') {\n expect(t.value).to.eql(serializedChangeSet.insertTemplates['autodesk.tests:property.set.SimpleNamedPoint-1.2.0']);\n }\n setImmediate(cb);\n }, function() {\n expect(countedTemplates).to.eql(2);\n done();\n });\n });\n });\n\n describe('Utils.extractTypeids', function() {\n it('Should work for a simple templated property', function() {\n var property = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n\n var typeids = Utils.extractTypeids(property.serialize({ 'dirtyOnly': false, 'includeRootTypeid': true }));\n typeids.sort();\n // Note the map from the template isn't included in the ChangeSet since it is empty\n expect(typeids).to.deep.equal(['String', 'Uint32', 'autodesk.test:utilsTestContained-1.0.0',\n 'autodesk.test:utilsTestParent-1.0.0',\n 'map<autodesk.test:utilsTestContained-1.0.0>']);\n });\n\n it('Should work for inserts into a NodePropertý', function() {\n var property = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.insert('child', child);\n\n var typeids = Utils.extractTypeids(property.serialize({ 'dirtyOnly': false, 'includeRootTypeid': true }));\n typeids.sort();\n expect(typeids).to.deep.equal(['NodeProperty', 'String', 'Uint32', 'autodesk.test:utilsTestContained-1.0.0',\n 'autodesk.test:utilsTestParent-1.0.0',\n 'map<autodesk.test:utilsTestContained-1.0.0>']);\n });\n\n it('Should work for inserts into a map', function() {\n var property = PropertyFactory.create('map<>');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.insert('child', child);\n\n var typeids = Utils.extractTypeids(property._serialize(false, true));\n typeids.sort();\n\n expect(typeids).to.deep.equal(['String', 'Uint32', 'autodesk.test:utilsTestContained-1.0.0',\n 'autodesk.test:utilsTestParent-1.0.0', 'map<>',\n 'map<autodesk.test:utilsTestContained-1.0.0>']);\n });\n\n it('Should work for inserts into an array', function() {\n var property = PropertyFactory.create('array<>');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.push(child);\n\n var typeids = Utils.extractTypeids(property._serialize(false, true));\n typeids.sort();\n\n expect(typeids).to.deep.equal(['String', 'Uint32', 'array<>', 'autodesk.test:utilsTestContained-1.0.0',\n 'autodesk.test:utilsTestParent-1.0.0',\n 'map<autodesk.test:utilsTestContained-1.0.0>']);\n });\n\n it('Should work for modifications of a NodeProperty', function() {\n var property = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.insert('child', child);\n property.cleanDirty();\n property.resolvePath('child.contained.\"error\\\\\"Msg\\\\\"\"').value = 'modified';\n\n var typeids = Utils.extractTypeids(property.serialize({ 'dirtyOnly': true, 'in_includeRootTypeid': true }));\n typeids.sort();\n expect(typeids).to.deep.equal([\n 'NodeProperty', 'String', 'autodesk.test:utilsTestContained-1.0.0', 'autodesk.test:utilsTestParent-1.0.0',\n ]);\n });\n\n it('Should work for modifications of a map', function() {\n var property = PropertyFactory.create('map<>');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.insert('child', child);\n property.cleanDirty();\n property.resolvePath('[child].contained.\"error\\\\\"Msg\\\\\"\"').value = 'modified';\n\n var typeids = Utils.extractTypeids(property._serialize(true, true));\n typeids.sort();\n expect(typeids).to.deep.equal([\n 'String', 'autodesk.test:utilsTestContained-1.0.0', 'autodesk.test:utilsTestParent-1.0.0', 'map<>',\n ]);\n });\n\n it('Should work for modifications of an array', function() {\n var property = PropertyFactory.create('array<>');\n var child = PropertyFactory.create('autodesk.test:utilsTestParent-1.0.0');\n property.push(child);\n property.cleanDirty();\n property.resolvePath('[0].contained.\"error\\\\\"Msg\\\\\"\"').setValue('modified');\n\n var typeids = Utils.extractTypeids(property._serialize(true, true));\n typeids.sort();\n expect(typeids).to.deep.equal([\n 'String', 'array<>', 'autodesk.test:utilsTestContained-1.0.0', 'autodesk.test:utilsTestParent-1.0.0',\n ]);\n });\n\n it('Should work for removals', function() {\n var typeids = Utils.extractTypeids({ remove: ['xxx-yyy-zzz'] });\n\n expect(typeids).to.have.lengthOf(1);\n expect(typeids[0]).to.equal('NodeProperty');\n });\n });\n\n describe('Change set helper functions', function() {\n var root, sim, subject1, subject2, subject3;\n // Create a simple test data-set\n before(function() {\n root = PropertyFactory.create('NodeProperty');\n sim = PropertyFactory.create('autodesk.test:utils.spec.pan.sim-1.0.0');\n subject1 = PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0');\n subject2 = PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0');\n\n root.insert('simulation', sim);\n sim.insert('subject1', subject1);\n sim.insert('subject2', subject2);\n\n var arrayProp = PropertyFactory.create('array<>');\n root.insert('array', arrayProp);\n arrayProp.push(PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'));\n arrayProp.push(PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'));\n arrayProp.get(1)._properties.progress.value = 1;\n\n var mapProp = PropertyFactory.create('map<>');\n root.insert('map', mapProp);\n mapProp.insert('entry', PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'));\n });\n\n it('should work correctly for inserts', function() {\n var insertedResults = Utils.getChangesByType('autodesk.test:utils.spec.task.subject-1.0.0',\n root.serialize({ 'dirtyOnly': true }));\n assert(_.keys(insertedResults.insert).length === 9);\n for (var i = 0; i < 9; i++) {\n assert(root.resolvePath(_.keys(insertedResults.insert)[i]) !== undefined);\n assert(Utils.getChangesByPath(_.keys(insertedResults.insert)[i], root, root.serialize(), false).insert !==\n undefined);\n }\n });\n\n it('should work correctly for the root path', function() {\n var AnonymousTestPropertyTemplate = {\n typeid: 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0',\n properties: [\n { id: 'stringProperty', typeid: 'String' },\n ],\n };\n PropertyFactory._reregister(AnonymousTestPropertyTemplate);\n\n var prop = PropertyFactory.create('NodeProperty');\n prop.insert('A',\n PropertyFactory.create('autodesk.tests:AnonymousMapTestPropertyID-1.0.0'));\n var result = Utils.getChangesByPath('', null, prop.serialize());\n expect(result).to.deep.equal(\n {\n 'modify': {\n 'insert': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'A': {\n 'String': {\n 'stringProperty': '',\n },\n },\n },\n },\n },\n });\n });\n\n it('should correctly strip typeids in insertions', function() {\n var insertionChangeSet = root.serialize({ 'dirtyOnly': true });\n Utils._stripTypeids(insertionChangeSet);\n expect(insertionChangeSet).to.deep.equal({\n 'insert': {\n 'simulation': {\n 'insert': {\n 'subject1': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'subject2': {\n 'errorMsg': '',\n 'progress': 0,\n },\n },\n 'costEstimated': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'costFinal': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'thermalResults': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'mechanicalResults': {\n 'errorMsg': '',\n 'progress': 0,\n },\n 'start': false,\n 'cancel': false,\n },\n 'map': {\n 'insert': {\n 'entry': {\n 'errorMsg': '',\n 'progress': 0,\n },\n },\n },\n 'array': {\n 'insert': [[0, [{\n 'errorMsg': '',\n 'progress': 0,\n }, {\n 'errorMsg': '',\n 'progress': 1,\n }]]],\n },\n },\n });\n });\n\n it('should work correctly for modifies', function() {\n root.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE | BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n\n subject3 = PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0');\n subject2.insert('subject3', subject3);\n\n subject1._properties.errorMsg.value = 'test';\n subject2._properties.errorMsg.value = 'test';\n sim._properties.thermalResults.errorMsg.value = 'test44';\n\n // Test array modification\n root.resolvePath('array[1].errorMsg').value = 'test';\n\n // Test array insertion\n root.resolvePath('array').insertRange(1, [\n PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'),\n PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'),\n ]);\n root.resolvePath('array').insertRange(0, [\n PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'),\n ]);\n\n // Test map modification\n root.resolvePath('map[entry].errorMsg').value = 'test';\n\n // Test map insertion\n root.resolvePath('map').insert('entry2',\n PropertyFactory.create('autodesk.test:utils.spec.task.subject-1.0.0'));\n\n var modifiedResults = Utils.getChangesByType(\n 'autodesk.test:utils.spec.task.subject-1.0.0',\n root.serialize({ 'dirtyOnly': true }),\n true,\n );\n\n assert(_.keys(modifiedResults.insert).length === 5);\n assert(_.keys(modifiedResults.modify).length === 5);\n\n for (var i = 0; i < 5; i++) {\n assert(Utils.getChangesByPath(_.keys(modifiedResults.modify)[i], root,\n root.serialize({ 'dirtyOnly': true }), false).modify !== undefined);\n }\n for (var i = 0; i < 5; i++) {\n assert(Utils.getChangesByPath(_.keys(modifiedResults.insert)[i], root,\n root.serialize({ 'dirtyOnly': true }), false).insert !== undefined);\n }\n });\n\n it('should correctly strip typeids in modifies', function() {\n var modifyChangeSet = root.serialize({ 'dirtyOnly': true });\n Utils._stripTypeids(modifyChangeSet);\n expect(modifyChangeSet).to.deep.equal({\n 'modify': {\n 'simulation': {\n 'modify': {\n 'subject1': {\n 'errorMsg': 'test',\n },\n 'subject2': {\n 'insert': {\n 'subject3': {\n 'errorMsg': '',\n 'progress': 0,\n },\n },\n 'errorMsg': 'test',\n },\n },\n 'thermalResults': {\n 'errorMsg': 'test44',\n },\n },\n 'array': {\n insert: [[0, [\n {\n 'errorMsg': '',\n 'progress': 0,\n },\n ]], [1, [\n {\n 'errorMsg': '',\n 'progress': 0,\n }, {\n 'errorMsg': '',\n 'progress': 0,\n },\n ]]],\n modify: [[1, [{\n 'errorMsg': 'test',\n }]]],\n },\n 'map': {\n 'insert': {\n 'entry2': {\n 'errorMsg': '',\n 'progress': 0,\n },\n },\n 'modify': {\n 'entry': {\n 'errorMsg': 'test',\n },\n },\n },\n },\n });\n });\n\n it('should correctly work for removes', function() {\n root.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE | BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n subject2.remove(subject3.getId());\n\n assert(Utils.getChangesByPath(sim.getId() + '.' + subject2.getId() + '.' + subject3.getId(),\n root, root.serialize({ 'dirtyOnly': true }), false).removed === true);\n\n root.remove(sim.getId());\n assert(Utils.getChangesByPath(sim.getId() + '.' + subject2.getId() + '.' + subject3.getId(),\n root, root.serialize({ 'dirtyOnly': true }), false).removed === true);\n assert(Utils.getChangesByPath(sim.getId() + '.' + subject2.getId(), root,\n root.serialize({ 'dirtyOnly': true }), false).removed === true);\n assert(Utils.getChangesByPath(sim.getId(), root, root.serialize({ 'dirtyOnly': true }), false).removed === true);\n\n root.resolvePath('map').remove('entry2');\n root.resolvePath('array').remove(0);\n root.resolvePath('array').removeRange(1, 2);\n });\n\n it('should correctly strip typeids in removes', function() {\n var modifyChangeSet = root._serialize(true);\n Utils._stripTypeids(modifyChangeSet);\n expect(modifyChangeSet).to.deep.equal({\n 'modify': {\n 'array': {\n 'remove': [[0, 1], [2, 2]],\n },\n 'map': {\n 'remove': ['entry2'],\n },\n },\n 'remove': ['simulation'],\n });\n });\n\n it('should work for nested templates', function() {\n var nestedTemplate = PropertyFactory.create('autodesk.tests:nestedTemplate-1.0.0');\n nestedTemplate._properties.c.myNestedProp.errorMsg.value = 'testString';\n var changeSet = nestedTemplate._serialize(true);\n\n var changes = Utils.getChangesByType('String', changeSet);\n expect(changes.modify['c.myNestedProp.errorMsg']).to.equal('testString');\n\n expect(Utils.getChangesByPath('c.myNestedProp.errorMsg',\n nestedTemplate, changeSet, false)).to.have.keys('modify');\n });\n\n it('should work for an object with characters that have to be quoted', function() {\n var node = PropertyFactory.create('autodesk.tests:property.with.quotable.characters-1.0.0');\n node.get('simple_property').value = 'test';\n node.get('test.property').value = 'test';\n node.get('test\"property\"').value = 'test';\n node.get('test[property]').get('.property.').get('test').value = 'test';\n\n var changeSet = node._serialize(true);\n var changes = Utils.getChangesByType('String', changeSet);\n expect(changes.modify).to.have.keys('simple_property',\n '\"test.property\"',\n '\"test\\\\\"property\\\\\"\"',\n '\"test[property]\".\".property.\".test');\n\n expect(Utils.getChangesByPath('simple_property', node, changeSet, false)).to.have.keys('modify');\n expect(Utils.getChangesByPath('\"test.property\"', node, changeSet, false)).to.have.keys('modify');\n expect(Utils.getChangesByPath('\"test\\\\\"property\\\\\"\"', node, changeSet, false)).to.have.keys('modify');\n expect(Utils.getChangesByPath('\"test[property]\".\".property.\".test',\n node, changeSet, false)).to.have.keys('modify');\n });\n\n it('should work for a node property with characters that have to be quoted', function() {\n var node = PropertyFactory.create('NodeProperty');\n node.insert('simple_property', PropertyFactory.create('String', undefined, 'test'));\n node.insert('test.property', PropertyFactory.create('String', undefined, 'test'));\n node.insert('test\"property\"', PropertyFactory.create('String', undefined, 'test'));\n node.insert('test[property]', PropertyFactory.create('NodeProperty'));\n node.get('test[property]').insert('.property.', PropertyFactory.create('NodeProperty'));\n node.get('test[property]').get('.property.').insert('test',\n PropertyFactory.create('String', undefined, 'test'));\n\n var changeSet = node._serialize(true);\n var changes = Utils.getChangesByType('String', changeSet);\n expect(changes.insert).to.have.keys('simple_property',\n '\"test.property\"',\n '\"test\\\\\"property\\\\\"\"',\n '\"test[property]\".\".property.\".test');\n\n expect(Utils.getChangesByPath('simple_property', node, changeSet, false)).to.have.keys('insert');\n expect(Utils.getChangesByPath('\"test.property\"', node, changeSet, false)).to.have.keys('insert');\n expect(Utils.getChangesByPath('\"test\\\\\"property\\\\\"\"', node, changeSet, false)).to.have.keys('insert');\n expect(Utils.getChangesByPath('\"test[property]\".\".property.\".test',\n node, changeSet, false)).to.have.keys('insert');\n });\n });\n\n describe('Utils.getChangesToTokenizedPaths', function() {\n var CS = {\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n '__doubleUnderscore': 'text',\n },\n },\n },\n },\n },\n },\n 'nested2': {},\n },\n 'array<>': {\n 'nestedArray': {\n 'insert': [\n [\n 0,\n [\n {\n 'typeid': 'NodeProperty',\n },\n {\n 'typeid': 'NodeProperty',\n 'insert': {\n 'String': {\n 'text': '',\n },\n },\n },\n ],\n ],\n ],\n },\n },\n 'String': {\n 'string': 'text',\n },\n },\n };\n\n it('should work using objects', function() {\n var visitedPaths = [];\n Utils.getChangesToTokenizedPaths({\n 'String': {},\n 'nested1': {\n 'nested2': {\n 'string': {\n '__hidden': {\n 'myCallback': function() { return 'hello'; },\n 'myValue': 1,\n },\n },\n '___doubleUnderscore': {}, // Yes, there are 3 '_', as escapeLeadingDoubleUnderscore = true\n },\n },\n 'nestedArray': {\n '1': {\n 'String': {},\n },\n },\n }, CS, function(in_context, in_nested, in_tokenizedPath) {\n var currentPath = in_tokenizedPath.join('.');\n visitedPaths.push(currentPath);\n if (currentPath === 'nested1.nested2.string') {\n expect(in_nested).to.exist;\n expect(in_nested.__hidden).to.exist;\n expect(in_nested.__hidden.myCallback).to.exist;\n expect(in_nested.__hidden.myCallback()).to.eql('hello');\n expect(in_nested.__hidden.myValue).to.eql(1);\n }\n }, {\n rootOperation: 'modify',\n rootTypeid: 'NodeProperty',\n escapeLeadingDoubleUnderscore: true,\n });\n expect(visitedPaths).to.deep.equal(['', 'nested1', 'nested1.nested2', 'nested1.nested2.string',\n 'nested1.nested2.__doubleUnderscore', 'nestedArray', 'nestedArray.1']);\n });\n\n it('should work using maps', function() {\n var visitedPaths = [];\n Utils.getChangesToTokenizedPaths(new Map([\n ['String', new Map()],\n ['nested1', new Map([\n ['nested2', new Map([\n ['string', new Map([\n ['__hidden', new Map([\n ['myCallback', function() { return 'hello'; }],\n ['myValue', 1],\n ])],\n ])],\n ['___doubleUnderscore', new Map()], // Yes, there are 3 '_', as escapeLeadingDoubleUnderscore = true\n ])],\n ])],\n ['nestedArray', new Map([\n ['1', new Map([\n ['String', new Map()],\n ])],\n ])],\n ]), CS, function(in_context, in_nested, in_tokenizedPath) {\n var currentPath = in_tokenizedPath.join('.');\n visitedPaths.push(currentPath);\n if (currentPath === 'nested1.nested2.string') {\n expect(in_nested).to.exist;\n expect(in_nested).to.have.key('__hidden');\n expect(in_nested.get('__hidden')).to.have.all.keys('myCallback', 'myValue');\n expect(in_nested.get('__hidden').get('myCallback')()).to.eql('hello');\n expect(in_nested.get('__hidden').get('myValue')).to.eql(1);\n }\n }, {\n rootOperation: 'modify',\n rootTypeid: 'NodeProperty',\n escapeLeadingDoubleUnderscore: true,\n });\n expect(visitedPaths).to.deep.equal(['', 'nested1', 'nested1.nested2', 'nested1.nested2.string',\n 'nested1.nested2.__doubleUnderscore', 'nestedArray', 'nestedArray.1']);\n });\n\n it('should assume paths as literal when the escapeLeadingDoubleUnderscore flag is off ', function() {\n var visitedPaths = [];\n Utils.getChangesToTokenizedPaths({\n 'nested1': {\n 'nested2': {\n '__doubleUnderscore': {}, // The amount of underscores is the same as in the changeSet\n },\n },\n }, CS, function(in_context, in_nested, in_tokenizedPath) {\n visitedPaths.push(in_tokenizedPath.join('.'));\n }, {\n rootOperation: 'modify',\n rootTypeid: 'NodeProperty',\n escapeLeadingDoubleUnderscore: false,\n });\n expect(visitedPaths).to.deep.equal(['', 'nested1', 'nested1.nested2', 'nested1.nested2.__doubleUnderscore']);\n });\n });\n\n /* describe('Utils.insertPropertyChangeIntoChangeset', function() {\n var checkPropertyForModifications = function(in_property, in_arrayTests) {\n // Prepare the check by appending a float Property\n var floatProperty = PropertyFactory.create('Float64', undefined, 10);\n in_property.insert('float', floatProperty);\n var rootProperty = in_property.getRoot();\n rootProperty.cleanDirty();\n\n var expectedTarget = in_arrayTests ?\n {insert: {Float64: {'float': 10}}, typeid: 'NodeProperty'} :\n {insert: {Float64: {'float': 10}}};\n\n // Check that creating a new insert operation works\n var emptyChangeSet = {};\n if (!in_arrayTests) {\n var result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n emptyChangeSet, true);\n expect(result.propertyChangeSet).to.exist;\n expect(result.insert).to.be.true;\n result.propertyChangeSet.insert = {Float64: {'float': 10}};\n expect(emptyChangeSet).to.deep.equal(rootProperty._serialize(false));\n }\n\n // Check that inserting into a full serialization is a NOP\n var serializedChangeSet = rootProperty._serialize(false);\n var result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, true);\n expect(result.propertyChangeSet).to.exist;\n expect(result.propertyChangeSet).to.deep.equal(expectedTarget);\n expect(result.insert).to.be.true;\n expect(serializedChangeSet).to.deep.equal(rootProperty._serialize(false));\n\n // Check that a modify becomes an insert\n serializedChangeSet = rootProperty._serialize(false);\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.propertyChangeSet).to.exist;\n expect(result.propertyChangeSet).to.deep.equal(expectedTarget);\n expect(result.insert).to.be.true;\n expect(serializedChangeSet).to.deep.equal(rootProperty._serialize(false));\n\n // Modify the property to have a baseline to compare to\n floatProperty.value = 15;\n expectedTarget = in_arrayTests ?\n {modify: {Float64: {'float': 15}}, typeid: 'NodeProperty'} :\n {modify: {Float64: {'float': 15}}};\n\n // Check that creating a new modify operation works\n emptyChangeSet = {};\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n emptyChangeSet, false);\n expect(result.propertyChangeSet).to.exist;\n result.propertyChangeSet.modify = {Float64: {'float': 15}};\n expect(result.insert).to.be.false;\n expect(emptyChangeSet).to.deep.equal(rootProperty._serialize(true));\n\n // Check that retrieving an existing modify operation is possible\n serializedChangeSet = rootProperty._serialize(true);\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.propertyChangeSet).to.exist;\n expect(result.propertyChangeSet).to.deep.equal(expectedTarget);\n expect(result.insert).to.be.false;\n expect(serializedChangeSet).to.deep.equal(rootProperty._serialize(true));\n\n // Check that deleting properties returns the correct result\n var currentProperty = floatProperty.getParent();\n while (currentProperty && currentProperty.getParent()) {\n var parent = currentProperty.getParent();\n if (parent instanceof NodeProperty &&\n parent._getDynamicChildrenReadOnly()[currentProperty.getId()]) {\n rootProperty.cleanDirty();\n parent.remove(currentProperty.getId());\n serializedChangeSet = rootProperty._serialize(true);\n\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.remove).to.be.true;\n\n parent.insert(currentProperty.getId(), currentProperty);\n result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), rootProperty,\n serializedChangeSet, false);\n expect(result.remove).to.be.true;\n }\n currentProperty = currentProperty.getParent();\n }\n };\n\n it('should work for nested NodeProperties', function() {\n var root = PropertyFactory.create('NodeProperty');\n var child1 = PropertyFactory.create('NodeProperty');\n root.insert('child', child1);\n var child2 = PropertyFactory.create('NodeProperty');\n child1.insert('child', child2);\n\n checkPropertyForModifications(child2, false);\n });\n\n it('should work for NodeProperties in a template', function() {\n var root = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('autodesk.test:staticNodeChild-1.0.0');\n root.insert('child', child);\n\n checkPropertyForModifications(child.get('nodeProperty'), false);\n });\n\n it('should work for NodeProperties in a map', function() {\n var root = PropertyFactory.create('NodeProperty');\n var child = PropertyFactory.create('NodeProperty', 'map');\n root.insert('map', child);\n child.insert('entry', PropertyFactory.create('NodeProperty'));\n\n checkPropertyForModifications(child.get('entry'), false);\n });\n\n it('should work for NodeProperties in an array', function() {\n var root = PropertyFactory.create('NodeProperty');\n var arrayProp = PropertyFactory.create('NodeProperty', 'array');\n root.insert('array', arrayProp);\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n\n checkPropertyForModifications(arrayProp.get(0), true);\n });\n\n it('should work for NodeProperties in an array with complex modifications', function() {\n var root = PropertyFactory.create('NodeProperty');\n var arrayProp = PropertyFactory.create('NodeProperty', 'array');\n root.insert('array', arrayProp);\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n var floatProperty = PropertyFactory.create('Float64', undefined, 10);\n arrayProp.get(3).insert('float', floatProperty);\n root.cleanDirty();\n\n // Create a complex modification set\n floatProperty.value = 15;\n arrayProp.removeRange(0, 2);\n arrayProp.insertRange(0, [PropertyFactory.create('NodeProperty')]);\n arrayProp.push(PropertyFactory.create('NodeProperty'));\n var serializedChangeSet = root.serialize({'dirtyOnly': true});\n var expectedChangeset = floatProperty.getParent().serialize({'dirtyOnly': true, 'includeRootTypeid': true});\n\n var result = Utils.insertPropertyChangeIntoChangeset(floatProperty.getParent(), root,\n serializedChangeSet, false);\n expect(result.propertyChangeSet).to.deep.equal(expectedChangeset);\n expect(result.insert).to.be.false;\n });\n }); */\n\n describe('Utils.getFilteredChangeSetByPaths', function() {\n var changeSet = {\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n 'array<>': {\n 'nestedArray': {\n 'insert': [\n [\n 0,\n [\n {\n 'typeid': 'NodeProperty',\n },\n {\n 'typeid': 'NodeProperty',\n 'insert': {\n 'String': {\n 'text': '',\n },\n },\n },\n ],\n ],\n ],\n },\n },\n 'map<>': {\n 'trulyNestedMap': {\n 'insert': {\n 'String': {\n 'key1': 'The value is 1',\n },\n },\n },\n },\n },\n },\n 'nested3': {},\n },\n 'map<>': {\n 'nestedMap': {\n 'insert': {\n 'String': {\n 'nestedMapString': 'Sirius',\n },\n 'Bool': {\n 'nestedMapBoolean': true,\n },\n },\n },\n },\n 'map<mysample:asset-1.0.0>': {\n 'assetMap': {\n 'insert': {\n 'mysample:asset-1.0.0': {\n '1': {\n 'String': {\n 'name': 'test asset 1',\n },\n 'NodeProperty': {\n 'components': {\n },\n },\n },\n },\n },\n },\n },\n 'Reference<String>': {\n 'refProp': '/test.prop',\n },\n 'RepositoryReferenceProperty': {\n 'refRepoProp': {\n 'Bool': {\n 'followBranch': false,\n },\n 'String': {\n 'branchGUID': '846fe4a1-e595-44bf-8cc0-f1d8f6d104a6',\n 'commitGUID': '4c611c89-8241-4764-958e-77470bba3b9b',\n 'repositoryGUID': 'f438bed5-d8f2-4c70-a7e0-aa52b8929d2a',\n },\n },\n },\n 'NamedProperty': {\n 'namedProp': {\n 'String': {\n 'guid': 'e763527c-7f49-417c-8df3-9fb7f90a1932',\n },\n },\n },\n 'NamedNodeProperty': {\n 'namedNodeProp': {\n 'String': {\n 'guid': 'efc68477-53b1-49ac-bd3f-e05a21f85a32',\n },\n 'insert': {\n 'enum<autodesk.core:UnitsEnum-1.0.0>': {\n 'enumProp': 0,\n },\n 'String': {\n 'test': 'blah',\n },\n },\n },\n },\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'b': 'hello',\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n 'String': {\n 'emptyString': '',\n },\n },\n 'modify': {\n 'NodeProperty': {\n 'nested4': {\n 'insert': {\n 'Uint32': {\n 'number': 4,\n },\n },\n 'remove': ['nested5', 'nested6'],\n },\n },\n 'array<Float32>': {\n 'nestedArray2': {\n 'modify': [[0, [0.707, 0.707, 0], [0, 0, 1]]],\n },\n },\n },\n 'remove': [\n 'nested7',\n ],\n };\n\n it('should filter change sets by paths resolving to all types (NodeProperty, array, map, set, NamedNodeProperty, Reference, Primitive types)', function() {\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested1', 'nested4.nested5', 'nested4.number']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n 'array<>': {\n 'nestedArray': {\n 'insert': [\n [\n 0,\n [\n {\n 'typeid': 'NodeProperty',\n },\n {\n 'typeid': 'NodeProperty',\n 'insert': {\n 'String': {\n 'text': '',\n },\n },\n },\n ],\n ],\n ],\n },\n },\n 'map<>': {\n 'trulyNestedMap': {\n 'insert': {\n 'String': {\n 'key1': 'The value is 1',\n },\n },\n },\n },\n },\n },\n },\n },\n 'modify': {\n 'NodeProperty': {\n 'nested4': {\n 'remove': ['nested5'],\n 'insert': {\n 'Uint32': {\n 'number': 4,\n },\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested7', 'nested4', 'nested1.nested2']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n },\n },\n },\n },\n 'modify': {\n 'NodeProperty': {\n 'nested4': {\n 'insert': {\n 'Uint32': {\n 'number': 4,\n },\n },\n 'remove': ['nested5', 'nested6'],\n },\n },\n },\n 'remove': [\n 'nested7',\n ],\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested1.nestedArray', 'nestedMap.nestedMapBoolean', 'nestedArray2']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'array<>': {\n 'nestedArray': {\n 'insert': [\n [\n 0,\n [\n {\n 'typeid': 'NodeProperty',\n },\n {\n 'typeid': 'NodeProperty',\n 'insert': {\n 'String': {\n 'text': '',\n },\n },\n },\n ],\n ],\n ],\n },\n },\n },\n },\n },\n 'map<>': {\n 'nestedMap': {\n 'insert': {\n 'Bool': {\n 'nestedMapBoolean': true,\n },\n },\n },\n },\n },\n 'modify': {\n 'array<Float32>': {\n 'nestedArray2': {\n 'modify': [[0, [0.707, 0.707, 0], [0, 0, 1]]],\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['namedProp.guid', 'namedNodeProp.enumProp', 'namedNodeProp.guid']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NamedProperty': {\n 'namedProp': {\n 'String': {\n 'guid': 'e763527c-7f49-417c-8df3-9fb7f90a1932',\n },\n },\n },\n 'NamedNodeProperty': {\n 'namedNodeProp': {\n 'String': {\n 'guid': 'efc68477-53b1-49ac-bd3f-e05a21f85a32',\n },\n 'insert': {\n 'enum<autodesk.core:UnitsEnum-1.0.0>': {\n 'enumProp': 0,\n },\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.a', 'customTemplate.nested.c.d.e', 'customTemplate.nestedSet']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'nested.c.d.e': 'world',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, new Map([[\n 'customTemplate', new Map(\n [\n ['a', new Map()],\n ['nested', new Map([[\n 'c', new Map([[\n 'd', new Map([[\n 'e', new Map(),\n ]]),\n ]]),\n ]])],\n ['nestedSet', new Map()],\n ],\n ),\n ]]));\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'nested.c.d.e': 'world',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nested.c']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'String': {\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n },\n },\n },\n });\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nested.c.d']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'String': {\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['refProp', 'refRepoProp.commitGUID', 'refRepoProp.followBranch']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'Reference<String>': {\n 'refProp': '/test.prop',\n },\n 'RepositoryReferenceProperty': {\n 'refRepoProp': {\n 'Bool': {\n 'followBranch': false,\n },\n 'String': {\n 'commitGUID': '4c611c89-8241-4764-958e-77470bba3b9b',\n },\n },\n },\n },\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['assetMap[1].name']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'map<mysample:asset-1.0.0>': {\n 'assetMap': {\n 'insert': {\n 'mysample:asset-1.0.0': {\n '1': {\n 'String': {\n 'name': 'test asset 1',\n },\n },\n },\n },\n },\n },\n },\n });\n\n // For maps, using dots as separators, instead of brackets, is also supported.\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['assetMap.1.name']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'map<mysample:asset-1.0.0>': {\n 'assetMap': {\n 'insert': {\n 'mysample:asset-1.0.0': {\n '1': {\n 'String': {\n 'name': 'test asset 1',\n },\n },\n },\n },\n },\n },\n },\n });\n });\n\n it('should ignore overlapping paths', function() {\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate', 'customTemplate.a', 'customTemplate.nested.c.d.e', 'customTemplate.nestedSet']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'b': 'hello',\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nestedSet[91a59cb6-9881-2b5f-2366-84dbdc8b6838].guid']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n // Flip order\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.a', 'customTemplate.nested.c.d.e', 'customTemplate', 'customTemplate.nestedSet']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'b': 'hello',\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n // Duplicate paths\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.a', 'customTemplate', 'customTemplate.nested.c.d.e', 'customTemplate', 'customTemplate.nestedSet']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'String': {\n 'b': 'hello',\n 'nested.c.d.e': 'world',\n 'nested.c.d.f': 'hello',\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n 'insert': {\n 'NamedProperty': {\n '91a59cb6-9881-2b5f-2366-84dbdc8b6838': {\n 'String': {\n 'guid': '91a59cb6-9881-2b5f-2366-84dbdc8b6838',\n },\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['emptyString']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'String': {\n 'emptyString': '',\n },\n },\n });\n });\n\n it('should return an empty change set when filtering by a path that does not exist', function() {\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['path.that.does.not.exist', 'dontExist', 'does.not.exist']);\n\n expect(filteredCS).to.be.eql({});\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested7', 'nested4', 'nested1.nested2', 'path.that.does.not.exist', 'dontExist', 'does.not.exist']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n },\n },\n },\n },\n 'modify': {\n 'NodeProperty': {\n 'nested4': {\n 'insert': {\n 'Uint32': {\n 'number': 4,\n },\n },\n 'remove': ['nested5', 'nested6'],\n },\n },\n },\n 'remove': [\n 'nested7',\n ],\n });\n\n filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested1.nested2', 'nested1.nested6']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'NodeProperty': {\n 'nested2': {\n 'insert': {\n 'String': {\n 'string': 'text',\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n // Partially matched paths are included\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['assetMap[2]']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'map<mysample:asset-1.0.0>': {\n 'assetMap': {\n },\n },\n },\n });\n\n // Closest partially matched path 'customTemplate.nested.c.d' cannot be included\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nested.c.d.g']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n },\n },\n },\n });\n\n // Partial match should also work with nested properties\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested1.trulyNestedMap[newKey]']);\n expect(filteredCS).to.eql({\n 'insert': {\n 'NodeProperty': {\n 'nested1': {\n 'insert': {\n 'map<>': {\n 'trulyNestedMap': {\n },\n },\n },\n },\n },\n },\n });\n\n // Filter a nested non existing entry from a templated property\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['customTemplate.nestedSet.nonExisting', 'customTemplate.a']);\n expect(filteredCS).to.eql({\n insert: {\n 'autodesk.test:testProp-1.0.0': {\n 'customTemplate': {\n 'Uint32': {\n 'a': 922337203685,\n },\n 'set<NamedProperty>': {\n 'nestedSet': {\n },\n },\n },\n },\n },\n });\n\n // Make sure, nested removes are treated correctly\n var filteredCS = Utils.getFilteredChangeSetByPaths(changeSet, ['nested7.abcd']);\n expect(filteredCS).to.eql({\n 'remove': ['nested7'],\n });\n });\n\n it('should fail filtering change sets with paths that resolve into arrays and sets', function() {\n var failedFilteredFunc = Utils.getFilteredChangeSetByPaths.bind(null, changeSet, ['nested1.nestedArray[0]']);\n\n expect(failedFilteredFunc).to.throw(Error, MSG.FILTER_PATH_WITHIN_ARRAY);\n\n // With valid paths\n failedFilteredFunc = Utils.getFilteredChangeSetByPaths.bind(null, changeSet, ['customTemplate', 'nested1.nestedArray[0]']);\n\n expect(failedFilteredFunc).to.throw(Error, MSG.FILTER_PATH_WITHIN_ARRAY);\n });\n\n it('should work for ChangeSet with segments requiring escapes for NodeProperties', function() {\n var node = PropertyFactory.create('NodeProperty');\n node.insert('.\"test\".', PropertyFactory.create('NodeProperty'));\n node.get('.\"test\".').insert('[abcd]', PropertyFactory.create('String', undefined, 'test'));\n\n var CS = node.serialize();\n var filteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\".\\\\\"test\\\\\".\".\"[abcd]\"']);\n expect(filteredCS).to.deep.equal(CS);\n\n node.cleanDirty();\n node.get('.\"test\".').get('[abcd]').setValue('test2');\n\n // Test a modification\n CS = node.serialize({ dirtyOnly: true });\n filteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\".\\\\\"test\\\\\".\".\"[abcd]\"']);\n expect(filteredCS).to.deep.equal(CS);\n\n // Test a removal\n node.cleanDirty();\n node.get('.\"test\".').remove('[abcd]');\n CS = node.serialize({ dirtyOnly: true });\n filteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\".\\\\\"test\\\\\".\"']);\n expect(filteredCS).to.deep.equal(CS);\n });\n\n it('should work for ChangeSet with segments requiring escapes in template', function() {\n var node = PropertyFactory.create('autodesk.tests:property.with.quotable.characters-1.0.0');\n node.cleanDirty();\n\n node.get(['test[property]', '.property.']).get('test').value = 'test';\n\n var CS = node.serialize({ dirtyOnly: true });\n var filteredCS = Utils.getFilteredChangeSetByPaths(CS, ['\"test[property]\".\".property.\"']);\n expect(filteredCS).to.deep.equal(CS);\n });\n\n it('should work for reversible ChangeSet', function() {\n var originalChangeSet = {\n 'insert': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'F': { 'String': { 'stringProperty': '' } },\n },\n },\n 'remove': ['B', 'C'],\n 'modify': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'A': { 'String': { 'stringProperty': 'hello' } },\n },\n },\n };\n var parentChangeSet = {\n 'insert': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'A': { 'String': { 'stringProperty': '' } },\n 'B': { 'String': { 'stringProperty': '' } },\n 'C': { 'String': { 'stringProperty': '' } },\n },\n },\n };\n\n var cs = new ChangeSet(originalChangeSet);\n cs._toReversibleChangeSet(parentChangeSet);\n\n var filteredCS = Utils.getFilteredChangeSetByPaths(cs.getSerializedChangeSet(), ['A', 'B', 'F']);\n\n expect(filteredCS).to.eql({\n 'insert': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'F': { 'String': { 'stringProperty': '' } },\n },\n },\n 'remove': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'B': { 'String': { 'stringProperty': '' } },\n },\n }, 'modify': {\n 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0': {\n 'A': {\n 'String': {\n 'stringProperty': {\n 'value': 'hello',\n 'oldValue': '',\n },\n },\n },\n },\n },\n });\n });\n });\n\n describe('Utils.getFilteredOutChangeSetByPaths', () => {\n const changeset = {\n 'insert': {\n 'map<NodeProperty>': {\n 'assets': {\n 'insert': {\n 'autodesk.test:sample-1.0.0': {\n 'Prop1': {\n 'String': {\n 'guid': 'Prop1',\n },\n },\n 'Prop2': {\n 'String': {\n 'guid': 'Prop2',\n },\n },\n 'Prop3': {\n 'String': {\n 'guid': 'Prop3',\n },\n },\n },\n },\n },\n },\n },\n };\n\n const singleExclusion = {\n 'insert': {\n 'map<NodeProperty>': {\n 'assets': {\n 'insert': {\n 'autodesk.test:sample-1.0.0': {\n 'Prop1': {\n 'String': {\n 'guid': 'Prop1',\n },\n },\n 'Prop2': {\n 'String': {\n 'guid': 'Prop2',\n },\n },\n },\n },\n },\n },\n },\n };\n\n const multiExclusion = {\n 'insert': {\n 'map<NodeProperty>': {\n 'assets': {\n 'insert': {\n 'autodesk.test:sample-1.0.0': {\n 'Prop1': {\n 'String': {\n 'guid': 'Prop1',\n },\n },\n },\n },\n },\n },\n },\n };\n\n it('should exclude single given path', () => {\n let res = Utils.excludePathsFromChangeSet(changeset, 'assets[Prop3]');\n expect(res).to.be.deep.equal(singleExclusion);\n });\n\n it('should exclude single given path in array', () => {\n let res = Utils.excludePathsFromChangeSet(changeset, ['assets[Prop3]']);\n expect(res).to.be.deep.equal(singleExclusion);\n });\n\n it('should exclude every given path in array', () => {\n let res = Utils.excludePathsFromChangeSet(changeset, ['assets[Prop3]', 'assets[Prop2]']);\n expect(res).to.be.deep.equal(multiExclusion);\n });\n\n it('should return undefined if no changeset is passed', () => {\n let res = Utils.excludePathsFromChangeSet(undefined, ['assets[Prop3]']);\n expect(res).to.be.undefined;\n });\n\n it('should not exclude if no paths are passed', () => {\n expect(Utils.excludePathsFromChangeSet(changeset)).to.be.deep.equal(changeset);\n expect(Utils.excludePathsFromChangeSet(changeset, '')).to.be.deep.equal(changeset);\n expect(Utils.excludePathsFromChangeSet(changeset, [])).to.be.deep.equal(changeset);\n });\n\n it('should not exclude if an invalid path is passed', () => {\n expect(Utils.excludePathsFromChangeSet(changeset, ['a.b.c'])).to.be.deep.equal(changeset);\n });\n\n it('should copy the changeset', () => {\n expect(Utils.excludePathsFromChangeSet(changeset, ['assets[prop3]'])).to.not.be.equal(changeset);\n });\n });\n});\n"]}
|