@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":"setProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/setProperty.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 set property object described in /src/properties/setProperty.js\n */\nconst { ChangeSet } = require('@fluid-experimental/property-changeset');\nconst { generateGUID } = require('@fluid-experimental/property-common').GuidUtils;\nconst _ = require('lodash');\nconst { PropertyFactory } = require('../..');\nconst { BaseProperty } = require('../..');\n\ndescribe('SetProperty', function() {\n var PATH_TOKENS;\n var changeSetWithTwoChildren, changeSetWithTwoChildren_full, removalChangeSet;\n var myNode, childNode1, childNode2, children;\n\n before(function() {\n PATH_TOKENS = BaseProperty.PATH_TOKENS;\n\n // Register a template with a set property for the tests\n var TestPropertyTemplate = {\n typeid: 'autodesk.tests:TestPropertyID-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'stringProperty', typeid: 'String' },\n { id: 'stringProperty2', typeid: 'String' },\n { id: 'children', context: 'set', typeid: 'NamedProperty' },\n ],\n };\n\n PropertyFactory._reregister(TestPropertyTemplate);\n myNode = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n childNode1 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n childNode2 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n\n children = myNode._properties.children;\n });\n\n // Helper functions for the test cases\n\n // Inserts a node with the given guid (a new one is generated when undefined)\n var insertNodeInRootWithGuid = function(guid, root) {\n var child = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n if (guid) {\n child._properties.guid.value = guid;\n }\n root._properties.children.insert(child);\n };\n\n // Inserts a new node in the root\n var insertNodeInRoot = function(root) {\n insertNodeInRootWithGuid(generateGUID(), root);\n };\n\n // Returns a function that will insert a node with a constant GUID\n var insertUniqueNodeInRoot = function() {\n return insertNodeInRootWithGuid.bind(undefined, generateGUID());\n };\n\n // Inserts a new node as leaf\n var insertNodeAsLeaf = function(root) {\n var leaf = root;\n while (leaf._properties.children.getAsArray().length > 0) {\n leaf = leaf._properties.children.getAsArray()[0];\n }\n var child = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n leaf._properties.children.insert(child);\n };\n\n // Removes the first node from the root\n var removeFirstNodeInRoot = function(root) {\n var firstChild = root._properties.children.getAsArray()[0];\n root._properties.children.remove(firstChild);\n };\n\n // Modifies the leaf node\n var modifyLeaf = function(root) {\n var leaf = root;\n while (leaf._properties.children.getAsArray().length > 0) {\n leaf = leaf._properties.children.getAsArray()[0];\n }\n leaf._properties.stringProperty.value = leaf._properties.stringProperty.value + '+';\n };\n\n describe('Testing creation, assignment and serialization', function() {\n it('should be empty at the beginning', function() {\n expect(children.getEntriesReadOnly()).to.be.empty;\n expect(children._serialize(true)).to.be.empty;\n });\n\n it('should be possible to insert children', function() {\n // Test insertion of the first child\n children.insert(childNode1);\n expect(children.has(childNode1.getGuid())).to.be.ok;\n expect(!children.has(childNode2.getGuid())).to.be.ok;\n expect(children.get(childNode2.getGuid())).to.equal(undefined);\n expect(childNode1.getParent()).to.equal(children);\n\n var CS = children.serialize({ 'dirtyOnly': true });\n expect(CS.insert &&\n CS.insert['autodesk.tests:TestPropertyID-1.0.0'] &&\n _.keys(CS.insert['autodesk.tests:TestPropertyID-1.0.0']).length === 1 &&\n _.keys(CS.insert['autodesk.tests:TestPropertyID-1.0.0'])[0] === childNode1.getGuid()).to.be.ok;\n\n // Test insertion of the second child\n children.insert(childNode2);\n expect(children.has(childNode2.getGuid())).to.be.ok;\n expect(children.get(childNode2.getGuid())).to.equal(childNode2);\n changeSetWithTwoChildren = children.serialize({ 'dirtyOnly': true });\n expect(changeSetWithTwoChildren.insert &&\n changeSetWithTwoChildren.insert['autodesk.tests:TestPropertyID-1.0.0'] &&\n _.keys(changeSetWithTwoChildren.insert['autodesk.tests:TestPropertyID-1.0.0']).length === 2 &&\n _.includes(\n _.keys(changeSetWithTwoChildren.insert['autodesk.tests:TestPropertyID-1.0.0']), childNode1.getGuid()) &&\n _.includes(\n _.keys(\n changeSetWithTwoChildren.insert['autodesk.tests:TestPropertyID-1.0.0']),\n childNode2.getGuid()),\n ).to.be.ok;\n\n changeSetWithTwoChildren_full = children.serialize({ 'dirtyOnly': false });\n expect(changeSetWithTwoChildren).to.deep.equal(changeSetWithTwoChildren_full);\n });\n\n it('.get and .resolvePath should work', function() {\n expect(children.get(childNode1.getGuid())).to.equal(childNode1);\n expect(children.resolvePath('/children[' + childNode1.getGuid() + ']')).to.equal(childNode1);\n expect(children.get([PATH_TOKENS.ROOT, 'children', childNode1.getGuid()])).to.equal(childNode1);\n expect(children.resolvePath('../children[' + childNode1.getGuid() + ']')).to.equal(childNode1);\n expect(children.get([PATH_TOKENS.UP, 'children', childNode1.getGuid()])).to.equal(childNode1);\n });\n\n it('.remove should return the item removed', function() {\n var myNode1 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var childNode3 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var childNode4 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var mySet = myNode1._properties.children;\n mySet.insert(childNode3);\n mySet.insert(childNode4);\n expect(mySet.remove(childNode3)).to.deep.equal(childNode3);\n expect(mySet.remove(childNode4.getGuid())).to.deep.equal(childNode4);\n });\n\n it('getValues should work', function() {\n var myNode1 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var childNode3 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var childNode4 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var mySet = myNode1._properties.children;\n mySet.insert(childNode3);\n mySet.insert(childNode4);\n var guid = myNode1.getGuid();\n var guidChild3 = childNode3.getGuid();\n var guidChild4 = childNode4.getGuid();\n expect(function() { myNode1.getValues(); }).to.not.throw();\n var expectedStr = '{\"stringProperty\":\"\",' +\n '\"stringProperty2\":\"\",' +\n '\"children\":{\"' +\n guidChild3 + '\":{\"stringProperty\":\"\",' +\n '\"stringProperty2\":\"\",' +\n '\"children\":{},' +\n '\"guid\":\"' + guidChild3 + '\"},' +\n '\"' + guidChild4 + '\":{\"stringProperty\":\"\",' +\n '\"stringProperty2\":\"\",' +\n '\"children\":{},' +\n '\"guid\":\"' + guidChild4 + '\"}},' +\n '\"guid\":\"' + guid + '\"}';\n expect(JSON.stringify(myNode1.getValues())).to.equal(expectedStr);\n });\n\n it('should output a pretty string with prettyPrint()', function() {\n var guid = myNode.getGuid();\n var guidChild1 = childNode1.getGuid();\n var guidChild2 = childNode2.getGuid();\n\n var expectedPrettyStr =\n guid + ' (autodesk.tests:TestPropertyID-1.0.0):\\n' +\n ' stringProperty (String): \"\"\\n' +\n ' stringProperty2 (String): \"\"\\n' +\n ' children (Set of NamedProperty):\\n' +\n ' ' + guidChild1 + ' (autodesk.tests:TestPropertyID-1.0.0):\\n' +\n ' stringProperty (String): \"\"\\n' +\n ' stringProperty2 (String): \"\"\\n' +\n ' children (Set of NamedProperty):\\n' +\n ' guid (String): \"' + guidChild1 + '\"\\n' +\n ' ' + guidChild2 + ' (autodesk.tests:TestPropertyID-1.0.0):\\n' +\n ' stringProperty (String): \"\"\\n' +\n ' stringProperty2 (String): \"\"\\n' +\n ' children (Set of NamedProperty):\\n' +\n ' guid (String): \"' + guidChild2 + '\"\\n' +\n ' guid (String): \"' + guid + '\"\\n';\n var prettyStr = '';\n myNode.prettyPrint(function(str) {\n prettyStr += str + '\\n';\n });\n expect(prettyStr).to.equal(expectedPrettyStr);\n });\n\n it('Should track dirtiness', function() {\n children.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n expect(children._serialize(true, false, BaseProperty.MODIFIED_STATE_FLAGS.DIRTY)).to.be.empty;\n expect(children._serialize(true, false,\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE)).deep.equal(changeSetWithTwoChildren_full);\n expect(children.serialize({ 'dirtyOnly': false })).deep.equal(changeSetWithTwoChildren_full);\n });\n\n it('Should handle removals correctly', function() {\n children.remove(childNode1);\n expect(childNode1.getParent()).to.be.undefined;\n children.remove(childNode2.getGuid());\n expect(children._serialize(true, false, BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE)).to.be.empty;\n expect(children._serialize(false)).to.be.empty;\n removalChangeSet = children.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(childNode1.getGuid());\n expect(removalChangeSet.remove).to.contain(childNode1.getGuid());\n });\n\n it('Should support deserialization', function() {\n var deserializedNode = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var deserializedChanges1 = deserializedNode._properties.children.deserialize(changeSetWithTwoChildren);\n var CS4 = deserializedNode._properties.children.serialize({ 'dirtyOnly': false });\n expect(CS4).to.deep.equal(changeSetWithTwoChildren);\n expect(deserializedChanges1).to.deep.equal(changeSetWithTwoChildren);\n\n var deserializedChanges2 = deserializedNode._properties.children.deserialize(changeSetWithTwoChildren);\n expect(deserializedChanges2).to.be.empty;\n\n var deserializedChanges3 = deserializedNode._properties.children.deserialize({});\n expect(deserializedChanges3).to.deep.equal(removalChangeSet);\n });\n\n it('Should support deserialization for inserts and removes', function() {\n var deserializedNode = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var deserializedNode2 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n\n var namedProperty = PropertyFactory.create('NamedProperty');\n deserializedNode._properties.children.insert(namedProperty);\n deserializedNode2.deserialize(deserializedNode.serialize({ 'dirtyOnly': false }));\n expect(deserializedNode2.serialize({ 'dirtyOnly': false })).to.deep.equal(\n deserializedNode.serialize({ 'dirtyOnly': false }));\n\n deserializedNode._properties.children.remove(namedProperty);\n deserializedNode2.deserialize(deserializedNode.serialize({ 'dirtyOnly': false }));\n expect(deserializedNode2.serialize({ 'dirtyOnly': false })).to.deep.equal(\n deserializedNode.serialize({ 'dirtyOnly': false }));\n });\n\n it('Should track modifies', function() {\n var modifyNode1 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var modifyNode2 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n\n modifyNode1._properties.children.deserialize(changeSetWithTwoChildren);\n modifyNode2._properties.children.deserialize(changeSetWithTwoChildren);\n\n modifyNode1._properties.children.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n var child1 = modifyNode1._properties.children.get(childNode1.getGuid());\n child1._properties.stringProperty.value = 'modify test';\n var modifyChangeSet = modifyNode1._properties.children._serialize(true);\n modifyNode2._properties.children.applyChangeSet(modifyChangeSet);\n expect(modifyNode2._properties.children._serialize(false))\n .to.deep.equal(modifyNode1._properties.children._serialize(false));\n });\n\n it('Should support hierarchical properties', function() {\n var node1 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var node3 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n\n // Create a hierarchy of three nodes\n node1._properties.children.insert(node2);\n node2._properties.children.insert(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:TestPropertyID-1.0.0');\n deserializedNode.deserialize(hierarchicalChangeSet);\n var child1 = deserializedNode._properties.children.getAsArray()[0];\n expect(child1).to.not.equal(undefined);\n var child2 = child1._properties.children.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.children.getAsArray()[0];\n expect(child1).to.not.equal(undefined);\n child2 = child1._properties.children.getAsArray()[0];\n expect(child2).to.not.equal(undefined);\n expect(child2._properties.stringProperty.value).to.equal('test2');\n });\n\n it('adding a NamedNodeProperty should be possible', function() {\n var set = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0')._properties.children;\n var namedNodeProp = PropertyFactory.create('NamedNodeProperty');\n set.insert(namedNodeProp);\n\n expect(set.has(namedNodeProp.getGuid())).to.be.true;\n expect(set.get(namedNodeProp.getGuid())).to.equal(namedNodeProp);\n });\n\n it('path creation and resolution should work for entries of the map', function() {\n var rootNode = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var node = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n rootNode._properties.children.insert(node);\n\n // Test whether the returned paths are correct\n expect(node.getAbsolutePath()).to.equal('/children[' + node.getGuid() + ']');\n expect(node.getRelativePath(node)).to.equal('');\n expect(node.getRelativePath(rootNode.resolvePath('children'))).to.equal('[' + node.getGuid() + ']');\n expect(rootNode.getRelativePath(node)).to.equal('../../');\n\n expect(rootNode.resolvePath('children[' + node.getGuid() + ']')).to.equal(node);\n expect(rootNode.resolvePath('children').resolvePath('[' + node.getGuid() + ']')).to.equal(node);\n\n // Test whether they are updated correctly\n rootNode._properties.children.remove(node);\n\n // After removal the old paths should be undefined\n expect(rootNode.resolvePath('children[' + node.getGuid() + ']')).to.be.undefined;\n expect(rootNode.resolvePath('children').resolvePath('[' + node.getGuid() + ']')).to.be.undefined;\n\n // And the node should have an empty absolute path\n expect(node.getAbsolutePath()).to.equal('/');\n });\n\n describe('Setting values', function() {\n before(function() {\n var SetValueEntryTemplate = {\n typeid: 'autodesk.tests:SetValueEntry-1.0.0',\n inherits: ['NamedProperty'],\n properties: [{ id: 'string', typeid: 'String' }],\n };\n\n var SetValueTemplate = {\n typeid: 'autodesk.tests:SetValue-1.0.0',\n properties: [{ id: 'set', typeid: 'autodesk.tests:SetValueEntry-1.0.0', context: 'set' }],\n };\n\n PropertyFactory.register(SetValueEntryTemplate);\n PropertyFactory.register(SetValueTemplate);\n });\n\n it('should set values for a list of property inputs', function() {\n var setValueEntry1 = PropertyFactory.create('autodesk.tests:SetValueEntry-1.0.0', null, {\n string: 'I am a string 1',\n });\n\n var setValueEntry2 = PropertyFactory.create('autodesk.tests:SetValueEntry-1.0.0', null, {\n string: 'I am a string 2',\n });\n\n var setValue = PropertyFactory.create('autodesk.tests:SetValue-1.0.0');\n\n setValue.get('set').setValues([setValueEntry1, setValueEntry2]);\n\n expect(setValue.get('set').getAsArray().length).to.equal(2);\n expect(setValue.get('set').getAsArray()[0].get('string').getValue()).to.equal('I am a string 1');\n expect(setValue.get('set').getAsArray()[1].get('string').getValue()).to.equal('I am a string 2');\n });\n\n it('should set values for a list of untyped inputs', function() {\n var setValue = PropertyFactory.create('autodesk.tests:SetValue-1.0.0');\n\n setValue.get('set').setValues([{ string: 'I am a string 1' }, { string: 'I am a string 2' }]);\n\n expect(setValue.get('set').getAsArray().length).to.equal(2);\n expect(setValue.get('set').getAsArray()[0].get('string').getValue()).to.equal('I am a string 1');\n expect(setValue.get('set').getAsArray()[1].get('string').getValue()).to.equal('I am a string 2');\n });\n\n it('should update values for existing keys and create new ones for non-existing keys', function() {\n var setValueEntry1 = PropertyFactory.create('autodesk.tests:SetValueEntry-1.0.0', null, {\n string: 'I am a string 1',\n });\n\n var setValueEntry2 = PropertyFactory.create('autodesk.tests:SetValueEntry-1.0.0', null, {\n string: 'I am a string 2',\n });\n\n var setValue = PropertyFactory.create('autodesk.tests:SetValue-1.0.0');\n\n setValue.get('set').setValues([setValueEntry1, setValueEntry2]);\n setValueEntry1.get('string').setValue('I am a string 1, overriden');\n setValue.get('set').setValues([setValueEntry1, setValueEntry2, { string: 'I am a string 3' }]);\n\n expect(setValue.get('set').getAsArray().length).to.equal(3);\n expect(setValue.get('set').getAsArray()[0].get('string').getValue()).to.equal('I am a string 1, overriden');\n expect(setValue.get('set').getAsArray()[1].get('string').getValue()).to.equal('I am a string 2');\n expect(setValue.get('set').getAsArray()[2].get('string').getValue()).to.equal('I am a string 3');\n\n setValueEntry2.get('string').setValue('I am a string 2, overriden');\n setValue.get('set').setValues([{ string: 'I am a string 4' }, setValueEntry2]);\n\n expect(setValue.get('set').getAsArray().length).to.equal(4);\n expect(setValue.get('set').getAsArray()[0].get('string').getValue()).to.equal('I am a string 1, overriden');\n expect(setValue.get('set').getAsArray()[3].get('string').getValue()).to.equal('I am a string 2, overriden');\n expect(setValue.get('set').getAsArray()[1].get('string').getValue()).to.equal('I am a string 3');\n expect(setValue.get('set').getAsArray()[2].get('string').getValue()).to.equal('I am a string 4');\n });\n });\n });\n\n describe('squashing', function() {\n //\n // Helper function which takes a sequence of callbacks that are successively executed\n // and the changes applied by the callbacks are separately tracked and squashed in a\n // a ChangeSet. This ChangeSet is then compared to the state in the property object\n //\n // Optionally, a a callback which controls the initial state before the squashing can\n // be given as first parameter\n //\n var testChangeSetSquashing = function(in_options) {\n var testProperty = PropertyFactory.create('autodesk.tests:TestPropertyID-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());\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['set<NamedProperty>'].children).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:TestPropertyID-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:TestPropertyID-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.children.insert(node1);\n },\n callbacks: [\n removeFirstNodeInRoot,\n function(root) {\n root._properties.children.insert(node2);\n },\n ],\n post: function(changeset) {\n expect(changeset['set<NamedProperty>'].children).to.have.all.keys('remove', 'insert');\n },\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:TestPropertyID-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:TestPropertyID-1.0.0');\n baseProperty2.deserialize(baseProperty1.serialize());\n var baseProperty3 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n baseProperty3.deserialize(baseProperty1.serialize());\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();\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:TestPropertyID-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.children.insert(node1);\n root._properties.children.insert(node2);\n },\n op1: function(root) {\n root._properties.children.remove(node1);\n },\n op2: function(root) {\n root._properties.children.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:TestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.children.insert(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:TestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.children.insert(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('children[' + node1.getGuid() + ']');\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:TestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.children.insert(node1);\n },\n op1: function(root) {\n root._properties.children.remove(node1);\n },\n op2: function(root) {\n root._properties.children.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:TestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.children.insert(node1);\n },\n op1: function(root) {\n root._properties.children.getAsArray()[0]._properties.stringProperty.value = 'a';\n },\n op2: function(root) {\n root._properties.children.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:TestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.children.insert(node1);\n },\n op1: function(root) {\n root._properties.children.getAsArray()[0]._properties.stringProperty.value = 'a';\n },\n op2: function(root) {\n root._properties.children.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('children[' + node1.getGuid() + '].stringProperty');\n },\n });\n });\n\n it('with modify followed by remove+insert should work', function() {\n var node1;\n testRebasing({\n prepare: function(root) {\n node1 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n\n root._properties.children.insert(node1);\n },\n op1: modifyLeaf,\n op2: function(root) {\n var node2 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n node2._properties.guid.value = node1._properties.guid.value;\n\n root._properties.children.remove(node1);\n root._properties.children.insert(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('children[' + node1.getGuid() + ']');\n expect(changeSet['set<NamedProperty>'].children).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:TestPropertyID-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root._properties.children.insert(node1);\n },\n op1: function(root) {\n var node2 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n node2._properties.guid.value = node1._properties.guid.value;\n\n root._properties.children.remove(node1);\n root._properties.children.insert(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('children[' + node1.getGuid() + ']');\n },\n });\n });\n\n it('with remove+insert followed by remove+insert should report conflict', function() {\n var node = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var node1 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n\n node1._properties.guid.value = node._properties.guid.value;\n node2._properties.guid.value = node._properties.guid.value;\n testRebasing({\n prepare: function(root) {\n root._properties.children.insert(node);\n },\n op1: function(root) {\n root._properties.children.set(node1);\n },\n op2: function(root) {\n root._properties.children.set(node2);\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('children[' + node.getGuid() + ']');\n },\n });\n });\n\n it('with conflicting inserts should report conflict', function() {\n var node1 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:TestPropertyID-1.0.0');\n node2._properties.guid.value = node1._properties.guid.value;\n\n testRebasing({\n prepare: function(root) {\n },\n op1: function(root) {\n root._properties.children.insert(node1);\n },\n op2: function(root) {\n root._properties.children.insert(node2);\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('children[' + node1.getGuid() + ']');\n },\n });\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"setProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/setProperty.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 set property object described in /src/properties/setProperty.js\n */\nconst { ChangeSet } = require(\"@fluid-experimental/property-changeset\");\nconst { generateGUID } = require(\"@fluid-experimental/property-common\").GuidUtils;\nconst _ = require(\"lodash\");\nconst { PropertyFactory } = require(\"../..\");\nconst { BaseProperty } = require(\"../..\");\n\ndescribe(\"SetProperty\", function () {\n\tvar PATH_TOKENS;\n\tvar changeSetWithTwoChildren, changeSetWithTwoChildren_full, removalChangeSet;\n\tvar myNode, childNode1, childNode2, children;\n\n\tbefore(function () {\n\t\tPATH_TOKENS = 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:TestPropertyID-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: \"children\", context: \"set\", typeid: \"NamedProperty\" },\n\t\t\t],\n\t\t};\n\n\t\tPropertyFactory._reregister(TestPropertyTemplate);\n\t\tmyNode = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\tchildNode1 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\tchildNode2 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\n\t\tchildren = myNode._properties.children;\n\t});\n\n\t// Helper functions for the test cases\n\n\t// Inserts a node with the given guid (a new one is generated when undefined)\n\tvar insertNodeInRootWithGuid = function (guid, root) {\n\t\tvar child = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\tif (guid) {\n\t\t\tchild._properties.guid.value = guid;\n\t\t}\n\t\troot._properties.children.insert(child);\n\t};\n\n\t// Inserts a new node in the root\n\tvar insertNodeInRoot = function (root) {\n\t\tinsertNodeInRootWithGuid(generateGUID(), root);\n\t};\n\n\t// Returns a function that will insert a node with a constant GUID\n\tvar insertUniqueNodeInRoot = function () {\n\t\treturn insertNodeInRootWithGuid.bind(undefined, 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.children.getAsArray().length > 0) {\n\t\t\tleaf = leaf._properties.children.getAsArray()[0];\n\t\t}\n\t\tvar child = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\tleaf._properties.children.insert(child);\n\t};\n\n\t// Removes the first node from the root\n\tvar removeFirstNodeInRoot = function (root) {\n\t\tvar firstChild = root._properties.children.getAsArray()[0];\n\t\troot._properties.children.remove(firstChild);\n\t};\n\n\t// Modifies the leaf node\n\tvar modifyLeaf = function (root) {\n\t\tvar leaf = root;\n\t\twhile (leaf._properties.children.getAsArray().length > 0) {\n\t\t\tleaf = leaf._properties.children.getAsArray()[0];\n\t\t}\n\t\tleaf._properties.stringProperty.value = leaf._properties.stringProperty.value + \"+\";\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(children.getEntriesReadOnly()).to.be.empty;\n\t\t\texpect(children._serialize(true)).to.be.empty;\n\t\t});\n\n\t\tit(\"should be possible to insert children\", function () {\n\t\t\t// Test insertion of the first child\n\t\t\tchildren.insert(childNode1);\n\t\t\texpect(children.has(childNode1.getGuid())).to.be.ok;\n\t\t\texpect(!children.has(childNode2.getGuid())).to.be.ok;\n\t\t\texpect(children.get(childNode2.getGuid())).to.equal(undefined);\n\t\t\texpect(childNode1.getParent()).to.equal(children);\n\n\t\t\tvar CS = children.serialize({ dirtyOnly: true });\n\t\t\texpect(\n\t\t\t\tCS.insert &&\n\t\t\t\t\tCS.insert[\"autodesk.tests:TestPropertyID-1.0.0\"] &&\n\t\t\t\t\t_.keys(CS.insert[\"autodesk.tests:TestPropertyID-1.0.0\"]).length === 1 &&\n\t\t\t\t\t_.keys(CS.insert[\"autodesk.tests:TestPropertyID-1.0.0\"])[0] ===\n\t\t\t\t\t\tchildNode1.getGuid(),\n\t\t\t).to.be.ok;\n\n\t\t\t// Test insertion of the second child\n\t\t\tchildren.insert(childNode2);\n\t\t\texpect(children.has(childNode2.getGuid())).to.be.ok;\n\t\t\texpect(children.get(childNode2.getGuid())).to.equal(childNode2);\n\t\t\tchangeSetWithTwoChildren = children.serialize({ dirtyOnly: true });\n\t\t\texpect(\n\t\t\t\tchangeSetWithTwoChildren.insert &&\n\t\t\t\t\tchangeSetWithTwoChildren.insert[\"autodesk.tests:TestPropertyID-1.0.0\"] &&\n\t\t\t\t\t_.keys(changeSetWithTwoChildren.insert[\"autodesk.tests:TestPropertyID-1.0.0\"])\n\t\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\tchangeSetWithTwoChildren.insert[\"autodesk.tests:TestPropertyID-1.0.0\"],\n\t\t\t\t\t\t),\n\t\t\t\t\t\tchildNode1.getGuid(),\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\tchangeSetWithTwoChildren.insert[\"autodesk.tests:TestPropertyID-1.0.0\"],\n\t\t\t\t\t\t),\n\t\t\t\t\t\tchildNode2.getGuid(),\n\t\t\t\t\t),\n\t\t\t).to.be.ok;\n\n\t\t\tchangeSetWithTwoChildren_full = children.serialize({ dirtyOnly: false });\n\t\t\texpect(changeSetWithTwoChildren).to.deep.equal(changeSetWithTwoChildren_full);\n\t\t});\n\n\t\tit(\".get and .resolvePath should work\", function () {\n\t\t\texpect(children.get(childNode1.getGuid())).to.equal(childNode1);\n\t\t\texpect(children.resolvePath(\"/children[\" + childNode1.getGuid() + \"]\")).to.equal(\n\t\t\t\tchildNode1,\n\t\t\t);\n\t\t\texpect(children.get([PATH_TOKENS.ROOT, \"children\", childNode1.getGuid()])).to.equal(\n\t\t\t\tchildNode1,\n\t\t\t);\n\t\t\texpect(children.resolvePath(\"../children[\" + childNode1.getGuid() + \"]\")).to.equal(\n\t\t\t\tchildNode1,\n\t\t\t);\n\t\t\texpect(children.get([PATH_TOKENS.UP, \"children\", childNode1.getGuid()])).to.equal(\n\t\t\t\tchildNode1,\n\t\t\t);\n\t\t});\n\n\t\tit(\".remove should return the item removed\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tvar childNode3 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tvar childNode4 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tvar mySet = myNode1._properties.children;\n\t\t\tmySet.insert(childNode3);\n\t\t\tmySet.insert(childNode4);\n\t\t\texpect(mySet.remove(childNode3)).to.deep.equal(childNode3);\n\t\t\texpect(mySet.remove(childNode4.getGuid())).to.deep.equal(childNode4);\n\t\t});\n\n\t\tit(\"getValues should work\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tvar childNode3 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tvar childNode4 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tvar mySet = myNode1._properties.children;\n\t\t\tmySet.insert(childNode3);\n\t\t\tmySet.insert(childNode4);\n\t\t\tvar guid = myNode1.getGuid();\n\t\t\tvar guidChild3 = childNode3.getGuid();\n\t\t\tvar guidChild4 = childNode4.getGuid();\n\t\t\texpect(function () {\n\t\t\t\tmyNode1.getValues();\n\t\t\t}).to.not.throw();\n\t\t\tvar expectedStr =\n\t\t\t\t'{\"stringProperty\":\"\",' +\n\t\t\t\t'\"stringProperty2\":\"\",' +\n\t\t\t\t'\"children\":{\"' +\n\t\t\t\tguidChild3 +\n\t\t\t\t'\":{\"stringProperty\":\"\",' +\n\t\t\t\t'\"stringProperty2\":\"\",' +\n\t\t\t\t'\"children\":{},' +\n\t\t\t\t'\"guid\":\"' +\n\t\t\t\tguidChild3 +\n\t\t\t\t'\"},' +\n\t\t\t\t'\"' +\n\t\t\t\tguidChild4 +\n\t\t\t\t'\":{\"stringProperty\":\"\",' +\n\t\t\t\t'\"stringProperty2\":\"\",' +\n\t\t\t\t'\"children\":{},' +\n\t\t\t\t'\"guid\":\"' +\n\t\t\t\tguidChild4 +\n\t\t\t\t'\"}},' +\n\t\t\t\t'\"guid\":\"' +\n\t\t\t\tguid +\n\t\t\t\t'\"}';\n\t\t\texpect(JSON.stringify(myNode1.getValues())).to.equal(expectedStr);\n\t\t});\n\n\t\tit(\"should output a pretty string with prettyPrint()\", function () {\n\t\t\tvar guid = myNode.getGuid();\n\t\t\tvar guidChild1 = childNode1.getGuid();\n\t\t\tvar guidChild2 = childNode2.getGuid();\n\n\t\t\tvar expectedPrettyStr =\n\t\t\t\tguid +\n\t\t\t\t\" (autodesk.tests:TestPropertyID-1.0.0):\\n\" +\n\t\t\t\t' stringProperty (String): \"\"\\n' +\n\t\t\t\t' stringProperty2 (String): \"\"\\n' +\n\t\t\t\t\" children (Set of NamedProperty):\\n\" +\n\t\t\t\t\" \" +\n\t\t\t\tguidChild1 +\n\t\t\t\t\" (autodesk.tests:TestPropertyID-1.0.0):\\n\" +\n\t\t\t\t' stringProperty (String): \"\"\\n' +\n\t\t\t\t' stringProperty2 (String): \"\"\\n' +\n\t\t\t\t\" children (Set of NamedProperty):\\n\" +\n\t\t\t\t' guid (String): \"' +\n\t\t\t\tguidChild1 +\n\t\t\t\t'\"\\n' +\n\t\t\t\t\" \" +\n\t\t\t\tguidChild2 +\n\t\t\t\t\" (autodesk.tests:TestPropertyID-1.0.0):\\n\" +\n\t\t\t\t' stringProperty (String): \"\"\\n' +\n\t\t\t\t' stringProperty2 (String): \"\"\\n' +\n\t\t\t\t\" children (Set of NamedProperty):\\n\" +\n\t\t\t\t' guid (String): \"' +\n\t\t\t\tguidChild2 +\n\t\t\t\t'\"\\n' +\n\t\t\t\t' guid (String): \"' +\n\t\t\t\tguid +\n\t\t\t\t'\"\\n';\n\t\t\tvar prettyStr = \"\";\n\t\t\tmyNode.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});\n\n\t\tit(\"Should track dirtiness\", function () {\n\t\t\tchildren.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n\t\t\texpect(children._serialize(true, false, BaseProperty.MODIFIED_STATE_FLAGS.DIRTY)).to.be\n\t\t\t\t.empty;\n\t\t\texpect(\n\t\t\t\tchildren._serialize(true, false, BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE),\n\t\t\t).deep.equal(changeSetWithTwoChildren_full);\n\t\t\texpect(children.serialize({ dirtyOnly: false })).deep.equal(\n\t\t\t\tchangeSetWithTwoChildren_full,\n\t\t\t);\n\t\t});\n\n\t\tit(\"Should handle removals correctly\", function () {\n\t\t\tchildren.remove(childNode1);\n\t\t\texpect(childNode1.getParent()).to.be.undefined;\n\t\t\tchildren.remove(childNode2.getGuid());\n\t\t\texpect(\n\t\t\t\tchildren._serialize(true, false, BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE),\n\t\t\t).to.be.empty;\n\t\t\texpect(children._serialize(false)).to.be.empty;\n\t\t\tremovalChangeSet = children.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(childNode1.getGuid());\n\t\t\texpect(removalChangeSet.remove).to.contain(childNode1.getGuid());\n\t\t});\n\n\t\tit(\"Should support deserialization\", function () {\n\t\t\tvar deserializedNode = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tvar deserializedChanges1 =\n\t\t\t\tdeserializedNode._properties.children.deserialize(changeSetWithTwoChildren);\n\t\t\tvar CS4 = deserializedNode._properties.children.serialize({ dirtyOnly: false });\n\t\t\texpect(CS4).to.deep.equal(changeSetWithTwoChildren);\n\t\t\texpect(deserializedChanges1).to.deep.equal(changeSetWithTwoChildren);\n\n\t\t\tvar deserializedChanges2 =\n\t\t\t\tdeserializedNode._properties.children.deserialize(changeSetWithTwoChildren);\n\t\t\texpect(deserializedChanges2).to.be.empty;\n\n\t\t\tvar deserializedChanges3 = deserializedNode._properties.children.deserialize({});\n\t\t\texpect(deserializedChanges3).to.deep.equal(removalChangeSet);\n\t\t});\n\n\t\tit(\"Should support deserialization for inserts and removes\", function () {\n\t\t\tvar deserializedNode = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tvar deserializedNode2 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\n\t\t\tvar namedProperty = PropertyFactory.create(\"NamedProperty\");\n\t\t\tdeserializedNode._properties.children.insert(namedProperty);\n\t\t\tdeserializedNode2.deserialize(deserializedNode.serialize({ dirtyOnly: false }));\n\t\t\texpect(deserializedNode2.serialize({ dirtyOnly: false })).to.deep.equal(\n\t\t\t\tdeserializedNode.serialize({ dirtyOnly: false }),\n\t\t\t);\n\n\t\t\tdeserializedNode._properties.children.remove(namedProperty);\n\t\t\tdeserializedNode2.deserialize(deserializedNode.serialize({ dirtyOnly: false }));\n\t\t\texpect(deserializedNode2.serialize({ dirtyOnly: false })).to.deep.equal(\n\t\t\t\tdeserializedNode.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t});\n\n\t\tit(\"Should track modifies\", function () {\n\t\t\tvar modifyNode1 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tvar modifyNode2 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\n\t\t\tmodifyNode1._properties.children.deserialize(changeSetWithTwoChildren);\n\t\t\tmodifyNode2._properties.children.deserialize(changeSetWithTwoChildren);\n\n\t\t\tmodifyNode1._properties.children.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.children.get(childNode1.getGuid());\n\t\t\tchild1._properties.stringProperty.value = \"modify test\";\n\t\t\tvar modifyChangeSet = modifyNode1._properties.children._serialize(true);\n\t\t\tmodifyNode2._properties.children.applyChangeSet(modifyChangeSet);\n\t\t\texpect(modifyNode2._properties.children._serialize(false)).to.deep.equal(\n\t\t\t\tmodifyNode1._properties.children._serialize(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:TestPropertyID-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tvar node3 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\n\t\t\t// Create a hierarchy of three nodes\n\t\t\tnode1._properties.children.insert(node2);\n\t\t\tnode2._properties.children.insert(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:TestPropertyID-1.0.0\");\n\t\t\tdeserializedNode.deserialize(hierarchicalChangeSet);\n\t\t\tvar child1 = deserializedNode._properties.children.getAsArray()[0];\n\t\t\texpect(child1).to.not.equal(undefined);\n\t\t\tvar child2 = child1._properties.children.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.children.getAsArray()[0];\n\t\t\texpect(child1).to.not.equal(undefined);\n\t\t\tchild2 = child1._properties.children.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(\"adding a NamedNodeProperty should be possible\", function () {\n\t\t\tvar set = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\")._properties\n\t\t\t\t.children;\n\t\t\tvar namedNodeProp = PropertyFactory.create(\"NamedNodeProperty\");\n\t\t\tset.insert(namedNodeProp);\n\n\t\t\texpect(set.has(namedNodeProp.getGuid())).to.be.true;\n\t\t\texpect(set.get(namedNodeProp.getGuid())).to.equal(namedNodeProp);\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:TestPropertyID-1.0.0\");\n\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\trootNode._properties.children.insert(node);\n\n\t\t\t// Test whether the returned paths are correct\n\t\t\texpect(node.getAbsolutePath()).to.equal(\"/children[\" + node.getGuid() + \"]\");\n\t\t\texpect(node.getRelativePath(node)).to.equal(\"\");\n\t\t\texpect(node.getRelativePath(rootNode.resolvePath(\"children\"))).to.equal(\n\t\t\t\t\"[\" + node.getGuid() + \"]\",\n\t\t\t);\n\t\t\texpect(rootNode.getRelativePath(node)).to.equal(\"../../\");\n\n\t\t\texpect(rootNode.resolvePath(\"children[\" + node.getGuid() + \"]\")).to.equal(node);\n\t\t\texpect(\n\t\t\t\trootNode.resolvePath(\"children\").resolvePath(\"[\" + node.getGuid() + \"]\"),\n\t\t\t).to.equal(node);\n\n\t\t\t// Test whether they are updated correctly\n\t\t\trootNode._properties.children.remove(node);\n\n\t\t\t// After removal the old paths should be undefined\n\t\t\texpect(rootNode.resolvePath(\"children[\" + node.getGuid() + \"]\")).to.be.undefined;\n\t\t\texpect(rootNode.resolvePath(\"children\").resolvePath(\"[\" + node.getGuid() + \"]\")).to.be\n\t\t\t\t.undefined;\n\n\t\t\t// And the node should have an empty absolute path\n\t\t\texpect(node.getAbsolutePath()).to.equal(\"/\");\n\t\t});\n\n\t\tdescribe(\"Setting values\", function () {\n\t\t\tbefore(function () {\n\t\t\t\tvar SetValueEntryTemplate = {\n\t\t\t\t\ttypeid: \"autodesk.tests:SetValueEntry-1.0.0\",\n\t\t\t\t\tinherits: [\"NamedProperty\"],\n\t\t\t\t\tproperties: [{ id: \"string\", typeid: \"String\" }],\n\t\t\t\t};\n\n\t\t\t\tvar SetValueTemplate = {\n\t\t\t\t\ttypeid: \"autodesk.tests:SetValue-1.0.0\",\n\t\t\t\t\tproperties: [\n\t\t\t\t\t\t{ id: \"set\", typeid: \"autodesk.tests:SetValueEntry-1.0.0\", context: \"set\" },\n\t\t\t\t\t],\n\t\t\t\t};\n\n\t\t\t\tPropertyFactory.register(SetValueEntryTemplate);\n\t\t\t\tPropertyFactory.register(SetValueTemplate);\n\t\t\t});\n\n\t\t\tit(\"should set values for a list of property inputs\", function () {\n\t\t\t\tvar setValueEntry1 = PropertyFactory.create(\n\t\t\t\t\t\"autodesk.tests:SetValueEntry-1.0.0\",\n\t\t\t\t\tnull,\n\t\t\t\t\t{\n\t\t\t\t\t\tstring: \"I am a string 1\",\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tvar setValueEntry2 = PropertyFactory.create(\n\t\t\t\t\t\"autodesk.tests:SetValueEntry-1.0.0\",\n\t\t\t\t\tnull,\n\t\t\t\t\t{\n\t\t\t\t\t\tstring: \"I am a string 2\",\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tvar setValue = PropertyFactory.create(\"autodesk.tests:SetValue-1.0.0\");\n\n\t\t\t\tsetValue.get(\"set\").setValues([setValueEntry1, setValueEntry2]);\n\n\t\t\t\texpect(setValue.get(\"set\").getAsArray().length).to.equal(2);\n\t\t\t\texpect(setValue.get(\"set\").getAsArray()[0].get(\"string\").getValue()).to.equal(\n\t\t\t\t\t\"I am a string 1\",\n\t\t\t\t);\n\t\t\t\texpect(setValue.get(\"set\").getAsArray()[1].get(\"string\").getValue()).to.equal(\n\t\t\t\t\t\"I am a string 2\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"should set values for a list of untyped inputs\", function () {\n\t\t\t\tvar setValue = PropertyFactory.create(\"autodesk.tests:SetValue-1.0.0\");\n\n\t\t\t\tsetValue\n\t\t\t\t\t.get(\"set\")\n\t\t\t\t\t.setValues([{ string: \"I am a string 1\" }, { string: \"I am a string 2\" }]);\n\n\t\t\t\texpect(setValue.get(\"set\").getAsArray().length).to.equal(2);\n\t\t\t\texpect(setValue.get(\"set\").getAsArray()[0].get(\"string\").getValue()).to.equal(\n\t\t\t\t\t\"I am a string 1\",\n\t\t\t\t);\n\t\t\t\texpect(setValue.get(\"set\").getAsArray()[1].get(\"string\").getValue()).to.equal(\n\t\t\t\t\t\"I am a string 2\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"should update values for existing keys and create new ones for non-existing keys\", function () {\n\t\t\t\tvar setValueEntry1 = PropertyFactory.create(\n\t\t\t\t\t\"autodesk.tests:SetValueEntry-1.0.0\",\n\t\t\t\t\tnull,\n\t\t\t\t\t{\n\t\t\t\t\t\tstring: \"I am a string 1\",\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tvar setValueEntry2 = PropertyFactory.create(\n\t\t\t\t\t\"autodesk.tests:SetValueEntry-1.0.0\",\n\t\t\t\t\tnull,\n\t\t\t\t\t{\n\t\t\t\t\t\tstring: \"I am a string 2\",\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tvar setValue = PropertyFactory.create(\"autodesk.tests:SetValue-1.0.0\");\n\n\t\t\t\tsetValue.get(\"set\").setValues([setValueEntry1, setValueEntry2]);\n\t\t\t\tsetValueEntry1.get(\"string\").setValue(\"I am a string 1, overriden\");\n\t\t\t\tsetValue\n\t\t\t\t\t.get(\"set\")\n\t\t\t\t\t.setValues([setValueEntry1, setValueEntry2, { string: \"I am a string 3\" }]);\n\n\t\t\t\texpect(setValue.get(\"set\").getAsArray().length).to.equal(3);\n\t\t\t\texpect(setValue.get(\"set\").getAsArray()[0].get(\"string\").getValue()).to.equal(\n\t\t\t\t\t\"I am a string 1, overriden\",\n\t\t\t\t);\n\t\t\t\texpect(setValue.get(\"set\").getAsArray()[1].get(\"string\").getValue()).to.equal(\n\t\t\t\t\t\"I am a string 2\",\n\t\t\t\t);\n\t\t\t\texpect(setValue.get(\"set\").getAsArray()[2].get(\"string\").getValue()).to.equal(\n\t\t\t\t\t\"I am a string 3\",\n\t\t\t\t);\n\n\t\t\t\tsetValueEntry2.get(\"string\").setValue(\"I am a string 2, overriden\");\n\t\t\t\tsetValue.get(\"set\").setValues([{ string: \"I am a string 4\" }, setValueEntry2]);\n\n\t\t\t\texpect(setValue.get(\"set\").getAsArray().length).to.equal(4);\n\t\t\t\texpect(setValue.get(\"set\").getAsArray()[0].get(\"string\").getValue()).to.equal(\n\t\t\t\t\t\"I am a string 1, overriden\",\n\t\t\t\t);\n\t\t\t\texpect(setValue.get(\"set\").getAsArray()[3].get(\"string\").getValue()).to.equal(\n\t\t\t\t\t\"I am a string 2, overriden\",\n\t\t\t\t);\n\t\t\t\texpect(setValue.get(\"set\").getAsArray()[1].get(\"string\").getValue()).to.equal(\n\t\t\t\t\t\"I am a string 3\",\n\t\t\t\t);\n\t\t\t\texpect(setValue.get(\"set\").getAsArray()[2].get(\"string\").getValue()).to.equal(\n\t\t\t\t\t\"I am a string 4\",\n\t\t\t\t);\n\t\t\t});\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 successively executed\n\t\t// and the changes applied by the callbacks are separately tracked and squashed in a\n\t\t// a ChangeSet. This ChangeSet is then compared to the state in the property object\n\t\t//\n\t\t// Optionally, a a callback which controls the initial state before the squashing can\n\t\t// be given as first parameter\n\t\t//\n\t\tvar testChangeSetSquashing = function (in_options) {\n\t\t\tvar testProperty = PropertyFactory.create(\"autodesk.tests:TestPropertyID-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(),\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[\"set<NamedProperty>\"].children).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:TestPropertyID-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-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.children.insert(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.children.insert(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[\"set<NamedProperty>\"].children).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});\n\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:TestPropertyID-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:TestPropertyID-1.0.0\");\n\t\t\tbaseProperty2.deserialize(baseProperty1.serialize());\n\t\t\tvar baseProperty3 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tbaseProperty3.deserialize(baseProperty1.serialize());\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();\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:TestPropertyID-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.children.insert(node1);\n\t\t\t\t\troot._properties.children.insert(node2);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.children.remove(node1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.children.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:TestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.children.insert(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:TestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.children.insert(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(\"children[\" + node1.getGuid() + \"]\");\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:TestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.children.insert(node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.children.remove(node1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.children.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:TestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.children.insert(node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.children.getAsArray()[0]._properties.stringProperty.value =\n\t\t\t\t\t\t\"a\";\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.children.getAsArray()[0]._properties.stringProperty2.value =\n\t\t\t\t\t\t\"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:TestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.children.insert(node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.children.getAsArray()[0]._properties.stringProperty.value =\n\t\t\t\t\t\t\"a\";\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.children.getAsArray()[0]._properties.stringProperty.value =\n\t\t\t\t\t\t\"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(\n\t\t\t\t\t\t\"children[\" + node1.getGuid() + \"].stringProperty\",\n\t\t\t\t\t);\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;\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\tnode1 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\n\t\t\t\t\troot._properties.children.insert(node1);\n\t\t\t\t},\n\t\t\t\top1: modifyLeaf,\n\t\t\t\top2: function (root) {\n\t\t\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\t\t\tnode2._properties.guid.value = node1._properties.guid.value;\n\n\t\t\t\t\troot._properties.children.remove(node1);\n\t\t\t\t\troot._properties.children.insert(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(\"children[\" + node1.getGuid() + \"]\");\n\t\t\t\t\texpect(changeSet[\"set<NamedProperty>\"].children).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:TestPropertyID-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.children.insert(node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\t\t\tnode2._properties.guid.value = node1._properties.guid.value;\n\n\t\t\t\t\troot._properties.children.remove(node1);\n\t\t\t\t\troot._properties.children.insert(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(\"children[\" + node1.getGuid() + \"]\");\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\tvar node = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\n\t\t\tnode1._properties.guid.value = node._properties.guid.value;\n\t\t\tnode2._properties.guid.value = node._properties.guid.value;\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot._properties.children.insert(node);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.children.set(node1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.children.set(node2);\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(\"children[\" + node.getGuid() + \"]\");\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\tvar node1 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:TestPropertyID-1.0.0\");\n\t\t\tnode2._properties.guid.value = node1._properties.guid.value;\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot._properties.children.insert(node1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot._properties.children.insert(node2);\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(\"children[\" + node1.getGuid() + \"]\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t});\n});\n"]}
|