@fluid-experimental/property-properties 2.0.0-internal.3.0.2 → 2.0.0-internal.3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/containerSerializer.d.ts.map +1 -1
- package/dist/containerSerializer.js +5 -5
- package/dist/containerSerializer.js.map +1 -1
- package/dist/enableValidations.js.map +1 -1
- package/dist/index.d.ts +19 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/properties/abstractStaticCollectionProperty.d.ts +10 -10
- package/dist/properties/abstractStaticCollectionProperty.d.ts.map +1 -1
- package/dist/properties/abstractStaticCollectionProperty.js +70 -53
- package/dist/properties/abstractStaticCollectionProperty.js.map +1 -1
- package/dist/properties/arrayProperty.d.ts.map +1 -1
- package/dist/properties/arrayProperty.js +152 -103
- package/dist/properties/arrayProperty.js.map +1 -1
- package/dist/properties/baseProperty.d.ts +4 -4
- package/dist/properties/baseProperty.d.ts.map +1 -1
- package/dist/properties/baseProperty.js +69 -47
- package/dist/properties/baseProperty.js.map +1 -1
- package/dist/properties/boolProperty.d.ts.map +1 -1
- package/dist/properties/boolProperty.js +3 -3
- package/dist/properties/boolProperty.js.map +1 -1
- package/dist/properties/containerProperty.d.ts +8 -8
- package/dist/properties/containerProperty.d.ts.map +1 -1
- package/dist/properties/containerProperty.js +33 -26
- package/dist/properties/containerProperty.js.map +1 -1
- package/dist/properties/enumArrayProperty.d.ts.map +1 -1
- package/dist/properties/enumArrayProperty.js +14 -14
- package/dist/properties/enumArrayProperty.js.map +1 -1
- package/dist/properties/enumProperty.d.ts.map +1 -1
- package/dist/properties/enumProperty.js +17 -17
- package/dist/properties/enumProperty.js.map +1 -1
- package/dist/properties/floatProperties.js +4 -4
- package/dist/properties/floatProperties.js.map +1 -1
- package/dist/properties/index.d.ts +23 -23
- package/dist/properties/index.d.ts.map +1 -1
- package/dist/properties/index.js.map +1 -1
- package/dist/properties/indexedCollectionBaseProperty.d.ts.map +1 -1
- package/dist/properties/indexedCollectionBaseProperty.js +47 -37
- package/dist/properties/indexedCollectionBaseProperty.js.map +1 -1
- package/dist/properties/intProperties.d.ts.map +1 -1
- package/dist/properties/intProperties.js +10 -10
- package/dist/properties/intProperties.js.map +1 -1
- package/dist/properties/lazyLoadedProperties.js.map +1 -1
- package/dist/properties/mapProperty.d.ts.map +1 -1
- package/dist/properties/mapProperty.js +21 -17
- package/dist/properties/mapProperty.js.map +1 -1
- package/dist/properties/namedNodeProperty.d.ts.map +1 -1
- package/dist/properties/namedNodeProperty.js +3 -3
- package/dist/properties/namedNodeProperty.js.map +1 -1
- package/dist/properties/namedProperty.d.ts.map +1 -1
- package/dist/properties/namedProperty.js +7 -5
- package/dist/properties/namedProperty.js.map +1 -1
- package/dist/properties/nodeProperty.d.ts.map +1 -1
- package/dist/properties/nodeProperty.js +5 -3
- package/dist/properties/nodeProperty.js.map +1 -1
- package/dist/properties/primitiveTypeCasts.d.ts.map +1 -1
- package/dist/properties/primitiveTypeCasts.js +9 -9
- package/dist/properties/primitiveTypeCasts.js.map +1 -1
- package/dist/properties/referenceArrayProperty.d.ts.map +1 -1
- package/dist/properties/referenceArrayProperty.js +31 -25
- package/dist/properties/referenceArrayProperty.js.map +1 -1
- package/dist/properties/referenceMapProperty.d.ts.map +1 -1
- package/dist/properties/referenceMapProperty.js +18 -18
- package/dist/properties/referenceMapProperty.js.map +1 -1
- package/dist/properties/referenceProperty.d.ts.map +1 -1
- package/dist/properties/referenceProperty.js +33 -29
- package/dist/properties/referenceProperty.js.map +1 -1
- package/dist/properties/setProperty.d.ts.map +1 -1
- package/dist/properties/setProperty.js +31 -29
- package/dist/properties/setProperty.js.map +1 -1
- package/dist/properties/stringProperty.d.ts.map +1 -1
- package/dist/properties/stringProperty.js +56 -40
- package/dist/properties/stringProperty.js.map +1 -1
- package/dist/properties/uintProperties.js +5 -5
- package/dist/properties/uintProperties.js.map +1 -1
- package/dist/properties/valueArrayProperty.d.ts +1 -1
- package/dist/properties/valueArrayProperty.d.ts.map +1 -1
- package/dist/properties/valueArrayProperty.js +30 -29
- package/dist/properties/valueArrayProperty.js.map +1 -1
- package/dist/properties/valueMapProperty.d.ts.map +1 -1
- package/dist/properties/valueMapProperty.js +31 -29
- package/dist/properties/valueMapProperty.js.map +1 -1
- package/dist/properties/valueProperty.d.ts.map +1 -1
- package/dist/properties/valueProperty.js +11 -9
- package/dist/properties/valueProperty.js.map +1 -1
- package/dist/propertyFactory.d.ts.map +1 -1
- package/dist/propertyFactory.js +309 -252
- package/dist/propertyFactory.js.map +1 -1
- package/dist/propertyTemplate.d.ts +17 -17
- package/dist/propertyTemplate.d.ts.map +1 -1
- package/dist/propertyTemplate.js +64 -45
- package/dist/propertyTemplate.js.map +1 -1
- package/dist/propertyTemplateWrapper.d.ts.map +1 -1
- package/dist/propertyTemplateWrapper.js +40 -25
- package/dist/propertyTemplateWrapper.js.map +1 -1
- package/dist/propertyUtils.d.ts.map +1 -1
- package/dist/propertyUtils.js.map +1 -1
- package/dist/test/properties/arrayProperty.spec.js +566 -490
- package/dist/test/properties/arrayProperty.spec.js.map +1 -1
- package/dist/test/properties/baseProperty.spec.js +293 -280
- package/dist/test/properties/baseProperty.spec.js.map +1 -1
- package/dist/test/properties/containerProperty.spec.js +100 -94
- package/dist/test/properties/containerProperty.spec.js.map +1 -1
- package/dist/test/properties/customArrayProperty.spec.js +174 -147
- package/dist/test/properties/customArrayProperty.spec.js.map +1 -1
- package/dist/test/properties/enumArrayProperty.spec.js +67 -63
- package/dist/test/properties/enumArrayProperty.spec.js.map +1 -1
- package/dist/test/properties/enumProperty.spec.js +115 -97
- package/dist/test/properties/enumProperty.spec.js.map +1 -1
- package/dist/test/properties/float32.spec.js +5 -5
- package/dist/test/properties/float32.spec.js.map +1 -1
- package/dist/test/properties/int64ArrayProperty.spec.js +157 -93
- package/dist/test/properties/int64ArrayProperty.spec.js.map +1 -1
- package/dist/test/properties/int64MapProperty.spec.js +185 -166
- package/dist/test/properties/int64MapProperty.spec.js.map +1 -1
- package/dist/test/properties/int64Property.spec.js +109 -109
- package/dist/test/properties/int64Property.spec.js.map +1 -1
- package/dist/test/properties/isLeafNode.spec.js +75 -76
- package/dist/test/properties/isLeafNode.spec.js.map +1 -1
- package/dist/test/properties/mapProperty.spec.js +571 -531
- package/dist/test/properties/mapProperty.spec.js.map +1 -1
- package/dist/test/properties/namedNodeProperty.spec.js +31 -31
- package/dist/test/properties/namedNodeProperty.spec.js.map +1 -1
- package/dist/test/properties/nodeProperty.spec.js +805 -795
- package/dist/test/properties/nodeProperty.spec.js.map +1 -1
- package/dist/test/properties/referenceProperty.spec.js +729 -679
- package/dist/test/properties/referenceProperty.spec.js.map +1 -1
- package/dist/test/properties/relationshipProperty.spec.js +16 -16
- package/dist/test/properties/relationshipProperty.spec.js.map +1 -1
- package/dist/test/properties/setProperty.spec.js +288 -227
- package/dist/test/properties/setProperty.spec.js.map +1 -1
- package/dist/test/properties/stringProperty.spec.js +326 -318
- package/dist/test/properties/stringProperty.spec.js.map +1 -1
- package/dist/test/properties/uint64Property.spec.js +46 -36
- package/dist/test/properties/uint64Property.spec.js.map +1 -1
- package/dist/test/properties/valueMapProperty.spec.js +259 -246
- package/dist/test/properties/valueMapProperty.spec.js.map +1 -1
- package/dist/test/properties/valueProperty.spec.js +49 -43
- package/dist/test/properties/valueProperty.spec.js.map +1 -1
- package/dist/test/propertyFactory.spec.js +2038 -1631
- package/dist/test/propertyFactory.spec.js.map +1 -1
- package/dist/test/propertyTemplateWrapper.spec.js +72 -102
- package/dist/test/propertyTemplateWrapper.spec.js.map +1 -1
- package/dist/test/propertyUtils.spec.js +22 -21
- package/dist/test/propertyUtils.spec.js.map +1 -1
- package/dist/test/reversibleChangeset.spec.js +857 -703
- package/dist/test/reversibleChangeset.spec.js.map +1 -1
- package/dist/test/setup.js +5 -5
- package/dist/test/setup.js.map +1 -1
- package/dist/test/tsconfig.tsbuildinfo +1 -1
- package/dist/test/utils.spec.js +1334 -1144
- package/dist/test/utils.spec.js.map +1 -1
- package/dist/test/validation/badMissingSemverInTypeid.js +20 -20
- package/dist/test/validation/badMissingSemverInTypeid.js.map +1 -1
- package/dist/test/validation/badPrimitiveTypeid.js +12 -12
- package/dist/test/validation/badPrimitiveTypeid.js.map +1 -1
- package/dist/test/validation/goodColorId.js +91 -91
- package/dist/test/validation/goodColorId.js.map +1 -1
- package/dist/test/validation/goodColorPalette.js +4 -4
- package/dist/test/validation/goodColorPalette.js.map +1 -1
- package/dist/test/validation/goodPointId.js +20 -20
- package/dist/test/validation/goodPointId.js.map +1 -1
- package/dist/test/validation/reversibleChangeSetTestData.js +23841 -2
- package/dist/test/validation/reversibleChangeSetTestData.js.map +1 -1
- package/lib/containerSerializer.d.ts.map +1 -1
- package/lib/containerSerializer.js +5 -5
- package/lib/containerSerializer.js.map +1 -1
- package/lib/enableValidations.js.map +1 -1
- package/lib/index.d.ts +19 -19
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +19 -19
- package/lib/index.js.map +1 -1
- package/lib/properties/abstractStaticCollectionProperty.d.ts +10 -10
- package/lib/properties/abstractStaticCollectionProperty.d.ts.map +1 -1
- package/lib/properties/abstractStaticCollectionProperty.js +70 -53
- package/lib/properties/abstractStaticCollectionProperty.js.map +1 -1
- package/lib/properties/arrayProperty.d.ts.map +1 -1
- package/lib/properties/arrayProperty.js +152 -103
- package/lib/properties/arrayProperty.js.map +1 -1
- package/lib/properties/baseProperty.d.ts +4 -4
- package/lib/properties/baseProperty.d.ts.map +1 -1
- package/lib/properties/baseProperty.js +73 -51
- package/lib/properties/baseProperty.js.map +1 -1
- package/lib/properties/boolProperty.d.ts.map +1 -1
- package/lib/properties/boolProperty.js +3 -3
- package/lib/properties/boolProperty.js.map +1 -1
- package/lib/properties/containerProperty.d.ts +8 -8
- package/lib/properties/containerProperty.d.ts.map +1 -1
- package/lib/properties/containerProperty.js +33 -26
- package/lib/properties/containerProperty.js.map +1 -1
- package/lib/properties/enumArrayProperty.d.ts.map +1 -1
- package/lib/properties/enumArrayProperty.js +14 -14
- package/lib/properties/enumArrayProperty.js.map +1 -1
- package/lib/properties/enumProperty.d.ts.map +1 -1
- package/lib/properties/enumProperty.js +17 -17
- package/lib/properties/enumProperty.js.map +1 -1
- package/lib/properties/floatProperties.js +4 -4
- package/lib/properties/floatProperties.js.map +1 -1
- package/lib/properties/index.d.ts +23 -23
- package/lib/properties/index.d.ts.map +1 -1
- package/lib/properties/index.js +23 -23
- package/lib/properties/index.js.map +1 -1
- package/lib/properties/indexedCollectionBaseProperty.d.ts.map +1 -1
- package/lib/properties/indexedCollectionBaseProperty.js +47 -37
- package/lib/properties/indexedCollectionBaseProperty.js.map +1 -1
- package/lib/properties/intProperties.d.ts.map +1 -1
- package/lib/properties/intProperties.js +10 -10
- package/lib/properties/intProperties.js.map +1 -1
- package/lib/properties/lazyLoadedProperties.js.map +1 -1
- package/lib/properties/mapProperty.d.ts.map +1 -1
- package/lib/properties/mapProperty.js +21 -17
- package/lib/properties/mapProperty.js.map +1 -1
- package/lib/properties/namedNodeProperty.d.ts.map +1 -1
- package/lib/properties/namedNodeProperty.js +3 -3
- package/lib/properties/namedNodeProperty.js.map +1 -1
- package/lib/properties/namedProperty.d.ts.map +1 -1
- package/lib/properties/namedProperty.js +7 -5
- package/lib/properties/namedProperty.js.map +1 -1
- package/lib/properties/nodeProperty.d.ts.map +1 -1
- package/lib/properties/nodeProperty.js +5 -3
- package/lib/properties/nodeProperty.js.map +1 -1
- package/lib/properties/primitiveTypeCasts.d.ts.map +1 -1
- package/lib/properties/primitiveTypeCasts.js +9 -9
- package/lib/properties/primitiveTypeCasts.js.map +1 -1
- package/lib/properties/referenceArrayProperty.d.ts.map +1 -1
- package/lib/properties/referenceArrayProperty.js +31 -25
- package/lib/properties/referenceArrayProperty.js.map +1 -1
- package/lib/properties/referenceMapProperty.d.ts.map +1 -1
- package/lib/properties/referenceMapProperty.js +18 -18
- package/lib/properties/referenceMapProperty.js.map +1 -1
- package/lib/properties/referenceProperty.d.ts.map +1 -1
- package/lib/properties/referenceProperty.js +33 -29
- package/lib/properties/referenceProperty.js.map +1 -1
- package/lib/properties/setProperty.d.ts.map +1 -1
- package/lib/properties/setProperty.js +31 -29
- package/lib/properties/setProperty.js.map +1 -1
- package/lib/properties/stringProperty.d.ts.map +1 -1
- package/lib/properties/stringProperty.js +56 -40
- package/lib/properties/stringProperty.js.map +1 -1
- package/lib/properties/uintProperties.js +5 -5
- package/lib/properties/uintProperties.js.map +1 -1
- package/lib/properties/valueArrayProperty.d.ts +1 -1
- package/lib/properties/valueArrayProperty.d.ts.map +1 -1
- package/lib/properties/valueArrayProperty.js +30 -29
- package/lib/properties/valueArrayProperty.js.map +1 -1
- package/lib/properties/valueMapProperty.d.ts.map +1 -1
- package/lib/properties/valueMapProperty.js +31 -29
- package/lib/properties/valueMapProperty.js.map +1 -1
- package/lib/properties/valueProperty.d.ts.map +1 -1
- package/lib/properties/valueProperty.js +11 -9
- package/lib/properties/valueProperty.js.map +1 -1
- package/lib/propertyFactory.d.ts.map +1 -1
- package/lib/propertyFactory.js +309 -252
- package/lib/propertyFactory.js.map +1 -1
- package/lib/propertyTemplate.d.ts +17 -17
- package/lib/propertyTemplate.d.ts.map +1 -1
- package/lib/propertyTemplate.js +64 -45
- package/lib/propertyTemplate.js.map +1 -1
- package/lib/propertyTemplateWrapper.d.ts.map +1 -1
- package/lib/propertyTemplateWrapper.js +40 -25
- package/lib/propertyTemplateWrapper.js.map +1 -1
- package/lib/propertyUtils.d.ts.map +1 -1
- package/lib/propertyUtils.js.map +1 -1
- package/package.json +28 -28
- package/src/index.d.ts +2750 -2681
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/mapProperty.spec.js"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @fileoverview In this file, we will test the map property object described in /src/properties/mapProperty.js\n */\n\ndescribe('MapProperty', function() {\n var PropertyFactory, BaseProperty, ChangeSet, generateGuid, PATH_TOKENS;\n var changeSetWithTwoMapEntries, _, changeSetWithTwoMapEntries_full, removalChangeSet;\n var myNode, mapNode1, mapNode2, map;\n\n before(function() {\n // Get all the objects we need in this test here.\n PropertyFactory = require('../..').PropertyFactory;\n BaseProperty = require('../..').BaseProperty;\n ChangeSet = require('@fluid-experimental/property-changeset').ChangeSet;\n _ = require('lodash');\n generateGuid = require('@fluid-experimental/property-common').GuidUtils.generateGUID;\n PATH_TOKENS = require('../..').BaseProperty.PATH_TOKENS;\n\n // Register a template with a set property for the tests\n var TestPropertyTemplate = {\n typeid: 'autodesk.tests:MapTestPropertyID-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'stringProperty', typeid: 'String' },\n { id: 'stringProperty2', typeid: 'String' },\n { id: 'map', context: 'map', typeid: 'NamedProperty' },\n ],\n };\n var AnonymousTestPropertyTemplate = {\n typeid: 'autodesk.tests:AnonymousMapTestPropertyID-1.0.0',\n properties: [\n { id: 'stringProperty', typeid: 'String' },\n ],\n };\n\n var PrimitiveMapPropertyTemplate = {\n typeid: 'autodesk.tests:PrimitiveMap-1.0.0',\n properties: [\n { id: 'map', context: 'map', typeid: 'Int32' },\n ],\n };\n\n var NonPrimitiveMapPropertyTemplate = {\n typeid: 'autodesk.tests:NonPrimitiveMap-1.0.0',\n properties: [\n { typeid: 'autodesk.tests:StringProperty-1.0.0', id: 'map', context: 'map' },\n ],\n };\n\n var StringPropertyTemplate = {\n typeid: 'autodesk.tests:StringProperty-1.0.0',\n properties: [\n { id: 'stringValue', typeid: 'String' },\n ],\n };\n\n var ComplexProperty = {\n typeid: 'autodesk.tests:ComplexProperty-1.0.0',\n properties: [\n {\n id: 'nested', properties: [\n { id: 'data', typeid: 'Int32' },\n ],\n },\n ],\n };\n\n var ComplexMap = {\n typeid: 'autodesk.tests:ComplexMap-1.0.0',\n properties: [\n {\n id: 'path', properties: [\n { id: 'map', typeid: 'autodesk.tests:ComplexProperty-1.0.0', context: 'map' },\n ],\n },\n ],\n };\n\n PropertyFactory._reregister(TestPropertyTemplate);\n PropertyFactory._reregister(AnonymousTestPropertyTemplate);\n PropertyFactory._reregister(PrimitiveMapPropertyTemplate);\n PropertyFactory._reregister(NonPrimitiveMapPropertyTemplate);\n PropertyFactory._reregister(StringPropertyTemplate);\n PropertyFactory._reregister(ComplexMap);\n PropertyFactory._reregister(ComplexProperty);\n myNode = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n mapNode1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n mapNode2 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n map = myNode._properties.map;\n });\n\n // Helper functions for the test cases\n var keyCounter = 0;\n var resetKeyCounter = function() {\n keyCounter = 0;\n };\n\n // Inserts a node with the given guid (a new one is generated when undefined)\n var insertNodeInRootWithKeyAndGuid = function(key, guid, root) {\n var node = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n if (key === undefined) {\n key = 'node' + keyCounter++;\n }\n if (guid !== undefined) {\n node._properties.guid.value = guid;\n }\n root._properties.map.insert(key, node);\n };\n\n // Inserts a new node in the root\n var insertNodeInRoot = function(root) {\n insertNodeInRootWithKeyAndGuid(undefined, undefined, root);\n };\n\n // Returns a function that will insert a node with a constant GUID\n var insertUniqueNodeInRoot = function() {\n var key = 'node' + keyCounter++;\n return insertNodeInRootWithKeyAndGuid.bind(undefined, key, generateGuid());\n };\n\n // Inserts a new node as leaf\n var insertNodeAsLeaf = function(root) {\n var leaf = root;\n while (leaf._properties.map.getAsArray().length > 0) {\n leaf = leaf._properties.map.getAsArray()[0];\n }\n var node = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var key = 'node' + keyCounter++;\n leaf._properties.map.insert(key, node);\n };\n\n // Removes the first node from the root\n var removeFirstNodeInRoot = function(root) {\n var firstKey = root._properties.map.getIds()[0];\n root._properties.map.remove(firstKey);\n };\n\n // Modifies the leaf node\n var modifyLeaf = function(root) {\n var leaf = root;\n while (leaf._properties.map.getAsArray().length > 0) {\n leaf = leaf._properties.map.getAsArray()[0];\n }\n leaf._properties.stringProperty.value = leaf._properties.stringProperty.value + '+';\n };\n\n describe('API methods', function() {\n var myMap, stringProp1, stringProp2;\n before(function() {\n myMap = PropertyFactory.create('autodesk.tests:NonPrimitiveMap-1.0.0')._properties.map;\n stringProp1 = PropertyFactory.create('autodesk.tests:StringProperty-1.0.0');\n stringProp2 = PropertyFactory.create('autodesk.tests:StringProperty-1.0.0');\n });\n it('.clear should work', function() {\n myMap.insert('one', stringProp1);\n myMap.insert('two', stringProp2);\n expect(myMap.getEntriesReadOnly()).to.deep.equal({ 'one': stringProp1, 'two': stringProp2 });\n myMap.clear();\n expect(myMap.getEntriesReadOnly()).to.be.empty;\n });\n\n it('.getAsArray should return an array of map values', function() {\n myMap.insert('one', stringProp1);\n myMap.insert('two', stringProp2);\n expect(myMap.getAsArray()).to.deep.equal([stringProp1, stringProp2]);\n });\n\n it('.getFullTypeid should return a string of the typeid with or without collection', function() {\n expect(myMap.getFullTypeid()).to.equal('map<autodesk.tests:StringProperty-1.0.0>');\n // hideCollection: true\n expect(myMap.getFullTypeid(true)).to.equal('autodesk.tests:StringProperty-1.0.0');\n });\n\n it('.getTypeid should return a string of the typeid', function() {\n expect(myMap.getTypeid()).to.equal('autodesk.tests:StringProperty-1.0.0');\n });\n\n it('.getIds should return an array of map keys', function() {\n myMap.insert('one', stringProp1);\n myMap.insert('two', stringProp2);\n expect(myMap.getIds()).to.deep.equal(['one', 'two']);\n });\n\n it('.remove should remove an item from a map and return the removed item', function() {\n myMap.insert('one', stringProp1);\n myMap.insert('two', stringProp2);\n myMap.remove('one');\n expect(myMap.getEntriesReadOnly()).to.deep.equal({ 'two': stringProp2 });\n expect(myMap.remove('two')).to.equal(stringProp2);\n });\n\n it('.getContext should return map', function() {\n expect(myMap.getContext()).to.equal('map');\n });\n\n it('getId should return the id', function() {\n expect(myMap.getId()).to.equal('map');\n });\n\n afterEach(function() {\n myMap.clear();\n });\n });\n\n describe('get and resolvePath', function() {\n var complexMap, complexProperty1, complexProperty2;\n before(function() {\n complexMap = PropertyFactory.create('autodesk.tests:ComplexMap-1.0.0')._properties.path.map;\n complexProperty1 = PropertyFactory.create('autodesk.tests:ComplexProperty-1.0.0');\n complexProperty2 = PropertyFactory.create('autodesk.tests:ComplexProperty-1.0.0');\n complexProperty1.get('nested').get('data').setValue(123);\n complexProperty2.get('nested').get('data').setValue(456);\n complexMap.insert('one', complexProperty1);\n complexMap.insert('two', complexProperty2);\n });\n\n it('should resolve a simple path', function() {\n expect(complexMap.resolvePath('one.nested.data').getValue()).to.equal(123);\n expect(complexMap.get('one').get('nested').get('data').getValue()).to.equal(123);\n expect(complexMap.get(['one', 'nested', 'data']).getValue()).to.equal(123);\n });\n\n it('should work with raise path tokens', function() {\n expect(complexMap.resolvePath('../../path.map.one')).to.deep.equal(complexProperty1);\n expect(complexMap.get(PATH_TOKENS.UP).get(PATH_TOKENS.UP).get('path')\n .get('map').get('two')).to.deep.equal(complexProperty2);\n expect(complexMap.get([PATH_TOKENS.UP, 'map', 'two', PATH_TOKENS.UP, 'two']))\n .to.deep.equal(complexProperty2);\n });\n\n it('should work with root tokens', function() {\n expect(complexMap.resolvePath('/path.map.two')).to.deep.equal(complexProperty2);\n expect(complexMap.get(PATH_TOKENS.ROOT).get('path').get('map').get('two').get('nested')\n .get('data').getValue()).to.equal(456);\n expect(complexMap.get([PATH_TOKENS.ROOT, 'path', 'map', 'one'])).to.deep.equal(complexProperty1);\n });\n });\n\n describe('Testing creation, assignment and serialization', function() {\n it('should be empty at the beginning', function() {\n expect(map.getEntriesReadOnly()).to.be.empty;\n expect(map.serialize({ 'dirtyOnly': true })).to.be.empty;\n });\n\n it('should be possible to insert into the map', function() {\n // Test insertion of the first node\n map.insert('node1', mapNode1);\n expect(map.has('node1')).to.be.ok;\n expect(map.has('node2')).to.be.not.ok;\n expect(map.get('node2')).to.equal(undefined);\n expect(mapNode1.getParent()).to.equal(map);\n\n var CS = map.serialize({ 'dirtyOnly': true });\n expect(CS.insert &&\n CS.insert['autodesk.tests:MapTestPropertyID-1.0.0'] &&\n _.keys(CS.insert['autodesk.tests:MapTestPropertyID-1.0.0']).length === 1 &&\n _.keys(CS.insert['autodesk.tests:MapTestPropertyID-1.0.0'])[0] === 'node1').to.be.ok;\n\n // Test insertion of the second node\n map.insert('node2', mapNode2);\n expect(map.has('node2')).to.be.ok;\n expect(map.get('node2')).to.equal(mapNode2);\n changeSetWithTwoMapEntries = map.serialize({ 'dirtyOnly': true });\n expect(changeSetWithTwoMapEntries.insert &&\n changeSetWithTwoMapEntries.insert['autodesk.tests:MapTestPropertyID-1.0.0'] &&\n _.keys(changeSetWithTwoMapEntries.insert['autodesk.tests:MapTestPropertyID-1.0.0']).length === 2 &&\n _.includes(_.keys(changeSetWithTwoMapEntries.insert['autodesk.tests:MapTestPropertyID-1.0.0']), 'node1') &&\n _.includes(\n _.keys(changeSetWithTwoMapEntries.insert['autodesk.tests:MapTestPropertyID-1.0.0']), 'node2')).to.be.ok;\n\n changeSetWithTwoMapEntries_full = map.serialize({ 'dirtyOnly': false });\n expect(changeSetWithTwoMapEntries).to.deep.equal(changeSetWithTwoMapEntries_full);\n });\n\n it('Should track dirtiness', function() {\n map.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n expect(map.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n })).to.be.empty;\n expect(map.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n })).deep.equal(changeSetWithTwoMapEntries_full);\n expect(map.serialize({ 'dirtyOnly': false })).deep.equal(changeSetWithTwoMapEntries_full);\n });\n\n it('Should handle removals correctly', function() {\n map.remove('node1');\n expect(mapNode1.getParent()).to.be.undefined;\n map.remove('node2');\n expect(map.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n })).to.be.empty;\n expect(map.serialize({ 'dirtyOnly': false })).to.be.empty;\n removalChangeSet = map.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n });\n expect(removalChangeSet).to.have.all.keys(['remove']);\n expect(removalChangeSet.remove).to.have.length(2);\n expect(removalChangeSet.remove).to.contain('node1');\n expect(removalChangeSet.remove).to.contain('node2');\n });\n\n it('Should support deserialization', function() {\n // Deserialization should return an identical property\n var deserializedNode = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var deserializedChanges1 = deserializedNode._properties.map.deserialize(changeSetWithTwoMapEntries);\n var CS4 = deserializedNode._properties.map.serialize({ 'dirtyOnly': false });\n expect(CS4).to.deep.equal(changeSetWithTwoMapEntries);\n expect(deserializedChanges1).to.deep.equal(changeSetWithTwoMapEntries);\n expect(deserializedNode._properties.map.serialize({ 'dirtyOnly': true })).to.deep.equal(changeSetWithTwoMapEntries);\n expect(deserializedNode._properties.map.serialize({ 'dirtyOnly': true })).to.deep.equal(changeSetWithTwoMapEntries);\n expect(deserializedNode._properties.map.serialize({ 'dirtyOnly': true })).to.deep.equal(changeSetWithTwoMapEntries);\n\n // Deserializing the same ChangeSet twice should return an empty ChangeSet\n deserializedNode._properties.map.cleanDirty();\n var deserializedChanges2 = deserializedNode._properties.map.deserialize(changeSetWithTwoMapEntries);\n expect(deserializedChanges2).to.be.empty;\n expect(deserializedNode._properties.map.serialize({ 'dirtyOnly': true })).to.be.empty;\n\n // Deserialization of a modification should return the correct modification\n var modifiedProperty = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n modifiedProperty._properties.map.deserialize(changeSetWithTwoMapEntries);\n modifiedProperty._properties.map.get('node2')._properties.stringProperty.value = 'newValue';\n deserializedNode._properties.map.cleanDirty();\n var deserializedChanges3 = deserializedNode._properties.map.deserialize(\n modifiedProperty._properties.map.serialize({ 'dirtyOnly': false }));\n var expectedChanges = {\n 'modify': {\n 'autodesk.tests:MapTestPropertyID-1.0.0': {\n 'node2': {\n 'String': {\n 'stringProperty': 'newValue',\n },\n },\n },\n },\n };\n expect(deserializedChanges3).to.deep.equal(expectedChanges);\n expect(deserializedNode._properties.map.serialize({ 'dirtyOnly': true })).to.deep.equal(expectedChanges);\n\n deserializedNode._properties.map.cleanDirty();\n var deserializedChanges4 = deserializedNode._properties.map.deserialize({});\n expect(deserializedChanges4).to.deep.equal(removalChangeSet);\n expect(deserializedNode._properties.map.serialize({ 'dirtyOnly': true })).to.deep.equal(removalChangeSet);\n });\n\n it('Should support deserialization of falsy primitive types', function() {\n var testProp1 = PropertyFactory.create('map<Bool>');\n testProp1.set('entry', false);\n var changes = testProp1.deserialize(testProp1.serialize({ 'dirtyOnly': false }));\n expect(changes).to.be.empty;\n });\n\n it('Should track modifies', function() {\n var modifyNode1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var modifyNode2 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n modifyNode1._properties.map.deserialize(changeSetWithTwoMapEntries);\n modifyNode2._properties.map.deserialize(changeSetWithTwoMapEntries);\n\n modifyNode1._properties.map.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n var child1 = modifyNode1._properties.map.get('node1');\n child1._properties.stringProperty.value = 'modify test';\n var modifyChangeSet = modifyNode1._properties.map.serialize({ 'dirtyOnly': true });\n modifyNode2._properties.map.applyChangeSet(modifyChangeSet);\n expect(modifyNode2._properties.map.serialize({ 'dirtyOnly': false }))\n .to.deep.equal(modifyNode1._properties.map.serialize({ 'dirtyOnly': false }));\n });\n\n it('Should support hierarchical properties', function() {\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var node3 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n // Create a hierarchy of three nodes\n node1._properties.map.insert('node', node2);\n node2._properties.map.insert('node', node3);\n node3._properties.stringProperty.value = 'test';\n\n // Check that deserializing and serializing works with a hierarchy\n var hierarchicalChangeSet = node1.serialize({ 'dirtyOnly': true });\n var deserializedNode = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n deserializedNode.deserialize(hierarchicalChangeSet);\n var child1 = deserializedNode._properties.map.getAsArray()[0];\n expect(child1).to.not.equal(undefined);\n var child2 = child1._properties.map.getAsArray()[0];\n expect(child2).to.not.equal(undefined);\n expect(child2._properties.stringProperty.value).to.equal('test');\n\n // Test that hierarchical modifies work\n node1.cleanDirty();\n node3._properties.stringProperty.value = 'test2';\n var hierarchicalModifyChangeSet = node1.serialize({ 'dirtyOnly': true });\n\n deserializedNode.applyChangeSet(hierarchicalModifyChangeSet);\n child1 = deserializedNode._properties.map.getAsArray()[0];\n expect(child1).to.not.equal(undefined);\n child2 = child1._properties.map.getAsArray()[0];\n expect(child2).to.not.equal(undefined);\n expect(child2._properties.stringProperty.value).to.equal('test2');\n });\n\n it('should be possible to use anonymous properties', function() {\n var rootNode = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var rootNode2 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var node1 = PropertyFactory.create('autodesk.tests:AnonymousMapTestPropertyID-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:AnonymousMapTestPropertyID-1.0.0');\n rootNode._properties.map.insert('node1', node1);\n rootNode._properties.map.insert('node2', node2);\n var testChangeSet = rootNode.serialize({ 'dirtyOnly': false });\n\n expect(rootNode._properties.map.get('node1')).to.be.equal(node1);\n expect(rootNode._properties.map.get('node2')).to.be.equal(node2);\n rootNode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n node1._properties.stringProperty.value = '1';\n node2._properties.stringProperty.value = '2';\n\n rootNode2.deserialize(testChangeSet);\n rootNode2.applyChangeSet(rootNode.serialize({ 'dirtyOnly': true }));\n expect(rootNode2.serialize({ 'dirtyOnly': false })).to.be.deep.equal(rootNode.serialize({ 'dirtyOnly': false }));\n });\n\n it('inserting the same key twice should throw an exception', function() {\n var rootNode = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n rootNode._properties.map.insert('node1', node1);\n expect(function() {\n rootNode._properties.map.insert('node1', node2);\n }).to.throw();\n });\n\n it('set should overwrite existing entry', function() {\n var rootNode = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var node3 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n rootNode._properties.map.set('node1', node1);\n rootNode._properties.map.set('node1', node2);\n // the set should overwrite the insert\n expect(rootNode.serialize({ 'dirtyOnly': true })['map<NamedProperty>'].map).to.have.all.keys('insert');\n\n // Overwriting with the same property shouldn't dirty the node\n rootNode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n rootNode._properties.map.set('node1', node2);\n expect(ChangeSet.isEmptyChangeSet(rootNode.serialize({ 'dirtyOnly': true }))).to.be.ok;\n expect(rootNode.isDirty()).to.be.false;\n\n // Overwriting with a different value should result in an remove and insert\n rootNode._properties.map.set('node1', node1);\n expect(rootNode.serialize({ 'dirtyOnly': true })['map<NamedProperty>'].map).to.have.all.keys('insert', 'remove');\n\n rootNode._properties.map.set('node1', node3);\n expect(rootNode.serialize({ 'dirtyOnly': true })['map<NamedProperty>'].map).to.have.all.keys('insert', 'remove');\n expect(rootNode.serialize({ 'dirtyOnly': true })['map<NamedProperty>'].map.remove).to.have.length(1);\n });\n\n it('set should throw if the value inserted is not a property', function() {\n var rootNode = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0')._properties.map;\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n rootNode.insert('node', node1);\n var incorrectFn = function() {\n rootNode.set('node', 8);\n };\n expect(incorrectFn).to.throw();\n });\n\n it('insert should work when inserting a primitive value', function() {\n var rootNode = PropertyFactory.create('autodesk.tests:PrimitiveMap-1.0.0')._properties.map;\n rootNode.insert('node0', 1);\n var correctFn = function() {\n rootNode.insert('node1', 4);\n };\n expect(correctFn).to.not.throw();\n });\n\n it('inserting the same node twice should be a bug', function() {\n var rootNode = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var node = PropertyFactory.create('autodesk.tests:AnonymousMapTestPropertyID-1.0.0');\n\n // Try to insert the same node object under two keys\n rootNode._properties.map.insert('node', node);\n expect(function() {\n rootNode._properties.map.insert('node2', node);\n }).to.throw();\n\n // After removing it, adding it under a new key should be possible\n rootNode._properties.map.remove('node');\n rootNode._properties.map.insert('node2', node);\n });\n\n it('setValues should work for primitive maps', function() {\n var node = PropertyFactory.create('autodesk.tests:AnonymousMapTestPropertyID-1.0.0');\n\n node.setValues({\n 'stringProperty': 'newString!!',\n });\n expect(node.get('stringProperty').getValue()).to.equal('newString!!');\n });\n\n it('setValues should replace values for primitive types ', function() {\n var PrimitiveInt32MapTemplate = {\n typeid: 'autodesk.tests:PrimitiveInt32Map-1.0.0',\n properties: [\n { typeid: 'Int32', id: 'map', context: 'map' },\n ],\n };\n\n PropertyFactory.register(PrimitiveInt32MapTemplate);\n\n var node = PropertyFactory.create('autodesk.tests:PrimitiveInt32Map-1.0.0');\n\n node.get('map').insert('firstKey', 111);\n node.get('map').insert('secondKey', 222);\n\n expect(node.get('map').getEntriesReadOnly().firstKey).to.equal(111);\n expect(node.get('map').getEntriesReadOnly().secondKey).to.equal(222);\n\n node.setValues({\n 'map': {\n 'firstKey': 333,\n },\n });\n\n expect(node.get('map').getEntriesReadOnly().firstKey).to.equal(333);\n expect(node.get('map').getEntriesReadOnly().secondKey).to.equal(222);\n });\n\n it('getValues should work for primitive maps', function() {\n var rootNode = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var node = PropertyFactory.create('autodesk.tests:AnonymousMapTestPropertyID-1.0.0');\n\n rootNode._properties.map.insert('node', node);\n\n rootNode._properties.map.setValues({\n 'node': {\n 'stringProperty': 'newString!!',\n },\n });\n\n var expectedResult = {\n node: {\n 'stringProperty': 'newString!!',\n },\n };\n expect(rootNode._properties.map.getValues()).to.deep.equal(expectedResult);\n });\n\n it('setValues should work for custom maps', function() {\n var mapProp = PropertyFactory.create('autodesk.tests:NonPrimitiveMap-1.0.0');\n var string1 = PropertyFactory.create('autodesk.tests:StringProperty-1.0.0');\n var string2 = PropertyFactory.create('autodesk.tests:StringProperty-1.0.0');\n\n mapProp.get('map').insert('firstString', string1);\n mapProp.get('map').insert('secondString', string2);\n mapProp.setValues({\n 'map': {\n 'firstString': {\n 'stringValue': 'test1',\n },\n 'secondString': {\n 'stringValue': 'test2',\n },\n },\n });\n\n expect(mapProp.get(['map', 'firstString', 'stringValue']).getValue()).to.equal('test1');\n expect(mapProp.get(['map', 'secondString', 'stringValue']).getValue()).to.equal('test2');\n\n mapProp.get('map').setValues({ 'firstString': { 'stringValue': 'test1_updated' } });\n\n expect(mapProp.get(['map', 'firstString', 'stringValue']).getValue()).to.equal('test1_updated');\n expect(mapProp.get(['map', 'secondString', 'stringValue']).getValue()).to.equal('test2');\n });\n\n it('setValues should update values for existing keys and create new ones for non-existing keys', function() {\n var mapProp = PropertyFactory.create('autodesk.tests:NonPrimitiveMap-1.0.0');\n\n mapProp.setValues({\n 'map': {\n 'firstString': {\n 'stringValue': 'test1',\n },\n 'secondString': {\n 'stringValue': 'test2',\n },\n },\n });\n\n expect(mapProp.get(['map', 'firstString', 'stringValue']).getValue()).to.equal('test1');\n expect(mapProp.get(['map', 'secondString', 'stringValue']).getValue()).to.equal('test2');\n\n mapProp.setValues({\n 'map': {\n 'secondString': {\n 'stringValue': 'test2-upd',\n },\n 'thirdString': {\n 'stringValue': 'test3',\n },\n },\n });\n\n expect(mapProp.get(['map', 'firstString', 'stringValue']).getValue()).to.equal('test1');\n expect(mapProp.get(['map', 'secondString', 'stringValue']).getValue()).to.equal('test2-upd');\n expect(mapProp.get(['map', 'thirdString', 'stringValue']).getValue()).to.equal('test3');\n\n mapProp.setValues({\n 'map': {\n 'fourthString': {\n 'stringValue': 'test4',\n },\n 'thirdString': {\n 'stringValue': 'test3-upd',\n },\n },\n });\n\n expect(mapProp.get(['map', 'firstString', 'stringValue']).getValue()).to.equal('test1');\n expect(mapProp.get(['map', 'secondString', 'stringValue']).getValue()).to.equal('test2-upd');\n expect(mapProp.get(['map', 'thirdString', 'stringValue']).getValue()).to.equal('test3-upd');\n expect(mapProp.get(['map', 'fourthString', 'stringValue']).getValue()).to.equal('test4');\n });\n\n it('getValues should work for custom maps', function() {\n var mapProp = PropertyFactory.create('autodesk.tests:NonPrimitiveMap-1.0.0');\n var string1 = PropertyFactory.create('autodesk.tests:StringProperty-1.0.0');\n var string2 = PropertyFactory.create('autodesk.tests:StringProperty-1.0.0');\n\n mapProp._properties.map.insert('firstString', string1);\n mapProp._properties.map.insert('secondString', string2);\n\n mapProp.setValues({\n 'map': {\n 'firstString': {\n 'stringValue': 'test1',\n },\n 'secondString': {\n 'stringValue': 'test2',\n },\n },\n });\n\n var expectedResult = {\n 'map': {\n 'firstString': {\n 'stringValue': 'test1',\n },\n 'secondString': {\n 'stringValue': 'test2',\n },\n },\n };\n expect(mapProp.getValues()).to.deep.equal(expectedResult);\n });\n\n it('setValues should create new items from typed properties if key does not exist', function() {\n var mapProp = PropertyFactory.create('autodesk.tests:NonPrimitiveMap-1.0.0');\n var string1 = PropertyFactory.create('autodesk.tests:StringProperty-1.0.0', null, { stringValue: 'test1' });\n var string2 = PropertyFactory.create('autodesk.tests:StringProperty-1.0.0', null, { stringValue: 'test2' });\n\n mapProp.setValues({\n 'map': {\n 'firstString': string1,\n 'secondString': string2,\n },\n });\n\n expect(mapProp.get(['map', 'firstString', 'stringValue']).getValue()).to.equal('test1');\n expect(mapProp.get(['map', 'secondString', 'stringValue']).getValue()).to.equal('test2');\n });\n\n it('setValues should create new items from untyped inputs if key does not exist', function() {\n var mapProp = PropertyFactory.create('autodesk.tests:NonPrimitiveMap-1.0.0');\n\n mapProp.setValues({\n 'map': {\n 'firstString': {\n 'stringValue': 'test1',\n },\n 'secondString': {\n 'stringValue': 'test2',\n },\n },\n });\n\n expect(mapProp.get(['map', 'firstString', 'stringValue']).getValue()).to.equal('test1');\n expect(mapProp.get(['map', 'secondString', 'stringValue']).getValue()).to.equal('test2');\n });\n\n it('getRelativePath should work', function() {\n var rootNode = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var mapProp = PropertyFactory.create('autodesk.tests:NonPrimitiveMap-1.0.0');\n mapProp.setValues({\n 'map': {\n 'firstString': {\n 'stringValue': 'test1',\n },\n 'secondString': {\n 'stringValue': 'test2',\n },\n },\n });\n rootNode._properties.map.insert('nestedMap', mapProp);\n expect(mapProp.get(['map', 'firstString']).getRelativePath(rootNode))\n .to.equal('map[nestedMap].map[firstString]');\n expect(mapProp.get(['map', 'firstString']).getRelativePath(mapProp.get(['map', 'secondString', 'stringValue'])))\n .to.equal('../../[firstString]');\n expect(mapProp.get(['map', 'firstString', 'stringValue'])\n .getRelativePath(mapProp.get(['map', 'secondString', 'stringValue'])))\n .to.equal('../../[firstString].stringValue');\n });\n\n it('path creation and resolution should work for entries of the map', function() {\n var rootNode = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var node = PropertyFactory.create('autodesk.tests:AnonymousMapTestPropertyID-1.0.0');\n rootNode._properties.map.insert('node', node);\n\n // Test whether the returned paths are correct\n expect(node.getAbsolutePath()).to.equal('/map[node]');\n expect(node.getRelativePath(node)).to.equal('');\n expect(node.getRelativePath(rootNode.resolvePath('map'))).to.equal('[node]');\n expect(node.getRelativePath(rootNode)).to.equal('map[node]');\n expect(rootNode.getRelativePath(node)).to.equal('../../');\n\n expect(rootNode.resolvePath('map[node]')).to.equal(node);\n expect(rootNode.resolvePath('map').resolvePath('[node]')).to.equal(node);\n\n // Test whether they are updated correctly\n rootNode._properties.map.remove('node', node);\n\n // After removal the old paths should be undefined\n expect(rootNode.resolvePath('map[node]')).to.be.undefined;\n expect(rootNode.resolvePath('map').resolvePath('[node]')).to.be.undefined;\n\n // And the node should have an empty absolute path\n expect(node.getAbsolutePath()).to.equal('/');\n\n // Now we try reinserting it under a different id (one containing a quotable character)\n rootNode._properties.map.insert('node\"2', node);\n\n // Make sure the paths have been updated correctly\n expect(node.getAbsolutePath()).to.equal('/map[\"node\\\\\"2\"]');\n expect(node.getRelativePath(node)).to.equal('');\n expect(node.getRelativePath(rootNode.resolvePath('map'))).to.equal('[\"node\\\\\"2\"]');\n\n // And the path resolution works with the new name\n expect(rootNode.resolvePath('map[\"node\\\\\"2\"]')).to.equal(node);\n expect(rootNode.resolvePath('map').resolvePath('[\"node\\\\\"2\"]')).to.equal(node);\n\n // Try an empty string as key\n rootNode._properties.map.remove('node\"2', node);\n rootNode._properties.map.insert('', node);\n\n // Make sure the paths have been updated correctly\n expect(node.getAbsolutePath()).to.equal('/map[\"\"]');\n\n // And the path resolution works with the new name\n expect(rootNode.resolvePath('map[\"\"]')).to.equal(node);\n expect(rootNode.resolvePath('map').resolvePath('[\"\"]')).to.equal(node);\n\n // Try multiple levels\n var leaf = PropertyFactory.create('NodeProperty');\n expect(leaf.resolvePath('/')).to.equal(leaf);\n var map1 = PropertyFactory.create('NodeProperty', 'map');\n map1.insert('entry', leaf);\n expect(leaf.resolvePath('/')).to.equal(map1);\n\n var map2 = PropertyFactory.create(undefined, 'map');\n map2.insert('entry', map1);\n expect(leaf.resolvePath('/')).to.equal(map2);\n\n var map3 = PropertyFactory.create(undefined, 'map');\n map3.insert('entry', map2);\n expect(leaf.resolvePath('/')).to.equal(map3);\n\n // Pretty printing\n var expectedPrettyStr =\n 'undefined (Map of BaseProperty):\\n' +\n ' entry (Map of BaseProperty):\\n' +\n ' entry (Map of NodeProperty):\\n' +\n ' entry (NodeProperty):\\n';\n var prettyStr = '';\n map3.prettyPrint(function(str) {\n prettyStr += str + '\\n';\n });\n expect(prettyStr).to.equal(expectedPrettyStr);\n map3.prettyPrint();\n });\n });\n\n describe('squashing', function() {\n //\n // Helper function which takes a sequence of callbacks that are successfully executed\n // and the changes applied by the callbacks are separately tracked and squashed in a\n // a ChangeSet. This ChangeSet is then compared to the state in the property object\n //\n // Optionally, a a callback which controls the initial state before the squashing can\n // be given as first parameter\n //\n var testChangeSetSquashing = function(in_options) {\n resetKeyCounter();\n var testProperty = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n var callbacks = in_options.callbacks;\n if (in_options.pre) {\n in_options.pre(testProperty);\n }\n\n var initialChangeset = new ChangeSet(testProperty.serialize({ 'dirtyOnly': false }));\n initialChangeset.setIsNormalized(true);\n\n var squashedChangeset = new ChangeSet();\n testProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](testProperty);\n var changes = testProperty.serialize({ 'dirtyOnly': true });\n testProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n squashedChangeset.applyChangeSet(changes);\n }\n\n if (in_options.post) {\n in_options.post(squashedChangeset.getSerializedChangeSet());\n }\n\n initialChangeset.applyChangeSet(squashedChangeset.getSerializedChangeSet());\n expect(initialChangeset.getSerializedChangeSet()).to.deep.equal(testProperty.serialize({ 'dirtyOnly': false }));\n };\n\n it('should work for multiple independent inserts', function() {\n testChangeSetSquashing({ callbacks: [insertNodeInRoot, insertNodeInRoot, insertNodeInRoot] });\n });\n it('should work for multiple hierarchical inserts', function() {\n testChangeSetSquashing({ callbacks: [insertNodeAsLeaf, insertNodeAsLeaf, insertNodeAsLeaf] });\n });\n it('should work for inserts followed by removes', function() {\n testChangeSetSquashing({\n callbacks: [insertNodeInRoot, insertNodeInRoot, removeFirstNodeInRoot, removeFirstNodeInRoot],\n post: function(changeset) {\n expect(changeset).to.be.empty;\n },\n });\n });\n it('should work for a tree removal', function() {\n testChangeSetSquashing({\n callbacks: [insertNodeAsLeaf, insertNodeAsLeaf, insertNodeAsLeaf, removeFirstNodeInRoot],\n post: function(changeset) {\n expect(changeset).to.be.empty;\n },\n });\n });\n\n it('should work for modifies in a tree', function() {\n testChangeSetSquashing({\n callbacks: [insertNodeAsLeaf, insertNodeAsLeaf, insertNodeAsLeaf, modifyLeaf, modifyLeaf],\n });\n });\n it('an insert, modify and a remove should give an empty changeset', function() {\n testChangeSetSquashing({\n callbacks: [insertNodeAsLeaf, insertNodeAsLeaf, modifyLeaf, modifyLeaf, removeFirstNodeInRoot],\n post: function(changeset) {\n expect(changeset).to.be.empty;\n },\n });\n });\n it('work for modifies after an already existing insert', function() {\n testChangeSetSquashing({\n pre: insertNodeInRoot,\n callbacks: [modifyLeaf, modifyLeaf],\n });\n });\n it('of modify and remove after an already existing insert should work', function() {\n testChangeSetSquashing({\n pre: insertNodeInRoot,\n callbacks: [modifyLeaf, removeFirstNodeInRoot],\n post: function(changeset) {\n expect(changeset['map<NamedProperty>'].map).to.have.all.keys('remove');\n },\n });\n });\n it('of a replace operation should be possible', function() {\n // Create two nodes with the same GUID\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n node2._properties.guid.value = node1._properties.guid.value;\n node2._properties.stringProperty.value = 'testString2';\n\n testChangeSetSquashing({\n pre: function(root) {\n root._properties.map.insert('node1', node1);\n },\n callbacks: [\n removeFirstNodeInRoot,\n function(root) {\n root._properties.map.insert('node2', node2);\n },\n ],\n post: function(changeset) {\n expect(changeset['map<NamedProperty>'].map).to.have.all.keys('remove', 'insert');\n },\n });\n });\n it('should work for nested collections', function() {\n var node = PropertyFactory.create('NodeProperty');\n var testMap = PropertyFactory.create('map<Bool>');\n\n testMap.set('test', true);\n node.insert('map', testMap);\n var CS1 = node.serialize({ 'dirtyOnly': false });\n node.cleanDirty();\n testMap.set('test', false);\n var CS2 = node.serialize({ 'dirtyOnly': true });\n\n var CS = new ChangeSet(CS1);\n CS.applyChangeSet(new ChangeSet(CS2));\n expect(CS.getSerializedChangeSet().insert['map<Bool>'].map).to.have.all.keys('insert');\n expect(CS.getSerializedChangeSet().insert['map<Bool>'].map.insert['test']).to.equal(false);\n });\n it('should work for a remove in a primitive map that contains another item', function() {\n var cs1 = {\n modify: {\n 'map<String>': {\n testMap: {\n insert: {\n test1: 'Hello',\n },\n },\n },\n },\n };\n var cs2 = {\n modify: {\n 'map<String>': {\n testMap: {\n remove: {\n test2: 'Goodbye',\n },\n },\n },\n },\n };\n var combined = new ChangeSet();\n combined.applyChangeSet(cs1);\n combined.applyChangeSet(cs2);\n expect(combined.getSerializedChangeSet()).to.eql({\n modify: {\n 'map<String>': {\n testMap: {\n insert: {\n test1: 'Hello',\n },\n remove: {\n test2: 'Goodbye',\n },\n },\n },\n },\n });\n });\n it('should work for maps in arrays', function() {\n testChangeSetSquashing({\n callbacks: [\n function(root) {\n var arrayNode = PropertyFactory.create('array<NodeProperty>');\n arrayNode.push(PropertyFactory.create('NodeProperty'));\n\n var boolMap = PropertyFactory.create('map<Bool>');\n boolMap.set('test', false);\n arrayNode.get(0).insert('boolMap', boolMap);\n\n root._properties.map.insert('array', arrayNode);\n },\n function(root) {\n root.resolvePath('map[array][0].boolMap').set('test', true);\n }],\n post: function(changeset) {\n expect(changeset['map<NamedProperty>'].map.insert['array<NodeProperty>'].array.insert['0'][1]['0']\n .insert['map<Bool>'].boolMap).to.have.all.keys('insert');\n },\n });\n });\n });\n describe('Rebasing', function() {\n var testRebasing = function(in_options) {\n // Prepare the initial state\n var baseProperty1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n if (in_options.prepare) {\n in_options.prepare(baseProperty1);\n }\n // Create two copies of this state\n var baseProperty2 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n baseProperty2.deserialize(baseProperty1.serialize({ 'dirtyOnly': false }));\n var baseProperty3 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n baseProperty3.deserialize(baseProperty1.serialize({ 'dirtyOnly': false }));\n\n // Make sure the states are clear\n baseProperty1.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n baseProperty2.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n baseProperty3.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n var initialChangeSet = baseProperty1.serialize({ 'dirtyOnly': false });\n\n // Apply the operations to the two properties in parallel\n if (in_options.op1) {\n in_options.op1(baseProperty1);\n }\n if (in_options.op2) {\n in_options.op2(baseProperty2);\n }\n\n // Get the ChangeSets\n var changeSet1 = new ChangeSet(baseProperty1.serialize({ 'dirtyOnly': true }));\n var changeSet2 = baseProperty2.serialize({ 'dirtyOnly': true });\n\n // Perform the actual rebase\n var conflicts = [];\n changeSet1._rebaseChangeSet(changeSet2, conflicts);\n\n var combinedChangeSet = new ChangeSet(initialChangeSet).clone();\n combinedChangeSet.setIsNormalized(true);\n combinedChangeSet.applyChangeSet(changeSet1);\n combinedChangeSet.applyChangeSet(changeSet2);\n\n if (in_options.compareToSequential) {\n if (in_options.op1) {\n in_options.op1(baseProperty3);\n }\n if (in_options.op2) {\n in_options.op2(baseProperty3);\n }\n var finalChangeSet = baseProperty3.serialize({ 'dirtyOnly': false });\n expect(finalChangeSet).to.be.deep.equal(combinedChangeSet.getSerializedChangeSet());\n }\n\n if (in_options.checkResult) {\n in_options.checkResult(conflicts, changeSet2, combinedChangeSet);\n }\n };\n\n it('with a NOP should be possible', function() {\n testRebasing({\n op2: insertUniqueNodeInRoot(),\n compareToSequential: true,\n });\n });\n\n it('with independent inserts should be possible', function() {\n testRebasing({\n op1: insertUniqueNodeInRoot(),\n op2: insertUniqueNodeInRoot(),\n compareToSequential: true,\n });\n });\n\n it('with independent removes should be possible', function() {\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.map.insert('node1', node1);\n root._properties.map.insert('node2', node2);\n },\n op1: function(root) {\n root._properties.map.remove('node1');\n },\n op2: function(root) {\n root._properties.map.remove('node2');\n },\n compareToSequential: true,\n });\n });\n\n it('with a modify and a remove should possible', function() {\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.map.insert('node1', node1);\n },\n op1: modifyLeaf,\n op2: removeFirstNodeInRoot,\n compareToSequential: true,\n });\n });\n\n it('with a remove and a modify should possible', function() {\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.map.insert('node1', node1);\n },\n op1: removeFirstNodeInRoot,\n op2: modifyLeaf,\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE);\n expect(conflicts[0].path).to.be.equal('map[node1]');\n expect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n },\n });\n });\n\n it('reported conflicts should be escaped', function() {\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.map.insert('\"node\"', node1);\n },\n op1: removeFirstNodeInRoot,\n op2: modifyLeaf,\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE);\n expect(conflicts[0].path).to.be.equal('map[\"\\\\\"node\\\\\"\"]');\n expect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n },\n });\n });\n\n it('with two compatible removes should be possible', function() {\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.map.insert('node1', node1);\n },\n op1: function(root) {\n root._properties.map.remove('node1');\n },\n op2: function(root) {\n root._properties.map.remove('node1');\n },\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n },\n });\n });\n\n it('with two indendent recursive modifies should be possible', function() {\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.map.insert('node1', node1);\n },\n op1: function(root) {\n root._properties.map.getAsArray()[0]._properties.stringProperty.value = 'a';\n },\n op2: function(root) {\n root._properties.map.getAsArray()[0]._properties.stringProperty2.value = 'a';\n },\n compareToSequential: true,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.be.empty;\n },\n });\n });\n\n it('with two conflicting recursive modifies should be possible and report a conflict', function() {\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.map.insert('node1', node1);\n },\n op1: function(root) {\n root._properties.map.getAsArray()[0]._properties.stringProperty.value = 'a';\n },\n op2: function(root) {\n root._properties.map.getAsArray()[0]._properties.stringProperty.value = 'a';\n },\n compareToSequential: true,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('map[node1].stringProperty');\n },\n });\n });\n\n it('with modify followed by remove+insert should work', function() {\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.map.insert('node1', node1);\n },\n op1: modifyLeaf,\n op2: function(root) {\n root._properties.map.remove('node1');\n\n var node2 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n node2._properties.guid.value = node1._properties.guid.value;\n root._properties.map.insert('node1', node2);\n },\n compareToSequential: true,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.REMOVE_AFTER_MODIFY);\n expect(conflicts[0].path).to.be.equal('map[node1]');\n expect(changeSet['map<NamedProperty>'].map).to.have.all.keys('remove', 'insert');\n },\n });\n });\n\n it('with remove+insert followed by modify should report conflict', function() {\n var node1 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.map.insert('node1', node1);\n },\n op1: function(root) {\n root._properties.map.remove('node1');\n\n var node2 = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n node2._properties.guid.value = node1._properties.guid.value;\n root._properties.map.insert('node1', node2);\n },\n op2: modifyLeaf,\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.ENTRY_MODIFICATION_AFTER_REMOVE_INSERT);\n expect(conflicts[0].path).to.be.equal('map[node1]');\n },\n });\n });\n\n it('with remove+insert followed by remove+insert should report conflict', function() {\n testRebasing({\n prepare: function(root) {\n root._properties.map.insert('node', PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0'));\n },\n op1: function(root) {\n root._properties.map.set('node', PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0'));\n },\n op2: function(root) {\n root._properties.map.set('node', PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0'));\n },\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('map[node]');\n },\n });\n });\n\n it('with conflicting inserts should report conflict', function() {\n testRebasing({\n prepare: function(root) {\n },\n op1: function(root) {\n var node = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n root._properties.map.insert('node', node);\n },\n op2: function(root) {\n var node = PropertyFactory.create('autodesk.tests:MapTestPropertyID-1.0.0');\n root._properties.map.insert('node', node);\n },\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.INSERTED_ENTRY_WITH_SAME_KEY);\n expect(conflicts[0].path).to.be.equal('map[node]');\n },\n });\n });\n\n it('should report conflicts for nested collections', function() {\n testRebasing({\n prepare: function(root) {\n var node = PropertyFactory.create('NodeProperty');\n var testMap = PropertyFactory.create('map<Bool>');\n testMap.set('test', false);\n node.insert('boolMap', testMap);\n\n root._properties.map.insert('node', node);\n },\n op1: function(root) {\n root._properties.map.get('node')._properties.boolMap.set('test', true);\n },\n op2: function(root) {\n root._properties.map.get('node')._properties.boolMap.set('test', true);\n },\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('map[node].boolMap[test]');\n },\n });\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"mapProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/mapProperty.spec.js"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @fileoverview In this file, we will test the map property object described in /src/properties/mapProperty.js\n */\n\ndescribe(\"MapProperty\", function () {\n\tvar PropertyFactory, BaseProperty, ChangeSet, generateGuid, PATH_TOKENS;\n\tvar changeSetWithTwoMapEntries, _, changeSetWithTwoMapEntries_full, removalChangeSet;\n\tvar myNode, mapNode1, mapNode2, map;\n\n\tbefore(function () {\n\t\t// Get all the objects we need in this test here.\n\t\tPropertyFactory = require(\"../..\").PropertyFactory;\n\t\tBaseProperty = require(\"../..\").BaseProperty;\n\t\tChangeSet = require(\"@fluid-experimental/property-changeset\").ChangeSet;\n\t\t_ = require(\"lodash\");\n\t\tgenerateGuid = require(\"@fluid-experimental/property-common\").GuidUtils.generateGUID;\n\t\tPATH_TOKENS = require(\"../..\").BaseProperty.PATH_TOKENS;\n\n\t\t// Register a template with a set property for the tests\n\t\tvar TestPropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:MapTestPropertyID-1.0.0\",\n\t\t\tinherits: [\"NamedProperty\"],\n\t\t\tproperties: [\n\t\t\t\t{ id: \"stringProperty\", typeid: \"String\" },\n\t\t\t\t{ id: \"stringProperty2\", typeid: \"String\" },\n\t\t\t\t{ id: \"map\", context: \"map\", typeid: \"NamedProperty\" },\n\t\t\t],\n\t\t};\n\t\tvar AnonymousTestPropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\",\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\" }],\n\t\t};\n\n\t\tvar PrimitiveMapPropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:PrimitiveMap-1.0.0\",\n\t\t\tproperties: [{ id: \"map\", context: \"map\", typeid: \"Int32\" }],\n\t\t};\n\n\t\tvar NonPrimitiveMapPropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:NonPrimitiveMap-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{ typeid: \"autodesk.tests:StringProperty-1.0.0\", id: \"map\", context: \"map\" },\n\t\t\t],\n\t\t};\n\n\t\tvar StringPropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:StringProperty-1.0.0\",\n\t\t\tproperties: [{ id: \"stringValue\", typeid: \"String\" }],\n\t\t};\n\n\t\tvar ComplexProperty = {\n\t\t\ttypeid: \"autodesk.tests:ComplexProperty-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{\n\t\t\t\t\tid: \"nested\",\n\t\t\t\t\tproperties: [{ id: \"data\", typeid: \"Int32\" }],\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tvar ComplexMap = {\n\t\t\ttypeid: \"autodesk.tests:ComplexMap-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{\n\t\t\t\t\tid: \"path\",\n\t\t\t\t\tproperties: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"map\",\n\t\t\t\t\t\t\ttypeid: \"autodesk.tests:ComplexProperty-1.0.0\",\n\t\t\t\t\t\t\tcontext: \"map\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tPropertyFactory._reregister(TestPropertyTemplate);\n\t\tPropertyFactory._reregister(AnonymousTestPropertyTemplate);\n\t\tPropertyFactory._reregister(PrimitiveMapPropertyTemplate);\n\t\tPropertyFactory._reregister(NonPrimitiveMapPropertyTemplate);\n\t\tPropertyFactory._reregister(StringPropertyTemplate);\n\t\tPropertyFactory._reregister(ComplexMap);\n\t\tPropertyFactory._reregister(ComplexProperty);\n\t\tmyNode = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\tmapNode1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\tmapNode2 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\tmap = myNode._properties.map;\n\t});\n\n\t// Helper functions for the test cases\n\tvar keyCounter = 0;\n\tvar resetKeyCounter = function () {\n\t\tkeyCounter = 0;\n\t};\n\n\t// Inserts a node with the given guid (a new one is generated when undefined)\n\tvar insertNodeInRootWithKeyAndGuid = function (key, guid, root) {\n\t\tvar node = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\tif (key === undefined) {\n\t\t\tkey = \"node\" + keyCounter++;\n\t\t}\n\t\tif (guid !== undefined) {\n\t\t\tnode._properties.guid.value = guid;\n\t\t}\n\t\troot._properties.map.insert(key, node);\n\t};\n\n\t// Inserts a new node in the root\n\tvar insertNodeInRoot = function (root) {\n\t\tinsertNodeInRootWithKeyAndGuid(undefined, undefined, root);\n\t};\n\n\t// Returns a function that will insert a node with a constant GUID\n\tvar insertUniqueNodeInRoot = function () {\n\t\tvar key = \"node\" + keyCounter++;\n\t\treturn insertNodeInRootWithKeyAndGuid.bind(undefined, key, generateGuid());\n\t};\n\n\t// Inserts a new node as leaf\n\tvar insertNodeAsLeaf = function (root) {\n\t\tvar leaf = root;\n\t\twhile (leaf._properties.map.getAsArray().length > 0) {\n\t\t\tleaf = leaf._properties.map.getAsArray()[0];\n\t\t}\n\t\tvar node = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\tvar key = \"node\" + keyCounter++;\n\t\tleaf._properties.map.insert(key, node);\n\t};\n\n\t// Removes the first node from the root\n\tvar removeFirstNodeInRoot = function (root) {\n\t\tvar firstKey = root._properties.map.getIds()[0];\n\t\troot._properties.map.remove(firstKey);\n\t};\n\n\t// Modifies the leaf node\n\tvar modifyLeaf = function (root) {\n\t\tvar leaf = root;\n\t\twhile (leaf._properties.map.getAsArray().length > 0) {\n\t\t\tleaf = leaf._properties.map.getAsArray()[0];\n\t\t}\n\t\tleaf._properties.stringProperty.value = leaf._properties.stringProperty.value + \"+\";\n\t};\n\n\tdescribe(\"API methods\", function () {\n\t\tvar myMap, stringProp1, stringProp2;\n\t\tbefore(function () {\n\t\t\tmyMap = PropertyFactory.create(\"autodesk.tests:NonPrimitiveMap-1.0.0\")._properties.map;\n\t\t\tstringProp1 = PropertyFactory.create(\"autodesk.tests:StringProperty-1.0.0\");\n\t\t\tstringProp2 = PropertyFactory.create(\"autodesk.tests:StringProperty-1.0.0\");\n\t\t});\n\t\tit(\".clear should work\", function () {\n\t\t\tmyMap.insert(\"one\", stringProp1);\n\t\t\tmyMap.insert(\"two\", stringProp2);\n\t\t\texpect(myMap.getEntriesReadOnly()).to.deep.equal({\n\t\t\t\tone: stringProp1,\n\t\t\t\ttwo: stringProp2,\n\t\t\t});\n\t\t\tmyMap.clear();\n\t\t\texpect(myMap.getEntriesReadOnly()).to.be.empty;\n\t\t});\n\n\t\tit(\".getAsArray should return an array of map values\", function () {\n\t\t\tmyMap.insert(\"one\", stringProp1);\n\t\t\tmyMap.insert(\"two\", stringProp2);\n\t\t\texpect(myMap.getAsArray()).to.deep.equal([stringProp1, stringProp2]);\n\t\t});\n\n\t\tit(\".getFullTypeid should return a string of the typeid with or without collection\", function () {\n\t\t\texpect(myMap.getFullTypeid()).to.equal(\"map<autodesk.tests:StringProperty-1.0.0>\");\n\t\t\t// hideCollection: true\n\t\t\texpect(myMap.getFullTypeid(true)).to.equal(\"autodesk.tests:StringProperty-1.0.0\");\n\t\t});\n\n\t\tit(\".getTypeid should return a string of the typeid\", function () {\n\t\t\texpect(myMap.getTypeid()).to.equal(\"autodesk.tests:StringProperty-1.0.0\");\n\t\t});\n\n\t\tit(\".getIds should return an array of map keys\", function () {\n\t\t\tmyMap.insert(\"one\", stringProp1);\n\t\t\tmyMap.insert(\"two\", stringProp2);\n\t\t\texpect(myMap.getIds()).to.deep.equal([\"one\", \"two\"]);\n\t\t});\n\n\t\tit(\".remove should remove an item from a map and return the removed item\", function () {\n\t\t\tmyMap.insert(\"one\", stringProp1);\n\t\t\tmyMap.insert(\"two\", stringProp2);\n\t\t\tmyMap.remove(\"one\");\n\t\t\texpect(myMap.getEntriesReadOnly()).to.deep.equal({ two: stringProp2 });\n\t\t\texpect(myMap.remove(\"two\")).to.equal(stringProp2);\n\t\t});\n\n\t\tit(\".getContext should return map\", function () {\n\t\t\texpect(myMap.getContext()).to.equal(\"map\");\n\t\t});\n\n\t\tit(\"getId should return the id\", function () {\n\t\t\texpect(myMap.getId()).to.equal(\"map\");\n\t\t});\n\n\t\tafterEach(function () {\n\t\t\tmyMap.clear();\n\t\t});\n\t});\n\n\tdescribe(\"get and resolvePath\", function () {\n\t\tvar complexMap, complexProperty1, complexProperty2;\n\t\tbefore(function () {\n\t\t\tcomplexMap = PropertyFactory.create(\"autodesk.tests:ComplexMap-1.0.0\")._properties.path\n\t\t\t\t.map;\n\t\t\tcomplexProperty1 = PropertyFactory.create(\"autodesk.tests:ComplexProperty-1.0.0\");\n\t\t\tcomplexProperty2 = PropertyFactory.create(\"autodesk.tests:ComplexProperty-1.0.0\");\n\t\t\tcomplexProperty1.get(\"nested\").get(\"data\").setValue(123);\n\t\t\tcomplexProperty2.get(\"nested\").get(\"data\").setValue(456);\n\t\t\tcomplexMap.insert(\"one\", complexProperty1);\n\t\t\tcomplexMap.insert(\"two\", complexProperty2);\n\t\t});\n\n\t\tit(\"should resolve a simple path\", function () {\n\t\t\texpect(complexMap.resolvePath(\"one.nested.data\").getValue()).to.equal(123);\n\t\t\texpect(complexMap.get(\"one\").get(\"nested\").get(\"data\").getValue()).to.equal(123);\n\t\t\texpect(complexMap.get([\"one\", \"nested\", \"data\"]).getValue()).to.equal(123);\n\t\t});\n\n\t\tit(\"should work with raise path tokens\", function () {\n\t\t\texpect(complexMap.resolvePath(\"../../path.map.one\")).to.deep.equal(complexProperty1);\n\t\t\texpect(\n\t\t\t\tcomplexMap\n\t\t\t\t\t.get(PATH_TOKENS.UP)\n\t\t\t\t\t.get(PATH_TOKENS.UP)\n\t\t\t\t\t.get(\"path\")\n\t\t\t\t\t.get(\"map\")\n\t\t\t\t\t.get(\"two\"),\n\t\t\t).to.deep.equal(complexProperty2);\n\t\t\texpect(\n\t\t\t\tcomplexMap.get([PATH_TOKENS.UP, \"map\", \"two\", PATH_TOKENS.UP, \"two\"]),\n\t\t\t).to.deep.equal(complexProperty2);\n\t\t});\n\n\t\tit(\"should work with root tokens\", function () {\n\t\t\texpect(complexMap.resolvePath(\"/path.map.two\")).to.deep.equal(complexProperty2);\n\t\t\texpect(\n\t\t\t\tcomplexMap\n\t\t\t\t\t.get(PATH_TOKENS.ROOT)\n\t\t\t\t\t.get(\"path\")\n\t\t\t\t\t.get(\"map\")\n\t\t\t\t\t.get(\"two\")\n\t\t\t\t\t.get(\"nested\")\n\t\t\t\t\t.get(\"data\")\n\t\t\t\t\t.getValue(),\n\t\t\t).to.equal(456);\n\t\t\texpect(complexMap.get([PATH_TOKENS.ROOT, \"path\", \"map\", \"one\"])).to.deep.equal(\n\t\t\t\tcomplexProperty1,\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"Testing creation, assignment and serialization\", function () {\n\t\tit(\"should be empty at the beginning\", function () {\n\t\t\texpect(map.getEntriesReadOnly()).to.be.empty;\n\t\t\texpect(map.serialize({ dirtyOnly: true })).to.be.empty;\n\t\t});\n\n\t\tit(\"should be possible to insert into the map\", function () {\n\t\t\t// Test insertion of the first node\n\t\t\tmap.insert(\"node1\", mapNode1);\n\t\t\texpect(map.has(\"node1\")).to.be.ok;\n\t\t\texpect(map.has(\"node2\")).to.be.not.ok;\n\t\t\texpect(map.get(\"node2\")).to.equal(undefined);\n\t\t\texpect(mapNode1.getParent()).to.equal(map);\n\n\t\t\tvar CS = map.serialize({ dirtyOnly: true });\n\t\t\texpect(\n\t\t\t\tCS.insert &&\n\t\t\t\t\tCS.insert[\"autodesk.tests:MapTestPropertyID-1.0.0\"] &&\n\t\t\t\t\t_.keys(CS.insert[\"autodesk.tests:MapTestPropertyID-1.0.0\"]).length === 1 &&\n\t\t\t\t\t_.keys(CS.insert[\"autodesk.tests:MapTestPropertyID-1.0.0\"])[0] === \"node1\",\n\t\t\t).to.be.ok;\n\n\t\t\t// Test insertion of the second node\n\t\t\tmap.insert(\"node2\", mapNode2);\n\t\t\texpect(map.has(\"node2\")).to.be.ok;\n\t\t\texpect(map.get(\"node2\")).to.equal(mapNode2);\n\t\t\tchangeSetWithTwoMapEntries = map.serialize({ dirtyOnly: true });\n\t\t\texpect(\n\t\t\t\tchangeSetWithTwoMapEntries.insert &&\n\t\t\t\t\tchangeSetWithTwoMapEntries.insert[\"autodesk.tests:MapTestPropertyID-1.0.0\"] &&\n\t\t\t\t\t_.keys(\n\t\t\t\t\t\tchangeSetWithTwoMapEntries.insert[\"autodesk.tests:MapTestPropertyID-1.0.0\"],\n\t\t\t\t\t).length === 2 &&\n\t\t\t\t\t_.includes(\n\t\t\t\t\t\t_.keys(\n\t\t\t\t\t\t\tchangeSetWithTwoMapEntries.insert[\n\t\t\t\t\t\t\t\t\"autodesk.tests:MapTestPropertyID-1.0.0\"\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"node1\",\n\t\t\t\t\t) &&\n\t\t\t\t\t_.includes(\n\t\t\t\t\t\t_.keys(\n\t\t\t\t\t\t\tchangeSetWithTwoMapEntries.insert[\n\t\t\t\t\t\t\t\t\"autodesk.tests:MapTestPropertyID-1.0.0\"\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"node2\",\n\t\t\t\t\t),\n\t\t\t).to.be.ok;\n\n\t\t\tchangeSetWithTwoMapEntries_full = map.serialize({ dirtyOnly: false });\n\t\t\texpect(changeSetWithTwoMapEntries).to.deep.equal(changeSetWithTwoMapEntries_full);\n\t\t});\n\n\t\tit(\"Should track dirtiness\", function () {\n\t\t\tmap.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n\t\t\texpect(\n\t\t\t\tmap.serialize({\n\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\tincludeRootTypeid: false,\n\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t\t}),\n\t\t\t).to.be.empty;\n\t\t\texpect(\n\t\t\t\tmap.serialize({\n\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\tincludeRootTypeid: false,\n\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t}),\n\t\t\t).deep.equal(changeSetWithTwoMapEntries_full);\n\t\t\texpect(map.serialize({ dirtyOnly: false })).deep.equal(changeSetWithTwoMapEntries_full);\n\t\t});\n\n\t\tit(\"Should handle removals correctly\", function () {\n\t\t\tmap.remove(\"node1\");\n\t\t\texpect(mapNode1.getParent()).to.be.undefined;\n\t\t\tmap.remove(\"node2\");\n\t\t\texpect(\n\t\t\t\tmap.serialize({\n\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\tincludeRootTypeid: false,\n\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t}),\n\t\t\t).to.be.empty;\n\t\t\texpect(map.serialize({ dirtyOnly: false })).to.be.empty;\n\t\t\tremovalChangeSet = map.serialize({\n\t\t\t\tdirtyOnly: true,\n\t\t\t\tincludeRootTypeid: false,\n\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t});\n\t\t\texpect(removalChangeSet).to.have.all.keys([\"remove\"]);\n\t\t\texpect(removalChangeSet.remove).to.have.length(2);\n\t\t\texpect(removalChangeSet.remove).to.contain(\"node1\");\n\t\t\texpect(removalChangeSet.remove).to.contain(\"node2\");\n\t\t});\n\n\t\tit(\"Should support deserialization\", function () {\n\t\t\t// Deserialization should return an identical property\n\t\t\tvar deserializedNode = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar deserializedChanges1 = deserializedNode._properties.map.deserialize(\n\t\t\t\tchangeSetWithTwoMapEntries,\n\t\t\t);\n\t\t\tvar CS4 = deserializedNode._properties.map.serialize({ dirtyOnly: false });\n\t\t\texpect(CS4).to.deep.equal(changeSetWithTwoMapEntries);\n\t\t\texpect(deserializedChanges1).to.deep.equal(changeSetWithTwoMapEntries);\n\t\t\texpect(deserializedNode._properties.map.serialize({ dirtyOnly: true })).to.deep.equal(\n\t\t\t\tchangeSetWithTwoMapEntries,\n\t\t\t);\n\t\t\texpect(deserializedNode._properties.map.serialize({ dirtyOnly: true })).to.deep.equal(\n\t\t\t\tchangeSetWithTwoMapEntries,\n\t\t\t);\n\t\t\texpect(deserializedNode._properties.map.serialize({ dirtyOnly: true })).to.deep.equal(\n\t\t\t\tchangeSetWithTwoMapEntries,\n\t\t\t);\n\n\t\t\t// Deserializing the same ChangeSet twice should return an empty ChangeSet\n\t\t\tdeserializedNode._properties.map.cleanDirty();\n\t\t\tvar deserializedChanges2 = deserializedNode._properties.map.deserialize(\n\t\t\t\tchangeSetWithTwoMapEntries,\n\t\t\t);\n\t\t\texpect(deserializedChanges2).to.be.empty;\n\t\t\texpect(deserializedNode._properties.map.serialize({ dirtyOnly: true })).to.be.empty;\n\n\t\t\t// Deserialization of a modification should return the correct modification\n\t\t\tvar modifiedProperty = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tmodifiedProperty._properties.map.deserialize(changeSetWithTwoMapEntries);\n\t\t\tmodifiedProperty._properties.map.get(\"node2\")._properties.stringProperty.value =\n\t\t\t\t\"newValue\";\n\t\t\tdeserializedNode._properties.map.cleanDirty();\n\t\t\tvar deserializedChanges3 = deserializedNode._properties.map.deserialize(\n\t\t\t\tmodifiedProperty._properties.map.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t\tvar expectedChanges = {\n\t\t\t\tmodify: {\n\t\t\t\t\t\"autodesk.tests:MapTestPropertyID-1.0.0\": {\n\t\t\t\t\t\tnode2: {\n\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\tstringProperty: \"newValue\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\texpect(deserializedChanges3).to.deep.equal(expectedChanges);\n\t\t\texpect(deserializedNode._properties.map.serialize({ dirtyOnly: true })).to.deep.equal(\n\t\t\t\texpectedChanges,\n\t\t\t);\n\n\t\t\tdeserializedNode._properties.map.cleanDirty();\n\t\t\tvar deserializedChanges4 = deserializedNode._properties.map.deserialize({});\n\t\t\texpect(deserializedChanges4).to.deep.equal(removalChangeSet);\n\t\t\texpect(deserializedNode._properties.map.serialize({ dirtyOnly: true })).to.deep.equal(\n\t\t\t\tremovalChangeSet,\n\t\t\t);\n\t\t});\n\n\t\tit(\"Should support deserialization of falsy primitive types\", function () {\n\t\t\tvar testProp1 = PropertyFactory.create(\"map<Bool>\");\n\t\t\ttestProp1.set(\"entry\", false);\n\t\t\tvar changes = testProp1.deserialize(testProp1.serialize({ dirtyOnly: false }));\n\t\t\texpect(changes).to.be.empty;\n\t\t});\n\n\t\tit(\"Should track modifies\", function () {\n\t\t\tvar modifyNode1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar modifyNode2 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\t\tmodifyNode1._properties.map.deserialize(changeSetWithTwoMapEntries);\n\t\t\tmodifyNode2._properties.map.deserialize(changeSetWithTwoMapEntries);\n\n\t\t\tmodifyNode1._properties.map.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tvar child1 = modifyNode1._properties.map.get(\"node1\");\n\t\t\tchild1._properties.stringProperty.value = \"modify test\";\n\t\t\tvar modifyChangeSet = modifyNode1._properties.map.serialize({ dirtyOnly: true });\n\t\t\tmodifyNode2._properties.map.applyChangeSet(modifyChangeSet);\n\t\t\texpect(modifyNode2._properties.map.serialize({ dirtyOnly: false })).to.deep.equal(\n\t\t\t\tmodifyNode1._properties.map.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t});\n\n\t\tit(\"Should support hierarchical properties\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar node3 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\t\t// Create a hierarchy of three nodes\n\t\t\tnode1._properties.map.insert(\"node\", node2);\n\t\t\tnode2._properties.map.insert(\"node\", node3);\n\t\t\tnode3._properties.stringProperty.value = \"test\";\n\n\t\t\t// Check that deserializing and serializing works with a hierarchy\n\t\t\tvar hierarchicalChangeSet = node1.serialize({ dirtyOnly: true });\n\t\t\tvar deserializedNode = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tdeserializedNode.deserialize(hierarchicalChangeSet);\n\t\t\tvar child1 = deserializedNode._properties.map.getAsArray()[0];\n\t\t\texpect(child1).to.not.equal(undefined);\n\t\t\tvar child2 = child1._properties.map.getAsArray()[0];\n\t\t\texpect(child2).to.not.equal(undefined);\n\t\t\texpect(child2._properties.stringProperty.value).to.equal(\"test\");\n\n\t\t\t// Test that hierarchical modifies work\n\t\t\tnode1.cleanDirty();\n\t\t\tnode3._properties.stringProperty.value = \"test2\";\n\t\t\tvar hierarchicalModifyChangeSet = node1.serialize({ dirtyOnly: true });\n\n\t\t\tdeserializedNode.applyChangeSet(hierarchicalModifyChangeSet);\n\t\t\tchild1 = deserializedNode._properties.map.getAsArray()[0];\n\t\t\texpect(child1).to.not.equal(undefined);\n\t\t\tchild2 = child1._properties.map.getAsArray()[0];\n\t\t\texpect(child2).to.not.equal(undefined);\n\t\t\texpect(child2._properties.stringProperty.value).to.equal(\"test2\");\n\t\t});\n\n\t\tit(\"should be possible to use anonymous properties\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar rootNode2 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\");\n\t\t\trootNode._properties.map.insert(\"node1\", node1);\n\t\t\trootNode._properties.map.insert(\"node2\", node2);\n\t\t\tvar testChangeSet = rootNode.serialize({ dirtyOnly: false });\n\n\t\t\texpect(rootNode._properties.map.get(\"node1\")).to.be.equal(node1);\n\t\t\texpect(rootNode._properties.map.get(\"node2\")).to.be.equal(node2);\n\t\t\trootNode.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\tnode1._properties.stringProperty.value = \"1\";\n\t\t\tnode2._properties.stringProperty.value = \"2\";\n\n\t\t\trootNode2.deserialize(testChangeSet);\n\t\t\trootNode2.applyChangeSet(rootNode.serialize({ dirtyOnly: true }));\n\t\t\texpect(rootNode2.serialize({ dirtyOnly: false })).to.be.deep.equal(\n\t\t\t\trootNode.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t});\n\n\t\tit(\"inserting the same key twice should throw an exception\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\trootNode._properties.map.insert(\"node1\", node1);\n\t\t\texpect(function () {\n\t\t\t\trootNode._properties.map.insert(\"node1\", node2);\n\t\t\t}).to.throw();\n\t\t});\n\n\t\tit(\"set should overwrite existing entry\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar node3 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\t\trootNode._properties.map.set(\"node1\", node1);\n\t\t\trootNode._properties.map.set(\"node1\", node2);\n\t\t\t// the set should overwrite the insert\n\t\t\texpect(\n\t\t\t\trootNode.serialize({ dirtyOnly: true })[\"map<NamedProperty>\"].map,\n\t\t\t).to.have.all.keys(\"insert\");\n\n\t\t\t// Overwriting with the same property shouldn't dirty the node\n\t\t\trootNode.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\trootNode._properties.map.set(\"node1\", node2);\n\t\t\texpect(ChangeSet.isEmptyChangeSet(rootNode.serialize({ dirtyOnly: true }))).to.be.ok;\n\t\t\texpect(rootNode.isDirty()).to.be.false;\n\n\t\t\t// Overwriting with a different value should result in an remove and insert\n\t\t\trootNode._properties.map.set(\"node1\", node1);\n\t\t\texpect(\n\t\t\t\trootNode.serialize({ dirtyOnly: true })[\"map<NamedProperty>\"].map,\n\t\t\t).to.have.all.keys(\"insert\", \"remove\");\n\n\t\t\trootNode._properties.map.set(\"node1\", node3);\n\t\t\texpect(\n\t\t\t\trootNode.serialize({ dirtyOnly: true })[\"map<NamedProperty>\"].map,\n\t\t\t).to.have.all.keys(\"insert\", \"remove\");\n\t\t\texpect(\n\t\t\t\trootNode.serialize({ dirtyOnly: true })[\"map<NamedProperty>\"].map.remove,\n\t\t\t).to.have.length(1);\n\t\t});\n\n\t\tit(\"set should throw if the value inserted is not a property\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\")\n\t\t\t\t._properties.map;\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\trootNode.insert(\"node\", node1);\n\t\t\tvar incorrectFn = function () {\n\t\t\t\trootNode.set(\"node\", 8);\n\t\t\t};\n\t\t\texpect(incorrectFn).to.throw();\n\t\t});\n\n\t\tit(\"insert should work when inserting a primitive value\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"autodesk.tests:PrimitiveMap-1.0.0\")._properties\n\t\t\t\t.map;\n\t\t\trootNode.insert(\"node0\", 1);\n\t\t\tvar correctFn = function () {\n\t\t\t\trootNode.insert(\"node1\", 4);\n\t\t\t};\n\t\t\texpect(correctFn).to.not.throw();\n\t\t});\n\n\t\tit(\"inserting the same node twice should be a bug\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\");\n\n\t\t\t// Try to insert the same node object under two keys\n\t\t\trootNode._properties.map.insert(\"node\", node);\n\t\t\texpect(function () {\n\t\t\t\trootNode._properties.map.insert(\"node2\", node);\n\t\t\t}).to.throw();\n\n\t\t\t// After removing it, adding it under a new key should be possible\n\t\t\trootNode._properties.map.remove(\"node\");\n\t\t\trootNode._properties.map.insert(\"node2\", node);\n\t\t});\n\n\t\tit(\"setValues should work for primitive maps\", function () {\n\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\");\n\n\t\t\tnode.setValues({\n\t\t\t\tstringProperty: \"newString!!\",\n\t\t\t});\n\t\t\texpect(node.get(\"stringProperty\").getValue()).to.equal(\"newString!!\");\n\t\t});\n\n\t\tit(\"setValues should replace values for primitive types \", function () {\n\t\t\tvar PrimitiveInt32MapTemplate = {\n\t\t\t\ttypeid: \"autodesk.tests:PrimitiveInt32Map-1.0.0\",\n\t\t\t\tproperties: [{ typeid: \"Int32\", id: \"map\", context: \"map\" }],\n\t\t\t};\n\n\t\t\tPropertyFactory.register(PrimitiveInt32MapTemplate);\n\n\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:PrimitiveInt32Map-1.0.0\");\n\n\t\t\tnode.get(\"map\").insert(\"firstKey\", 111);\n\t\t\tnode.get(\"map\").insert(\"secondKey\", 222);\n\n\t\t\texpect(node.get(\"map\").getEntriesReadOnly().firstKey).to.equal(111);\n\t\t\texpect(node.get(\"map\").getEntriesReadOnly().secondKey).to.equal(222);\n\n\t\t\tnode.setValues({\n\t\t\t\tmap: {\n\t\t\t\t\tfirstKey: 333,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\texpect(node.get(\"map\").getEntriesReadOnly().firstKey).to.equal(333);\n\t\t\texpect(node.get(\"map\").getEntriesReadOnly().secondKey).to.equal(222);\n\t\t});\n\n\t\tit(\"getValues should work for primitive maps\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\");\n\n\t\t\trootNode._properties.map.insert(\"node\", node);\n\n\t\t\trootNode._properties.map.setValues({\n\t\t\t\tnode: {\n\t\t\t\t\tstringProperty: \"newString!!\",\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tvar expectedResult = {\n\t\t\t\tnode: {\n\t\t\t\t\tstringProperty: \"newString!!\",\n\t\t\t\t},\n\t\t\t};\n\t\t\texpect(rootNode._properties.map.getValues()).to.deep.equal(expectedResult);\n\t\t});\n\n\t\tit(\"setValues should work for custom maps\", function () {\n\t\t\tvar mapProp = PropertyFactory.create(\"autodesk.tests:NonPrimitiveMap-1.0.0\");\n\t\t\tvar string1 = PropertyFactory.create(\"autodesk.tests:StringProperty-1.0.0\");\n\t\t\tvar string2 = PropertyFactory.create(\"autodesk.tests:StringProperty-1.0.0\");\n\n\t\t\tmapProp.get(\"map\").insert(\"firstString\", string1);\n\t\t\tmapProp.get(\"map\").insert(\"secondString\", string2);\n\t\t\tmapProp.setValues({\n\t\t\t\tmap: {\n\t\t\t\t\tfirstString: {\n\t\t\t\t\t\tstringValue: \"test1\",\n\t\t\t\t\t},\n\t\t\t\t\tsecondString: {\n\t\t\t\t\t\tstringValue: \"test2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\texpect(mapProp.get([\"map\", \"firstString\", \"stringValue\"]).getValue()).to.equal(\"test1\");\n\t\t\texpect(mapProp.get([\"map\", \"secondString\", \"stringValue\"]).getValue()).to.equal(\n\t\t\t\t\"test2\",\n\t\t\t);\n\n\t\t\tmapProp.get(\"map\").setValues({ firstString: { stringValue: \"test1_updated\" } });\n\n\t\t\texpect(mapProp.get([\"map\", \"firstString\", \"stringValue\"]).getValue()).to.equal(\n\t\t\t\t\"test1_updated\",\n\t\t\t);\n\t\t\texpect(mapProp.get([\"map\", \"secondString\", \"stringValue\"]).getValue()).to.equal(\n\t\t\t\t\"test2\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"setValues should update values for existing keys and create new ones for non-existing keys\", function () {\n\t\t\tvar mapProp = PropertyFactory.create(\"autodesk.tests:NonPrimitiveMap-1.0.0\");\n\n\t\t\tmapProp.setValues({\n\t\t\t\tmap: {\n\t\t\t\t\tfirstString: {\n\t\t\t\t\t\tstringValue: \"test1\",\n\t\t\t\t\t},\n\t\t\t\t\tsecondString: {\n\t\t\t\t\t\tstringValue: \"test2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\texpect(mapProp.get([\"map\", \"firstString\", \"stringValue\"]).getValue()).to.equal(\"test1\");\n\t\t\texpect(mapProp.get([\"map\", \"secondString\", \"stringValue\"]).getValue()).to.equal(\n\t\t\t\t\"test2\",\n\t\t\t);\n\n\t\t\tmapProp.setValues({\n\t\t\t\tmap: {\n\t\t\t\t\tsecondString: {\n\t\t\t\t\t\tstringValue: \"test2-upd\",\n\t\t\t\t\t},\n\t\t\t\t\tthirdString: {\n\t\t\t\t\t\tstringValue: \"test3\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\texpect(mapProp.get([\"map\", \"firstString\", \"stringValue\"]).getValue()).to.equal(\"test1\");\n\t\t\texpect(mapProp.get([\"map\", \"secondString\", \"stringValue\"]).getValue()).to.equal(\n\t\t\t\t\"test2-upd\",\n\t\t\t);\n\t\t\texpect(mapProp.get([\"map\", \"thirdString\", \"stringValue\"]).getValue()).to.equal(\"test3\");\n\n\t\t\tmapProp.setValues({\n\t\t\t\tmap: {\n\t\t\t\t\tfourthString: {\n\t\t\t\t\t\tstringValue: \"test4\",\n\t\t\t\t\t},\n\t\t\t\t\tthirdString: {\n\t\t\t\t\t\tstringValue: \"test3-upd\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\texpect(mapProp.get([\"map\", \"firstString\", \"stringValue\"]).getValue()).to.equal(\"test1\");\n\t\t\texpect(mapProp.get([\"map\", \"secondString\", \"stringValue\"]).getValue()).to.equal(\n\t\t\t\t\"test2-upd\",\n\t\t\t);\n\t\t\texpect(mapProp.get([\"map\", \"thirdString\", \"stringValue\"]).getValue()).to.equal(\n\t\t\t\t\"test3-upd\",\n\t\t\t);\n\t\t\texpect(mapProp.get([\"map\", \"fourthString\", \"stringValue\"]).getValue()).to.equal(\n\t\t\t\t\"test4\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"getValues should work for custom maps\", function () {\n\t\t\tvar mapProp = PropertyFactory.create(\"autodesk.tests:NonPrimitiveMap-1.0.0\");\n\t\t\tvar string1 = PropertyFactory.create(\"autodesk.tests:StringProperty-1.0.0\");\n\t\t\tvar string2 = PropertyFactory.create(\"autodesk.tests:StringProperty-1.0.0\");\n\n\t\t\tmapProp._properties.map.insert(\"firstString\", string1);\n\t\t\tmapProp._properties.map.insert(\"secondString\", string2);\n\n\t\t\tmapProp.setValues({\n\t\t\t\tmap: {\n\t\t\t\t\tfirstString: {\n\t\t\t\t\t\tstringValue: \"test1\",\n\t\t\t\t\t},\n\t\t\t\t\tsecondString: {\n\t\t\t\t\t\tstringValue: \"test2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tvar expectedResult = {\n\t\t\t\tmap: {\n\t\t\t\t\tfirstString: {\n\t\t\t\t\t\tstringValue: \"test1\",\n\t\t\t\t\t},\n\t\t\t\t\tsecondString: {\n\t\t\t\t\t\tstringValue: \"test2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\texpect(mapProp.getValues()).to.deep.equal(expectedResult);\n\t\t});\n\n\t\tit(\"setValues should create new items from typed properties if key does not exist\", function () {\n\t\t\tvar mapProp = PropertyFactory.create(\"autodesk.tests:NonPrimitiveMap-1.0.0\");\n\t\t\tvar string1 = PropertyFactory.create(\"autodesk.tests:StringProperty-1.0.0\", null, {\n\t\t\t\tstringValue: \"test1\",\n\t\t\t});\n\t\t\tvar string2 = PropertyFactory.create(\"autodesk.tests:StringProperty-1.0.0\", null, {\n\t\t\t\tstringValue: \"test2\",\n\t\t\t});\n\n\t\t\tmapProp.setValues({\n\t\t\t\tmap: {\n\t\t\t\t\tfirstString: string1,\n\t\t\t\t\tsecondString: string2,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\texpect(mapProp.get([\"map\", \"firstString\", \"stringValue\"]).getValue()).to.equal(\"test1\");\n\t\t\texpect(mapProp.get([\"map\", \"secondString\", \"stringValue\"]).getValue()).to.equal(\n\t\t\t\t\"test2\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"setValues should create new items from untyped inputs if key does not exist\", function () {\n\t\t\tvar mapProp = PropertyFactory.create(\"autodesk.tests:NonPrimitiveMap-1.0.0\");\n\n\t\t\tmapProp.setValues({\n\t\t\t\tmap: {\n\t\t\t\t\tfirstString: {\n\t\t\t\t\t\tstringValue: \"test1\",\n\t\t\t\t\t},\n\t\t\t\t\tsecondString: {\n\t\t\t\t\t\tstringValue: \"test2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\texpect(mapProp.get([\"map\", \"firstString\", \"stringValue\"]).getValue()).to.equal(\"test1\");\n\t\t\texpect(mapProp.get([\"map\", \"secondString\", \"stringValue\"]).getValue()).to.equal(\n\t\t\t\t\"test2\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"getRelativePath should work\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar mapProp = PropertyFactory.create(\"autodesk.tests:NonPrimitiveMap-1.0.0\");\n\t\t\tmapProp.setValues({\n\t\t\t\tmap: {\n\t\t\t\t\tfirstString: {\n\t\t\t\t\t\tstringValue: \"test1\",\n\t\t\t\t\t},\n\t\t\t\t\tsecondString: {\n\t\t\t\t\t\tstringValue: \"test2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t\trootNode._properties.map.insert(\"nestedMap\", mapProp);\n\t\t\texpect(mapProp.get([\"map\", \"firstString\"]).getRelativePath(rootNode)).to.equal(\n\t\t\t\t\"map[nestedMap].map[firstString]\",\n\t\t\t);\n\t\t\texpect(\n\t\t\t\tmapProp\n\t\t\t\t\t.get([\"map\", \"firstString\"])\n\t\t\t\t\t.getRelativePath(mapProp.get([\"map\", \"secondString\", \"stringValue\"])),\n\t\t\t).to.equal(\"../../[firstString]\");\n\t\t\texpect(\n\t\t\t\tmapProp\n\t\t\t\t\t.get([\"map\", \"firstString\", \"stringValue\"])\n\t\t\t\t\t.getRelativePath(mapProp.get([\"map\", \"secondString\", \"stringValue\"])),\n\t\t\t).to.equal(\"../../[firstString].stringValue\");\n\t\t});\n\n\t\tit(\"path creation and resolution should work for entries of the map\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:AnonymousMapTestPropertyID-1.0.0\");\n\t\t\trootNode._properties.map.insert(\"node\", node);\n\n\t\t\t// Test whether the returned paths are correct\n\t\t\texpect(node.getAbsolutePath()).to.equal(\"/map[node]\");\n\t\t\texpect(node.getRelativePath(node)).to.equal(\"\");\n\t\t\texpect(node.getRelativePath(rootNode.resolvePath(\"map\"))).to.equal(\"[node]\");\n\t\t\texpect(node.getRelativePath(rootNode)).to.equal(\"map[node]\");\n\t\t\texpect(rootNode.getRelativePath(node)).to.equal(\"../../\");\n\n\t\t\texpect(rootNode.resolvePath(\"map[node]\")).to.equal(node);\n\t\t\texpect(rootNode.resolvePath(\"map\").resolvePath(\"[node]\")).to.equal(node);\n\n\t\t\t// Test whether they are updated correctly\n\t\t\trootNode._properties.map.remove(\"node\", node);\n\n\t\t\t// After removal the old paths should be undefined\n\t\t\texpect(rootNode.resolvePath(\"map[node]\")).to.be.undefined;\n\t\t\texpect(rootNode.resolvePath(\"map\").resolvePath(\"[node]\")).to.be.undefined;\n\n\t\t\t// And the node should have an empty absolute path\n\t\t\texpect(node.getAbsolutePath()).to.equal(\"/\");\n\n\t\t\t// Now we try reinserting it under a different id (one containing a quotable character)\n\t\t\trootNode._properties.map.insert('node\"2', node);\n\n\t\t\t// Make sure the paths have been updated correctly\n\t\t\texpect(node.getAbsolutePath()).to.equal('/map[\"node\\\\\"2\"]');\n\t\t\texpect(node.getRelativePath(node)).to.equal(\"\");\n\t\t\texpect(node.getRelativePath(rootNode.resolvePath(\"map\"))).to.equal('[\"node\\\\\"2\"]');\n\n\t\t\t// And the path resolution works with the new name\n\t\t\texpect(rootNode.resolvePath('map[\"node\\\\\"2\"]')).to.equal(node);\n\t\t\texpect(rootNode.resolvePath(\"map\").resolvePath('[\"node\\\\\"2\"]')).to.equal(node);\n\n\t\t\t// Try an empty string as key\n\t\t\trootNode._properties.map.remove('node\"2', node);\n\t\t\trootNode._properties.map.insert(\"\", node);\n\n\t\t\t// Make sure the paths have been updated correctly\n\t\t\texpect(node.getAbsolutePath()).to.equal('/map[\"\"]');\n\n\t\t\t// And the path resolution works with the new name\n\t\t\texpect(rootNode.resolvePath('map[\"\"]')).to.equal(node);\n\t\t\texpect(rootNode.resolvePath(\"map\").resolvePath('[\"\"]')).to.equal(node);\n\n\t\t\t// Try multiple levels\n\t\t\tvar leaf = PropertyFactory.create(\"NodeProperty\");\n\t\t\texpect(leaf.resolvePath(\"/\")).to.equal(leaf);\n\t\t\tvar map1 = PropertyFactory.create(\"NodeProperty\", \"map\");\n\t\t\tmap1.insert(\"entry\", leaf);\n\t\t\texpect(leaf.resolvePath(\"/\")).to.equal(map1);\n\n\t\t\tvar map2 = PropertyFactory.create(undefined, \"map\");\n\t\t\tmap2.insert(\"entry\", map1);\n\t\t\texpect(leaf.resolvePath(\"/\")).to.equal(map2);\n\n\t\t\tvar map3 = PropertyFactory.create(undefined, \"map\");\n\t\t\tmap3.insert(\"entry\", map2);\n\t\t\texpect(leaf.resolvePath(\"/\")).to.equal(map3);\n\n\t\t\t// Pretty printing\n\t\t\tvar expectedPrettyStr =\n\t\t\t\t\"undefined (Map of BaseProperty):\\n\" +\n\t\t\t\t\" entry (Map of BaseProperty):\\n\" +\n\t\t\t\t\" entry (Map of NodeProperty):\\n\" +\n\t\t\t\t\" entry (NodeProperty):\\n\";\n\t\t\tvar prettyStr = \"\";\n\t\t\tmap3.prettyPrint(function (str) {\n\t\t\t\tprettyStr += str + \"\\n\";\n\t\t\t});\n\t\t\texpect(prettyStr).to.equal(expectedPrettyStr);\n\t\t\tmap3.prettyPrint();\n\t\t});\n\t});\n\n\tdescribe(\"squashing\", function () {\n\t\t//\n\t\t// Helper function which takes a sequence of callbacks that are successfully executed\n\t\t// and the changes applied by the callbacks are separately tracked and squashed in a\n\t\t// a ChangeSet. This ChangeSet is then compared to the state in the property object\n\t\t//\n\t\t// Optionally, a a callback which controls the initial state before the squashing can\n\t\t// be given as first parameter\n\t\t//\n\t\tvar testChangeSetSquashing = function (in_options) {\n\t\t\tresetKeyCounter();\n\t\t\tvar testProperty = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\t\tvar callbacks = in_options.callbacks;\n\t\t\tif (in_options.pre) {\n\t\t\t\tin_options.pre(testProperty);\n\t\t\t}\n\n\t\t\tvar initialChangeset = new ChangeSet(testProperty.serialize({ dirtyOnly: false }));\n\t\t\tinitialChangeset.setIsNormalized(true);\n\n\t\t\tvar squashedChangeset = new ChangeSet();\n\t\t\ttestProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tfor (var i = 0; i < callbacks.length; i++) {\n\t\t\t\tcallbacks[i](testProperty);\n\t\t\t\tvar changes = testProperty.serialize({ dirtyOnly: true });\n\t\t\t\ttestProperty.cleanDirty(\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t);\n\n\t\t\t\tsquashedChangeset.applyChangeSet(changes);\n\t\t\t}\n\n\t\t\tif (in_options.post) {\n\t\t\t\tin_options.post(squashedChangeset.getSerializedChangeSet());\n\t\t\t}\n\n\t\t\tinitialChangeset.applyChangeSet(squashedChangeset.getSerializedChangeSet());\n\t\t\texpect(initialChangeset.getSerializedChangeSet()).to.deep.equal(\n\t\t\t\ttestProperty.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t};\n\n\t\tit(\"should work for multiple independent inserts\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertNodeInRoot, insertNodeInRoot, insertNodeInRoot],\n\t\t\t});\n\t\t});\n\t\tit(\"should work for multiple hierarchical inserts\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertNodeAsLeaf, insertNodeAsLeaf, insertNodeAsLeaf],\n\t\t\t});\n\t\t});\n\t\tit(\"should work for inserts followed by removes\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeInRoot,\n\t\t\t\t\tinsertNodeInRoot,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"should work for a tree removal\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should work for modifies in a tree\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tmodifyLeaf,\n\t\t\t\t\tmodifyLeaf,\n\t\t\t\t],\n\t\t\t});\n\t\t});\n\t\tit(\"an insert, modify and a remove should give an empty changeset\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tmodifyLeaf,\n\t\t\t\t\tmodifyLeaf,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"work for modifies after an already existing insert\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertNodeInRoot,\n\t\t\t\tcallbacks: [modifyLeaf, modifyLeaf],\n\t\t\t});\n\t\t});\n\t\tit(\"of modify and remove after an already existing insert should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertNodeInRoot,\n\t\t\t\tcallbacks: [modifyLeaf, removeFirstNodeInRoot],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset[\"map<NamedProperty>\"].map).to.have.all.keys(\"remove\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"of a replace operation should be possible\", function () {\n\t\t\t// Create two nodes with the same GUID\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tnode2._properties.guid.value = node1._properties.guid.value;\n\t\t\tnode2._properties.stringProperty.value = \"testString2\";\n\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: function (root) {\n\t\t\t\t\troot._properties.map.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\tcallbacks: [\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t\tfunction (root) {\n\t\t\t\t\t\troot._properties.map.insert(\"node2\", node2);\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset[\"map<NamedProperty>\"].map).to.have.all.keys(\n\t\t\t\t\t\t\"remove\",\n\t\t\t\t\t\t\"insert\",\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"should work for nested collections\", function () {\n\t\t\tvar node = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar testMap = PropertyFactory.create(\"map<Bool>\");\n\n\t\t\ttestMap.set(\"test\", true);\n\t\t\tnode.insert(\"map\", testMap);\n\t\t\tvar CS1 = node.serialize({ dirtyOnly: false });\n\t\t\tnode.cleanDirty();\n\t\t\ttestMap.set(\"test\", false);\n\t\t\tvar CS2 = node.serialize({ dirtyOnly: true });\n\n\t\t\tvar CS = new ChangeSet(CS1);\n\t\t\tCS.applyChangeSet(new ChangeSet(CS2));\n\t\t\texpect(CS.getSerializedChangeSet().insert[\"map<Bool>\"].map).to.have.all.keys(\"insert\");\n\t\t\texpect(CS.getSerializedChangeSet().insert[\"map<Bool>\"].map.insert[\"test\"]).to.equal(\n\t\t\t\tfalse,\n\t\t\t);\n\t\t});\n\t\tit(\"should work for a remove in a primitive map that contains another item\", function () {\n\t\t\tvar cs1 = {\n\t\t\t\tmodify: {\n\t\t\t\t\t\"map<String>\": {\n\t\t\t\t\t\ttestMap: {\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\ttest1: \"Hello\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tvar cs2 = {\n\t\t\t\tmodify: {\n\t\t\t\t\t\"map<String>\": {\n\t\t\t\t\t\ttestMap: {\n\t\t\t\t\t\t\tremove: {\n\t\t\t\t\t\t\t\ttest2: \"Goodbye\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tvar combined = new ChangeSet();\n\t\t\tcombined.applyChangeSet(cs1);\n\t\t\tcombined.applyChangeSet(cs2);\n\t\t\texpect(combined.getSerializedChangeSet()).to.eql({\n\t\t\t\tmodify: {\n\t\t\t\t\t\"map<String>\": {\n\t\t\t\t\t\ttestMap: {\n\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\ttest1: \"Hello\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tremove: {\n\t\t\t\t\t\t\t\ttest2: \"Goodbye\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"should work for maps in arrays\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tfunction (root) {\n\t\t\t\t\t\tvar arrayNode = PropertyFactory.create(\"array<NodeProperty>\");\n\t\t\t\t\t\tarrayNode.push(PropertyFactory.create(\"NodeProperty\"));\n\n\t\t\t\t\t\tvar boolMap = PropertyFactory.create(\"map<Bool>\");\n\t\t\t\t\t\tboolMap.set(\"test\", false);\n\t\t\t\t\t\tarrayNode.get(0).insert(\"boolMap\", boolMap);\n\n\t\t\t\t\t\troot._properties.map.insert(\"array\", arrayNode);\n\t\t\t\t\t},\n\t\t\t\t\tfunction (root) {\n\t\t\t\t\t\troot.resolvePath(\"map[array][0].boolMap\").set(\"test\", true);\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(\n\t\t\t\t\t\tchangeset[\"map<NamedProperty>\"].map.insert[\"array<NodeProperty>\"].array\n\t\t\t\t\t\t\t.insert[\"0\"][1][\"0\"].insert[\"map<Bool>\"].boolMap,\n\t\t\t\t\t).to.have.all.keys(\"insert\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t});\n\tdescribe(\"Rebasing\", function () {\n\t\tvar testRebasing = function (in_options) {\n\t\t\t// Prepare the initial state\n\t\t\tvar baseProperty1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tif (in_options.prepare) {\n\t\t\t\tin_options.prepare(baseProperty1);\n\t\t\t}\n\t\t\t// Create two copies of this state\n\t\t\tvar baseProperty2 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tbaseProperty2.deserialize(baseProperty1.serialize({ dirtyOnly: false }));\n\t\t\tvar baseProperty3 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tbaseProperty3.deserialize(baseProperty1.serialize({ dirtyOnly: false }));\n\n\t\t\t// Make sure the states are clear\n\t\t\tbaseProperty1.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tbaseProperty2.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tbaseProperty3.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\tvar initialChangeSet = baseProperty1.serialize({ dirtyOnly: false });\n\n\t\t\t// Apply the operations to the two properties in parallel\n\t\t\tif (in_options.op1) {\n\t\t\t\tin_options.op1(baseProperty1);\n\t\t\t}\n\t\t\tif (in_options.op2) {\n\t\t\t\tin_options.op2(baseProperty2);\n\t\t\t}\n\n\t\t\t// Get the ChangeSets\n\t\t\tvar changeSet1 = new ChangeSet(baseProperty1.serialize({ dirtyOnly: true }));\n\t\t\tvar changeSet2 = baseProperty2.serialize({ dirtyOnly: true });\n\n\t\t\t// Perform the actual rebase\n\t\t\tvar conflicts = [];\n\t\t\tchangeSet1._rebaseChangeSet(changeSet2, conflicts);\n\n\t\t\tvar combinedChangeSet = new ChangeSet(initialChangeSet).clone();\n\t\t\tcombinedChangeSet.setIsNormalized(true);\n\t\t\tcombinedChangeSet.applyChangeSet(changeSet1);\n\t\t\tcombinedChangeSet.applyChangeSet(changeSet2);\n\n\t\t\tif (in_options.compareToSequential) {\n\t\t\t\tif (in_options.op1) {\n\t\t\t\t\tin_options.op1(baseProperty3);\n\t\t\t\t}\n\t\t\t\tif (in_options.op2) {\n\t\t\t\t\tin_options.op2(baseProperty3);\n\t\t\t\t}\n\t\t\t\tvar finalChangeSet = baseProperty3.serialize({ dirtyOnly: false });\n\t\t\t\texpect(finalChangeSet).to.be.deep.equal(combinedChangeSet.getSerializedChangeSet());\n\t\t\t}\n\n\t\t\tif (in_options.checkResult) {\n\t\t\t\tin_options.checkResult(conflicts, changeSet2, combinedChangeSet);\n\t\t\t}\n\t\t};\n\n\t\tit(\"with a NOP should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\top2: insertUniqueNodeInRoot(),\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with independent inserts should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\top1: insertUniqueNodeInRoot(),\n\t\t\t\top2: insertUniqueNodeInRoot(),\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with independent removes should be possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.map.insert(\"node1\", node1);\n\t\t\t\t\troot._properties.map.insert(\"node2\", node2);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.map.remove(\"node1\");\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.map.remove(\"node2\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with a modify and a remove should possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.map.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: modifyLeaf,\n\t\t\t\top2: removeFirstNodeInRoot,\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with a remove and a modify should possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.map.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: removeFirstNodeInRoot,\n\t\t\t\top2: modifyLeaf,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"map[node1]\");\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"reported conflicts should be escaped\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.map.insert('\"node\"', node1);\n\t\t\t\t},\n\t\t\t\top1: removeFirstNodeInRoot,\n\t\t\t\top2: modifyLeaf,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal('map[\"\\\\\"node\\\\\"\"]');\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two compatible removes should be possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.map.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.map.remove(\"node1\");\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.map.remove(\"node1\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two indendent recursive modifies should be possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.map.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.map.getAsArray()[0]._properties.stringProperty.value = \"a\";\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.map.getAsArray()[0]._properties.stringProperty2.value = \"a\";\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two conflicting recursive modifies should be possible and report a conflict\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.map.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.map.getAsArray()[0]._properties.stringProperty.value = \"a\";\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.map.getAsArray()[0]._properties.stringProperty.value = \"a\";\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"map[node1].stringProperty\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with modify followed by remove+insert should work\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.map.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: modifyLeaf,\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.map.remove(\"node1\");\n\n\t\t\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\t\t\tnode2._properties.guid.value = node1._properties.guid.value;\n\t\t\t\t\troot._properties.map.insert(\"node1\", node2);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.REMOVE_AFTER_MODIFY,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"map[node1]\");\n\t\t\t\t\texpect(changeSet[\"map<NamedProperty>\"].map).to.have.all.keys(\n\t\t\t\t\t\t\"remove\",\n\t\t\t\t\t\t\"insert\",\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with remove+insert followed by modify should report conflict\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.map.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.map.remove(\"node1\");\n\n\t\t\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\t\t\tnode2._properties.guid.value = node1._properties.guid.value;\n\t\t\t\t\troot._properties.map.insert(\"node1\", node2);\n\t\t\t\t},\n\t\t\t\top2: modifyLeaf,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.ENTRY_MODIFICATION_AFTER_REMOVE_INSERT,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"map[node1]\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with remove+insert followed by remove+insert should report conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.map.insert(\n\t\t\t\t\t\t\"node\",\n\t\t\t\t\t\tPropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\"),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.map.set(\n\t\t\t\t\t\t\"node\",\n\t\t\t\t\t\tPropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\"),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.map.set(\n\t\t\t\t\t\t\"node\",\n\t\t\t\t\t\tPropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\"),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"map[node]\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting inserts should report conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {},\n\t\t\t\top1: function (root) {\n\t\t\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\t\t\troot._properties.map.insert(\"node\", node);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:MapTestPropertyID-1.0.0\");\n\t\t\t\t\troot._properties.map.insert(\"node\", node);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.INSERTED_ENTRY_WITH_SAME_KEY,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"map[node]\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should report conflicts for nested collections\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\tvar node = PropertyFactory.create(\"NodeProperty\");\n\t\t\t\t\tvar testMap = PropertyFactory.create(\"map<Bool>\");\n\t\t\t\t\ttestMap.set(\"test\", false);\n\t\t\t\t\tnode.insert(\"boolMap\", testMap);\n\n\t\t\t\t\troot._properties.map.insert(\"node\", node);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.map.get(\"node\")._properties.boolMap.set(\"test\", true);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.map.get(\"node\")._properties.boolMap.set(\"test\", true);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"map[node].boolMap[test]\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t});\n});\n"]}
|