@fluid-experimental/property-properties 0.58.1001 → 0.58.2000-58133
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/containerSerializer.d.ts.map +1 -1
- package/dist/containerSerializer.js +4 -10
- package/dist/containerSerializer.js.map +1 -1
- package/dist/enableValidations.d.ts.map +1 -1
- package/dist/enableValidations.js +1 -1
- package/dist/enableValidations.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/properties/abstractStaticCollectionProperty.d.ts.map +1 -1
- package/dist/properties/abstractStaticCollectionProperty.js +1 -28
- package/dist/properties/abstractStaticCollectionProperty.js.map +1 -1
- package/dist/properties/arrayProperty.d.ts.map +1 -1
- package/dist/properties/arrayProperty.js +26 -85
- package/dist/properties/arrayProperty.js.map +1 -1
- package/dist/properties/baseProperty.d.ts.map +1 -1
- package/dist/properties/baseProperty.js +9 -71
- package/dist/properties/baseProperty.js.map +1 -1
- package/dist/properties/boolProperty.d.ts.map +1 -1
- package/dist/properties/boolProperty.js +0 -1
- package/dist/properties/boolProperty.js.map +1 -1
- package/dist/properties/containerProperty.d.ts.map +1 -1
- package/dist/properties/containerProperty.js +4 -22
- package/dist/properties/containerProperty.js.map +1 -1
- package/dist/properties/enumArrayProperty.d.ts.map +1 -1
- package/dist/properties/enumArrayProperty.js +2 -14
- package/dist/properties/enumArrayProperty.js.map +1 -1
- package/dist/properties/enumProperty.d.ts.map +1 -1
- package/dist/properties/enumProperty.js +3 -10
- package/dist/properties/enumProperty.js.map +1 -1
- package/dist/properties/floatProperties.js +0 -2
- package/dist/properties/floatProperties.js.map +1 -1
- package/dist/properties/index.d.ts +7 -38
- package/dist/properties/index.d.ts.map +1 -1
- package/dist/properties/index.js +37 -68
- package/dist/properties/index.js.map +1 -1
- package/dist/properties/indexedCollectionBaseProperty.d.ts.map +1 -1
- package/dist/properties/indexedCollectionBaseProperty.js +6 -18
- package/dist/properties/indexedCollectionBaseProperty.js.map +1 -1
- package/dist/properties/intProperties.d.ts.map +1 -1
- package/dist/properties/intProperties.js +3 -20
- 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 +4 -23
- package/dist/properties/mapProperty.js.map +1 -1
- package/dist/properties/namedNodeProperty.d.ts.map +1 -1
- package/dist/properties/namedNodeProperty.js.map +1 -1
- package/dist/properties/namedProperty.d.ts.map +1 -1
- package/dist/properties/namedProperty.js +0 -3
- package/dist/properties/namedProperty.js.map +1 -1
- package/dist/properties/nodeProperty.d.ts.map +1 -1
- package/dist/properties/nodeProperty.js +0 -3
- package/dist/properties/nodeProperty.js.map +1 -1
- package/dist/properties/primitiveTypeCasts.d.ts.map +1 -1
- package/dist/properties/primitiveTypeCasts.js +2 -2
- package/dist/properties/primitiveTypeCasts.js.map +1 -1
- package/dist/properties/referenceArrayProperty.d.ts.map +1 -1
- package/dist/properties/referenceArrayProperty.js +3 -16
- package/dist/properties/referenceArrayProperty.js.map +1 -1
- package/dist/properties/referenceMapProperty.d.ts.map +1 -1
- package/dist/properties/referenceMapProperty.js +3 -13
- package/dist/properties/referenceMapProperty.js.map +1 -1
- package/dist/properties/referenceProperty.d.ts.map +1 -1
- package/dist/properties/referenceProperty.js +4 -12
- package/dist/properties/referenceProperty.js.map +1 -1
- package/dist/properties/setProperty.d.ts.map +1 -1
- package/dist/properties/setProperty.js +3 -22
- package/dist/properties/setProperty.js.map +1 -1
- package/dist/properties/stringProperty.d.ts.map +1 -1
- package/dist/properties/stringProperty.js +12 -48
- package/dist/properties/stringProperty.js.map +1 -1
- package/dist/properties/uintProperties.js +0 -3
- package/dist/properties/uintProperties.js.map +1 -1
- package/dist/properties/valueArrayProperty.d.ts.map +1 -1
- package/dist/properties/valueArrayProperty.js +3 -45
- package/dist/properties/valueArrayProperty.js.map +1 -1
- package/dist/properties/valueMapProperty.d.ts.map +1 -1
- package/dist/properties/valueMapProperty.js +4 -29
- package/dist/properties/valueMapProperty.js.map +1 -1
- package/dist/properties/valueProperty.d.ts.map +1 -1
- package/dist/properties/valueProperty.js +2 -14
- package/dist/properties/valueProperty.js.map +1 -1
- package/dist/propertyFactory.d.ts.map +1 -1
- package/dist/propertyFactory.js +35 -72
- package/dist/propertyFactory.js.map +1 -1
- package/dist/propertyTemplate.d.ts.map +1 -1
- package/dist/propertyTemplate.js +0 -14
- package/dist/propertyTemplate.js.map +1 -1
- package/dist/propertyTemplateWrapper.d.ts.map +1 -1
- package/dist/propertyTemplateWrapper.js +4 -12
- 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 +82 -82
- package/dist/test/properties/arrayProperty.spec.js.map +1 -1
- package/dist/test/properties/baseProperty.spec.js +53 -53
- package/dist/test/properties/baseProperty.spec.js.map +1 -1
- package/dist/test/properties/containerProperty.spec.js +25 -25
- package/dist/test/properties/containerProperty.spec.js.map +1 -1
- package/dist/test/properties/customArrayProperty.spec.js +35 -35
- package/dist/test/properties/customArrayProperty.spec.js.map +1 -1
- package/dist/test/properties/enumArrayProperty.spec.js +6 -6
- package/dist/test/properties/enumArrayProperty.spec.js.map +1 -1
- package/dist/test/properties/enumProperty.spec.js +26 -26
- package/dist/test/properties/enumProperty.spec.js.map +1 -1
- package/dist/test/properties/float32.spec.js.map +1 -1
- package/dist/test/properties/int64ArrayProperty.spec.js +22 -22
- package/dist/test/properties/int64ArrayProperty.spec.js.map +1 -1
- package/dist/test/properties/int64MapProperty.spec.js +28 -28
- package/dist/test/properties/int64MapProperty.spec.js.map +1 -1
- package/dist/test/properties/int64Property.spec.js +11 -11
- package/dist/test/properties/int64Property.spec.js.map +1 -1
- package/dist/test/properties/isLeafNode.spec.js +25 -25
- package/dist/test/properties/isLeafNode.spec.js.map +1 -1
- package/dist/test/properties/mapProperty.spec.js +110 -110
- package/dist/test/properties/mapProperty.spec.js.map +1 -1
- package/dist/test/properties/namedNodeProperty.spec.js +5 -5
- package/dist/test/properties/namedNodeProperty.spec.js.map +1 -1
- package/dist/test/properties/nodeProperty.spec.js +160 -160
- package/dist/test/properties/nodeProperty.spec.js.map +1 -1
- package/dist/test/properties/referenceProperty.spec.js +21 -21
- package/dist/test/properties/referenceProperty.spec.js.map +1 -1
- package/dist/test/properties/relationshipProperty.spec.js +4 -4
- package/dist/test/properties/relationshipProperty.spec.js.map +1 -1
- package/dist/test/properties/setProperty.spec.js +32 -32
- package/dist/test/properties/setProperty.spec.js.map +1 -1
- package/dist/test/properties/stringProperty.spec.js +38 -38
- package/dist/test/properties/stringProperty.spec.js.map +1 -1
- package/dist/test/properties/uint64Property.spec.js +3 -3
- package/dist/test/properties/uint64Property.spec.js.map +1 -1
- package/dist/test/properties/valueMapProperty.spec.js +28 -28
- package/dist/test/properties/valueMapProperty.spec.js.map +1 -1
- package/dist/test/properties/valueProperty.spec.js +7 -7
- package/dist/test/properties/valueProperty.spec.js.map +1 -1
- package/dist/test/propertyFactory.spec.js +559 -560
- package/dist/test/propertyFactory.spec.js.map +1 -1
- package/dist/test/propertyTemplateWrapper.spec.js +38 -38
- package/dist/test/propertyTemplateWrapper.spec.js.map +1 -1
- package/dist/test/propertyUtils.spec.js +5 -5
- package/dist/test/propertyUtils.spec.js.map +1 -1
- package/dist/test/reversibleChangeset.spec.js +266 -266
- package/dist/test/reversibleChangeset.spec.js.map +1 -1
- package/dist/test/setup.js.map +1 -1
- package/dist/test/tsconfig.tsbuildinfo +145 -145
- package/dist/test/utils.spec.js +508 -517
- package/dist/test/utils.spec.js.map +1 -1
- package/dist/test/validation/badMissingSemverInTypeid.js +9 -9
- package/dist/test/validation/badMissingSemverInTypeid.js.map +1 -1
- package/dist/test/validation/badPrimitiveTypeid.js +5 -5
- package/dist/test/validation/badPrimitiveTypeid.js.map +1 -1
- package/dist/test/validation/goodColorId.js +42 -42
- package/dist/test/validation/goodColorId.js.map +1 -1
- package/dist/test/validation/goodColorPalette.js +2 -2
- package/dist/test/validation/goodColorPalette.js.map +1 -1
- package/dist/test/validation/goodPointId.js +9 -9
- package/dist/test/validation/goodPointId.js.map +1 -1
- package/dist/test/validation/reversibleChangeSetTestData.js +1 -1
- package/dist/test/validation/reversibleChangeSetTestData.js.map +1 -1
- package/lib/containerSerializer.js +4 -10
- package/lib/containerSerializer.js.map +1 -1
- package/lib/enableValidations.js +1 -1
- package/lib/enableValidations.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/properties/abstractStaticCollectionProperty.js +1 -28
- package/lib/properties/abstractStaticCollectionProperty.js.map +1 -1
- package/lib/properties/arrayProperty.js +26 -85
- package/lib/properties/arrayProperty.js.map +1 -1
- package/lib/properties/baseProperty.js +7 -69
- package/lib/properties/baseProperty.js.map +1 -1
- package/lib/properties/boolProperty.js +0 -1
- package/lib/properties/boolProperty.js.map +1 -1
- package/lib/properties/containerProperty.js +4 -22
- package/lib/properties/containerProperty.js.map +1 -1
- package/lib/properties/enumArrayProperty.js +2 -14
- package/lib/properties/enumArrayProperty.js.map +1 -1
- package/lib/properties/enumProperty.js +3 -10
- package/lib/properties/enumProperty.js.map +1 -1
- package/lib/properties/floatProperties.js +0 -2
- package/lib/properties/floatProperties.js.map +1 -1
- package/lib/properties/index.js +7 -38
- package/lib/properties/index.js.map +1 -1
- package/lib/properties/indexedCollectionBaseProperty.js +6 -18
- package/lib/properties/indexedCollectionBaseProperty.js.map +1 -1
- package/lib/properties/intProperties.js +3 -20
- package/lib/properties/intProperties.js.map +1 -1
- package/lib/properties/lazyLoadedProperties.js.map +1 -1
- package/lib/properties/mapProperty.js +4 -23
- package/lib/properties/mapProperty.js.map +1 -1
- package/lib/properties/namedNodeProperty.js.map +1 -1
- package/lib/properties/namedProperty.js +0 -3
- package/lib/properties/namedProperty.js.map +1 -1
- package/lib/properties/nodeProperty.js +0 -3
- package/lib/properties/nodeProperty.js.map +1 -1
- package/lib/properties/primitiveTypeCasts.js +2 -2
- package/lib/properties/primitiveTypeCasts.js.map +1 -1
- package/lib/properties/referenceArrayProperty.js +3 -16
- package/lib/properties/referenceArrayProperty.js.map +1 -1
- package/lib/properties/referenceMapProperty.js +3 -13
- package/lib/properties/referenceMapProperty.js.map +1 -1
- package/lib/properties/referenceProperty.js +4 -12
- package/lib/properties/referenceProperty.js.map +1 -1
- package/lib/properties/setProperty.js +3 -22
- package/lib/properties/setProperty.js.map +1 -1
- package/lib/properties/stringProperty.js +12 -48
- package/lib/properties/stringProperty.js.map +1 -1
- package/lib/properties/uintProperties.js +0 -3
- package/lib/properties/uintProperties.js.map +1 -1
- package/lib/properties/valueArrayProperty.js +3 -45
- package/lib/properties/valueArrayProperty.js.map +1 -1
- package/lib/properties/valueMapProperty.js +4 -29
- package/lib/properties/valueMapProperty.js.map +1 -1
- package/lib/properties/valueProperty.js +2 -14
- package/lib/properties/valueProperty.js.map +1 -1
- package/lib/propertyFactory.js +35 -72
- package/lib/propertyFactory.js.map +1 -1
- package/lib/propertyTemplate.js +0 -14
- package/lib/propertyTemplate.js.map +1 -1
- package/lib/propertyTemplateWrapper.js +4 -12
- package/lib/propertyTemplateWrapper.js.map +1 -1
- package/lib/propertyUtils.js.map +1 -1
- package/package.json +13 -6
|
@@ -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/* eslint-disable no-unused-expressions*/\n/**\n * @fileoverview In this file, we will test the set property\n * object described in /src/properties/setProperty.js\n */\nconst _ = require('lodash');\nconst { PropertyFactory } = require('../..');\nconst { BaseProperty } = require('../..');\nconst { ChangeSet } = require('@fluid-experimental/property-changeset')\nconst { generateGUID } = require('@fluid-experimental/property-common').GuidUtils;\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\n describe('Testing creation, assignment and serialization', function () {\n\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\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\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\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/* eslint-disable no-unused-expressions */\n/**\n * @fileoverview In this file, we will test the set property\n * 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"]}
|