@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":"nodeProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/nodeProperty.spec.js"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n/* globals assert, sinon */\n/* eslint-disable no-unused-expressions*/\n/**\n * @fileoverview In this file, we will test the NodeProperty\n * object described in properties/nodeProperty.js\n */\nconst { PropertyFactory } = require('../..');\nconst { BaseProperty } = require('../..');\nconst { NodeProperty } = require('../../properties/nodeProperty');\nconst { MapProperty } = require('../../properties/mapProperty');\nconst { ChangeSet } = require('@fluid-experimental/property-changeset');\nconst _ = require('lodash');\nconst { generateGUID } = require('@fluid-experimental/property-common').GuidUtils;\nconst { MSG } = require('@fluid-experimental/property-common').constants;\n\ndescribe('NodeProperty', function () {\n var changeSetWithTwoMapEntries, changeSetWithTwoMapEntries_full, removalChangeSet;\n var myNode, mapNode1, mapNode2;\n\n before(function () {\n // Register a template with a set property for the tests\n var MixedNodePropertyTemplate = {\n typeid: 'autodesk.tests:MixedNodeTestProperty-1.0.0',\n inherits: ['NodeProperty'],\n properties: [\n { id: 'stringProperty', typeid: 'String' },\n { id: 'stringProperty2', typeid: 'String' }\n ]\n };\n var AnonymousTestPropertyTemplate = {\n typeid: 'autodesk.tests:AnonymousProperty-1.0.0',\n properties: [\n { id: 'stringProperty', typeid: 'String' }\n ]\n };\n var MixedNamedNodePropertyTemplate = {\n typeid: 'autodesk.tests:MixedNamedNodeProperty-1.0.0',\n inherits: ['NodeProperty', 'NamedProperty'],\n properties: [\n { id: 'stringProperty', typeid: 'String' }\n ]\n };\n var TestEnumTemplate = {\n typeid: 'autodesk.core:UnitsEnum-1.0.0',\n inherits: 'Enum',\n annotation: { description: 'The metric units' },\n properties: [\n { id: 'm', value: 1, annotation: { description: 'meter' } },\n { id: 'cm', value: 2, annotation: { description: 'centimeter' } },\n { id: 'mm', value: 3, annotation: { description: 'millimeter' } }\n ]\n };\n PropertyFactory._reregister(TestEnumTemplate);\n\n PropertyFactory._reregister(MixedNodePropertyTemplate);\n PropertyFactory._reregister(MixedNamedNodePropertyTemplate);\n PropertyFactory._reregister(AnonymousTestPropertyTemplate);\n\n myNode = PropertyFactory.create('NodeProperty');\n mapNode1 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n mapNode2 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n // Register the templates from the discussion document\n var Vec3Template = {\n typeid: 'autodesk.test:vector3-1.0.0',\n properties: [\n { id: 'x', typeid: 'Float32' },\n { id: 'y', typeid: 'Float32' },\n { id: 'z', typeid: 'Float32' }\n ]\n };\n\n var Point2DTemplate = {\n typeid: 'autodesk.test:point2d-1.0.0',\n properties: [\n {\n id: 'position', properties: [\n { id: 'x', typeid: 'Float32' },\n { id: 'y', typeid: 'Float32' }\n ]\n },\n { id: 'normal', typeid: 'autodesk.test:vector3-1.0.0' },\n { id: 'neighbours', typeid: 'autodesk.test:vector3-1.0.0', context: 'map' },\n { id: 'temperature', typeid: 'Float32' }\n ]\n };\n\n var SceneObjectTemplate = {\n inherits: 'NodeProperty',\n typeid: 'autodesk.test:SceneObject-1.0.0',\n properties: [\n { id: 'name', typeid: 'String' },\n { id: 'revitId', typeid: 'String' }\n ]\n };\n\n var nestedNodeProperty = {\n typeid: 'autodesk.tests:nested.node.property-1.0.0',\n properties: [\n {\n id: 'nested', properties: [\n { id: 'property', typeid: 'NodeProperty' }\n ]\n }\n ]\n };\n\n var testArrayProperty = {\n typeid: 'autodesk.tests:test.array.property-1.0.0',\n properties: [\n { id: 'array', typeid: 'Float32', context: 'array' }\n ]\n };\n\n PropertyFactory._reregister(Vec3Template);\n PropertyFactory._reregister(Point2DTemplate);\n PropertyFactory._reregister(SceneObjectTemplate);\n PropertyFactory._reregister(nestedNodeProperty);\n PropertyFactory._reregister(testArrayProperty);\n });\n\n // Helper functions for the test cases\n var keyCounter = 0;\n var resetKeyCounter = function () {\n keyCounter = 0;\n };\n\n // Inserts a node with the given guid (a new one is generated when undefined)\n var insertNodeInRootWithKeyAndGuid = function (key, guid, root) {\n var node = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n if (key === undefined) {\n key = 'node' + keyCounter++;\n }\n\n root.insert(key, node);\n };\n\n // Inserts a new node in the root\n var insertNodeInRoot = function (root) {\n insertNodeInRootWithKeyAndGuid(undefined, undefined, root);\n };\n\n // Returns a functor that will insert a node with a constant GUID\n var insertUniqueNodeInRoot = function () {\n var key = 'node' + keyCounter++;\n return insertNodeInRootWithKeyAndGuid.bind(undefined, key, generateGUID());\n };\n\n // Inserts a new node as leaf\n var insertNodeAsLeaf = function (root) {\n var leaf = root;\n while (leaf.getDynamicIds().length > 0) {\n leaf = _.values(leaf._getDynamicChildrenReadOnly())[0];\n }\n var node = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var key = 'node' + keyCounter++;\n leaf.insert(key, node);\n };\n\n // Removes the first node from the root\n var removeFirstNodeInRoot = function (root) {\n var firstKey = root.getDynamicIds()[0];\n root.remove(firstKey);\n };\n\n // Modifies the leaf node\n var modifyLeaf = function (root) {\n var leaf = root;\n while (leaf.getDynamicIds().length > 0) {\n leaf = _.values(leaf._getDynamicChildrenReadOnly())[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(myNode.getIds()).to.be.empty;\n expect(myNode.serialize({ 'dirtyOnly': true })).to.be.empty;\n });\n\n it('should be possible to insert into the map', function () {\n // Test insertion of the first node\n myNode.insert('node1', mapNode1);\n expect(myNode.has('node1')).to.be.ok;\n expect(myNode.has('node2')).to.be.not.ok;\n expect(myNode.get('node2')).to.equal(undefined);\n expect(mapNode1.getParent()).to.equal(myNode);\n\n var CS = myNode.serialize({ 'dirtyOnly': true });\n expect(CS.insert &&\n CS.insert['autodesk.tests:MixedNodeTestProperty-1.0.0'] &&\n _.keys(CS.insert['autodesk.tests:MixedNodeTestProperty-1.0.0']).length === 1 &&\n _.keys(CS.insert['autodesk.tests:MixedNodeTestProperty-1.0.0'])[0] === 'node1').to.be.ok;\n\n // Test insertion of the second node\n myNode.insert('node2', mapNode2);\n expect(myNode.has('node2')).to.be.ok;\n expect(myNode.get('node2')).to.equal(mapNode2);\n changeSetWithTwoMapEntries = myNode.serialize({ 'dirtyOnly': true });\n expect(changeSetWithTwoMapEntries.insert &&\n changeSetWithTwoMapEntries.insert['autodesk.tests:MixedNodeTestProperty-1.0.0'] &&\n _.keys(changeSetWithTwoMapEntries.insert['autodesk.tests:MixedNodeTestProperty-1.0.0']).length === 2 &&\n _.includes(\n _.keys(changeSetWithTwoMapEntries.insert['autodesk.tests:MixedNodeTestProperty-1.0.0']), 'node1') &&\n _.includes(\n _.keys(\n changeSetWithTwoMapEntries.insert['autodesk.tests:MixedNodeTestProperty-1.0.0']), 'node2')).to.be.ok;\n\n changeSetWithTwoMapEntries_full = myNode.serialize({ 'dirtyOnly': false });\n expect(changeSetWithTwoMapEntries).to.deep.equal(changeSetWithTwoMapEntries_full);\n });\n\n it('should fail when trying to insert with empty id', function () {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var mapNode3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n expect(() => myNode1.insert('', mapNode3)).to.throw(MSG.ID_SHOULD_NOT_BE_EMPTY_STRING);\n });\n\n it('should fail when trying to insert in itself', function () {\n var myNode1 = PropertyFactory.create('NodeProperty');\n expect(() => myNode1.insert('a', myNode1)).to.throw(MSG.INSERTED_IN_OWN_CHILDREN);\n });\n\n it('should fail when trying to insert in child', function () {\n var myNodeParent = PropertyFactory.create('NodeProperty');\n var myNodeChild = PropertyFactory.create('NodeProperty');\n myNodeParent.insert('a', myNodeChild);\n expect(() => myNodeChild.insert('a', myNodeParent)).to.throw(MSG.INSERTED_IN_OWN_CHILDREN);\n });\n\n it('should fail when trying to insert in grand-child', function () {\n var myNodeParent = PropertyFactory.create('NodeProperty');\n var myNodeChild = PropertyFactory.create('NodeProperty');\n var myNodeGrandChild = PropertyFactory.create('NodeProperty');\n myNodeParent.insert('a', myNodeChild);\n myNodeChild.insert('a', myNodeGrandChild);\n expect(() => myNodeGrandChild.insert('a', myNodeParent)).to.throw(MSG.INSERTED_IN_OWN_CHILDREN);\n });\n\n it('.remove should return the property removed', function () {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var mapNode3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var mapNode4 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n myNode1.insert('node1', mapNode3);\n myNode1.insert('node2', mapNode4);\n expect(myNode1.remove('node1')).to.deep.equal(mapNode3);\n expect(myNode1.remove(mapNode4)).to.deep.equal(mapNode4);\n expect(myNode1.getIds()).to.be.empty;\n });\n\n it('.clear should remove all nodes', function () {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var mapNode3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var mapNode4 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n myNode1.insert('node1', mapNode3);\n myNode1.insert('node2', mapNode4);\n expect(myNode1.clear()).to.be.undefined;\n expect(myNode1.getIds()).to.be.empty;\n });\n\n it('.getValues should work', function () {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var mapNode3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var mapNode4 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n myNode1.insert('node1', mapNode3);\n myNode1.insert('node2', mapNode4);\n expect(myNode1.getValues()).to.deep.equal({\n node1: { stringProperty: '', stringProperty2: '' },\n node2: { stringProperty: '', stringProperty2: '' }\n });\n });\n\n it('getValues should work with nested arrays', function () {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var myArray = PropertyFactory.create('autodesk.tests:test.array.property-1.0.0');\n myNode1.insert('array1', myArray);\n myNode1.get('array1').get('array').insertRange(0, [1, 2, 3]);\n expect(myNode1.getIds()).to.deep.equal(['array1']);\n expect(myNode1.getValues()).to.deep.equal({\n array1: { array: [1, 2, 3] }\n });\n });\n\n it.skip('@bugfix getValues should work with circular references', function () {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var myRef1 = PropertyFactory.create('Reference', 'single', '/ref2');\n var myRef2 = PropertyFactory.create('Reference', 'single', '/ref1');\n myNode1.insert('ref1', myRef1);\n myNode1.insert('ref2', myRef2);\n myNode1.getValues();\n expect(myNode1.getIds()).to.deep.equal(['ref1', 'ref2']);\n expect(myNode1.getValues()).to.deep.equal({\n 'ref1': '/ref2',\n 'ref2': '/ref1'\n });\n });\n\n it('getValues should work with bad references', function () {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var myRef = PropertyFactory.create('Reference', 'single');\n myNode1.insert('badref', myRef);\n myNode1.getValues();\n expect(myNode1.getIds()).to.deep.equal(['badref']);\n expect(myNode1.getValues()).to.deep.equal({\n 'badref': undefined\n });\n });\n\n it('Should track dirtiness', function () {\n myNode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n expect(myNode.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.DIRTY\n })).to.be.empty;\n expect(myNode.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE\n })).deep.equal(changeSetWithTwoMapEntries_full);\n expect(myNode.serialize({ 'dirtyOnly': false })).deep.equal(changeSetWithTwoMapEntries_full);\n });\n\n\n it('Should handle removals correctly', function () {\n myNode.remove('node1');\n expect(mapNode1.getParent()).to.be.undefined;\n myNode.remove('node2');\n expect(myNode.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE\n })).to.be.empty;\n expect(myNode.serialize({ 'dirtyOnly': false })).to.be.empty;\n removalChangeSet = myNode.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.DIRTY\n });\n expect(removalChangeSet).to.have.all.keys(['remove']);\n expect(removalChangeSet.remove).to.have.length(2);\n expect(removalChangeSet.remove).to.contain('node1');\n expect(removalChangeSet.remove).to.contain('node2');\n });\n\n it('Should support deserialization', function () {\n var deserializedNode = PropertyFactory.create('NodeProperty');\n var deserializedChanges1 = deserializedNode.deserialize(changeSetWithTwoMapEntries);\n var CS4 = deserializedNode.serialize({ 'dirtyOnly': false });\n expect(CS4).to.deep.equal(changeSetWithTwoMapEntries);\n expect(deserializedChanges1).to.deep.equal(changeSetWithTwoMapEntries);\n\n var deserializedChanges2 = deserializedNode.deserialize(changeSetWithTwoMapEntries);\n expect(deserializedChanges2).to.be.empty;\n\n var deserializedChanges3 = deserializedNode.deserialize({});\n expect(deserializedChanges3).to.deep.equal(removalChangeSet);\n });\n\n it('should support deserialization for nested properties', function () {\n var P1 = PropertyFactory.create('autodesk.tests:nested.node.property-1.0.0');\n var P2 = PropertyFactory.create('autodesk.tests:nested.node.property-1.0.0');\n\n P1._properties.nested.property.propertyNode.insert('testProperty', PropertyFactory.create('String'));\n P1._properties.nested.property.testProperty.value = 'testString';\n\n P2.deserialize(P1.serialize({ 'dirtyOnly': false }));\n expect(P1.serialize({ 'dirtyOnly': false })).to.deep.equal(P2.serialize({ 'dirtyOnly': false }));\n expect(P2._properties.nested.property.testProperty.value).to.equal('testString');\n });\n\n\n it('Should track modifies', function () {\n var modifyNode1 = PropertyFactory.create('NodeProperty');\n var modifyNode2 = PropertyFactory.create('NodeProperty');\n\n modifyNode1.deserialize(changeSetWithTwoMapEntries);\n modifyNode2.deserialize(changeSetWithTwoMapEntries);\n\n modifyNode1.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n var child1 = modifyNode1.get('node1');\n child1._properties.stringProperty.value = 'modify test';\n var modifyChangeSet = modifyNode1.serialize({ 'dirtyOnly': true });\n modifyNode2.applyChangeSet(modifyChangeSet);\n expect(modifyNode2.serialize({ 'dirtyOnly': false }))\n .to.deep.equal(modifyNode1.serialize({ 'dirtyOnly': false }));\n });\n\n it('Should support hierarchical properties', function () {\n var node1 = PropertyFactory.create('NodeProperty');\n var node2 = PropertyFactory.create('NodeProperty');\n var node3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n // Createa a hierarchy of three nodes\n node1.insert('node', node2);\n node2.insert('node', node3);\n node3._properties.stringProperty.value = 'test';\n\n // Check that deserializing and serializing works with a hierarchy\n var hierarchicalChangeSet = node1.serialize({ 'dirtyOnly': true });\n var deserializedNode = PropertyFactory.create('NodeProperty');\n deserializedNode.deserialize(hierarchicalChangeSet);\n var child1 = deserializedNode.get(deserializedNode.getIds()[0]);\n expect(child1).to.not.equal(undefined);\n var child2 = child1.get(child1.getIds()[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.get(deserializedNode.getIds()[0]);\n expect(child1).to.not.equal(undefined);\n child2 = child1.get(child1.getIds()[0]);\n expect(child2).to.not.equal(undefined);\n expect(child2._properties.stringProperty.value).to.equal('test2');\n });\n\n it('should be possible to use anonymous properties', function () {\n var rootNode = PropertyFactory.create('NodeProperty');\n var rootNode2 = PropertyFactory.create('NodeProperty');\n var node1 = PropertyFactory.create('autodesk.tests:AnonymousProperty-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:AnonymousProperty-1.0.0');\n\n rootNode.insert('node1', node1);\n rootNode.insert('node2', node2);\n var testChangeSet = rootNode.serialize({ 'dirtyOnly': false });\n\n expect(rootNode.get('node1')).to.be.equal(node1);\n expect(rootNode.get('node2')).to.be.equal(node2);\n rootNode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n node1._properties.stringProperty.value = '1';\n node2._properties.stringProperty.value = '2';\n\n rootNode2.deserialize(testChangeSet);\n rootNode2.applyChangeSet(rootNode.serialize({ 'dirtyOnly': true }));\n expect(rootNode2.serialize({ 'dirtyOnly': false })).to.be.deep.equal(rootNode.serialize({ 'dirtyOnly': false }));\n });\n\n it('inserting the same key twice should throw an exception', function () {\n var rootNode = PropertyFactory.create('NodeProperty');\n var node1 = PropertyFactory.create('NodeProperty');\n var node2 = PropertyFactory.create('NodeProperty');\n rootNode.insert('node1', node1);\n expect(function () {\n rootNode.insert('node1', node2);\n }).to.throw();\n });\n\n it('Should work to create a MixedNodeTemplate', function () {\n var mixedNode = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n mixedNode.insert('dynamicFloat', PropertyFactory.create('Float32'));\n mixedNode.insert('dynamicString', PropertyFactory.create('String'));\n\n mixedNode._properties.stringProperty.value = 'string1';\n mixedNode._properties.stringProperty2.value = 'string2';\n mixedNode._properties.dynamicString.value = 'dynamic2';\n mixedNode._properties.dynamicFloat.value = 11;\n\n expect(mixedNode.serialize({ 'dirtyOnly': false })).to.deep.equal({\n String: {\n stringProperty: 'string1',\n stringProperty2: 'string2'\n },\n insert: {\n String: {\n dynamicString: 'dynamic2'\n },\n Float32: {\n dynamicFloat: 11\n }\n }\n });\n\n mixedNode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n mixedNode._properties.stringProperty.value = 'modified1';\n mixedNode._properties.dynamicString.value = 'modified2';\n mixedNode.insert('dynamicString2', PropertyFactory.create('String'));\n mixedNode._properties.dynamicString2.value = 'dynamic3';\n\n expect(mixedNode.serialize({ 'dirtyOnly': true })).to.deep.equal({\n String: {\n stringProperty: 'modified1'\n },\n modify: {\n String: {\n dynamicString: 'modified2'\n }\n },\n insert: {\n String: {\n dynamicString2: 'dynamic3'\n }\n }\n });\n\n // Pretty printing\n var expectedPrettyStr =\n 'undefined (autodesk.tests:MixedNodeTestProperty-1.0.0):\\n' +\n ' stringProperty (String): \"modified1\"\\n' +\n ' stringProperty2 (String): \"string2\"\\n' +\n ' dynamicFloat (Float32): 11\\n' +\n ' dynamicString (String): \"modified2\"\\n' +\n ' dynamicString2 (String): \"dynamic3\"\\n';\n var prettyStr = '';\n mixedNode.prettyPrint(function (str) {\n prettyStr += str + '\\n';\n });\n expect(prettyStr).to.equal(expectedPrettyStr);\n });\n\n it('inserting the same node twice should be a bug', function () {\n var rootNode = PropertyFactory.create('NodeProperty');\n var node = PropertyFactory.create('NodeProperty');\n\n // Try to insert the same node object under two keys\n rootNode.insert('node', node);\n expect(function () {\n rootNode.insert('node2', node);\n }).to.throw();\n\n // After removing it, adding it under a new key should be possible\n rootNode.remove('node');\n rootNode.insert('node2', node);\n });\n\n it('should not allow adding two nodes with same id', function () {\n var NodeTemplate = {\n typeid: 'autodesk.tests:NodeTemplate-1.0.0',\n inherits: 'NodeProperty',\n properties: [{ id: 'a', typeid: 'Float32' }]\n };\n\n PropertyFactory._reregister(NodeTemplate);\n\n var node = PropertyFactory.create('autodesk.tests:NodeTemplate-1.0.0');\n var child = PropertyFactory.create('String');\n\n expect(function () {\n node.insert('a', child);\n }).to.throw(MSG.PROPERTY_ALREADY_EXISTS + 'a');\n });\n\n it('Should correctly report whether it is a root', function () {\n var root = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var child = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var stringProperty = child.resolvePath('stringProperty');\n\n root.insert('childKey', child);\n assert(root.isRoot());\n assert(!child.isRoot());\n\n expect(stringProperty.getAbsolutePath()).to.equal('/childKey.stringProperty');\n expect(stringProperty.getRelativePath(child)).to.equal('stringProperty');\n expect(root.resolvePath(stringProperty.getAbsolutePath())).to.equal(stringProperty);\n expect(child.resolvePath(stringProperty.getRelativePath(child))).to.equal(stringProperty);\n });\n\n it('should correctly report changes when deserializing keys which contain 0', function () {\n var property = PropertyFactory.create('NodeProperty');\n property.insert('test', PropertyFactory.create('Int32'));\n property._properties.test.value = 5; // Make sure, it is marked as modified\n property._properties.test.value = 0;\n\n var property2 = PropertyFactory.create('NodeProperty');\n property2.insert('test', PropertyFactory.create('Int32'));\n property2._properties.test.value = 5;\n\n var actualChanges = property2.deserialize(property.serialize({ 'dirtyOnly': false }));\n expect(actualChanges).to.deep.equal({ modify: { 'Int32': { 'test': 0 } } });\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 resetKeyCounter();\n var testProperty = PropertyFactory.create('NodeProperty');\n\n var callbacks = in_options.callbacks;\n if (in_options.pre) {\n in_options.pre(testProperty);\n }\n\n var initialChangeset = new ChangeSet(testProperty.serialize({ 'dirtyOnly': false }));\n initialChangeset.setIsNormalized(true);\n\n var squashedChangeset = new ChangeSet();\n testProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](testProperty);\n var changes = testProperty.serialize({ 'dirtyOnly': true });\n testProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n squashedChangeset.applyChangeSet(changes);\n }\n\n if (in_options.post) {\n in_options.post(squashedChangeset.getSerializedChangeSet());\n }\n\n initialChangeset.applyChangeSet(squashedChangeset.getSerializedChangeSet());\n expect(initialChangeset.getSerializedChangeSet()).to.deep.equal(testProperty.serialize({ 'dirtyOnly': false }));\n };\n\n it('should work for multiple independent inserts', function () {\n testChangeSetSquashing({ callbacks: [insertNodeInRoot, insertNodeInRoot, insertNodeInRoot] });\n });\n it('should work for multiple hierarchical inserts', function () {\n testChangeSetSquashing({ callbacks: [insertNodeAsLeaf, insertNodeAsLeaf, insertNodeAsLeaf] });\n });\n it('should work for inserts followed by removes', function () {\n testChangeSetSquashing({\n callbacks: [insertNodeInRoot, insertNodeInRoot, removeFirstNodeInRoot, removeFirstNodeInRoot],\n post: function (changeset) {\n expect(changeset).to.be.empty;\n }\n });\n });\n it('should work for a tree removal', function () {\n testChangeSetSquashing({\n callbacks: [insertNodeAsLeaf, insertNodeAsLeaf, insertNodeAsLeaf, removeFirstNodeInRoot],\n post: function (changeset) {\n expect(changeset).to.be.empty;\n }\n });\n });\n\n it('should work for modifies in a tree', function () {\n testChangeSetSquashing({\n callbacks: [insertNodeAsLeaf, insertNodeAsLeaf, insertNodeAsLeaf, modifyLeaf, modifyLeaf]\n });\n });\n it('should work for modifies of a primitive type', function () {\n testChangeSetSquashing({\n callbacks: [\n function (root) {\n var newStringNode = PropertyFactory.create('String');\n newStringNode.value = 'initial value';\n root.insert('stringProp', newStringNode);\n },\n function (root) {\n root.get('stringProp').value = 'new value';\n }\n ]\n });\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).to.have.all.keys('remove');\n }\n });\n });\n it('of a replace operation should be possible', function () {\n // Create two nodes\n var node1 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n node2._properties.stringProperty.value = 'testString2';\n\n testChangeSetSquashing({\n pre: function (root) {\n root.insert('node1', node1);\n },\n callbacks: [\n removeFirstNodeInRoot,\n function (root) {\n root.insert('node1', node2);\n }\n ],\n post: function (changeset) {\n expect(changeset).to.have.all.keys('remove', 'insert');\n }\n });\n });\n });\n describe('Rebasing', function () {\n var testRebasing = function (in_options) {\n // Prepare the initial state\n var baseProperty1 = PropertyFactory.create('NodeProperty');\n if (in_options.prepare) {\n in_options.prepare(baseProperty1);\n }\n // Create two copies of this state\n var baseProperty2 = PropertyFactory.create('NodeProperty');\n baseProperty2.deserialize(baseProperty1.serialize({ 'dirtyOnly': false }));\n var baseProperty3 = PropertyFactory.create('NodeProperty');\n baseProperty3.deserialize(baseProperty1.serialize({ 'dirtyOnly': false }));\n\n // Make sure the states are clear\n baseProperty1.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n baseProperty2.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n baseProperty3.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n var initialChangeSet = baseProperty1.serialize({ 'dirtyOnly': false });\n\n // Apply the operations to the two properties in parallel\n if (in_options.op1) {\n in_options.op1(baseProperty1);\n }\n if (in_options.op2) {\n in_options.op2(baseProperty2);\n }\n\n // Get the ChangeSets\n var changeSet1 = new ChangeSet(baseProperty1.serialize({ 'dirtyOnly': true }));\n var changeSet2 = baseProperty2.serialize({ 'dirtyOnly': true });\n\n // Perform the actual rebase\n var conflicts = [];\n changeSet1._rebaseChangeSet(changeSet2, conflicts);\n\n var combinedChangeSet = new ChangeSet(initialChangeSet).clone();\n combinedChangeSet.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('NodeProperty');\n var node2 = PropertyFactory.create('NodeProperty');\n\n testRebasing({\n prepare: function (root) {\n root.insert('node1', node1);\n root.insert('node2', node2);\n },\n op1: function (root) {\n root.remove('node1');\n },\n op2: function (root) {\n root.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:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function (root) {\n root.insert('node1', node1);\n },\n op1: modifyLeaf,\n op2: removeFirstNodeInRoot,\n compareToSequential: true\n });\n });\n\n it('with a remove and a modify should possible', function () {\n var node1 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function (root) {\n root.insert('node1', node1);\n },\n op1: removeFirstNodeInRoot,\n op2: modifyLeaf,\n compareToSequential: false,\n checkResult: function (conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE);\n expect(conflicts[0].path).to.be.equal('node1');\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:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function (root) {\n root.insert('node1', node1);\n },\n op1: function (root) {\n root.remove('node1');\n },\n op2: function (root) {\n root.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:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function (root) {\n root.insert('node1', node1);\n },\n op1: function (root) {\n _.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty.value = 'a';\n },\n op2: function (root) {\n _.values(root._getDynamicChildrenReadOnly())[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:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function (root) {\n root.insert('node1', node1);\n },\n op1: function (root) {\n _.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty.value = 'b';\n },\n op2: function (root) {\n _.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty.value = 'a';\n },\n compareToSequential: true,\n checkResult: function (conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(changeSet.modify['autodesk.tests:MixedNodeTestProperty-1.0.0']\n .node1.String.stringProperty).to.equal('a');\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('node1.stringProperty');\n }\n });\n });\n\n it('with modify followed by remove+insert should work', function () {\n var node1 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function (root) {\n root.insert('node1', node1);\n },\n op1: modifyLeaf,\n op2: function (root) {\n var node2 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n root.remove('node1');\n root.insert('node1', node2);\n },\n compareToSequential: true,\n checkResult: function (conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.REMOVE_AFTER_MODIFY);\n expect(conflicts[0].path).to.be.equal('node1');\n expect(changeSet).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:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function (root) {\n root.insert('node1', node1);\n },\n op1: function (root) {\n var node2 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n root.remove('node1');\n root.insert('node1', node2);\n },\n op2: modifyLeaf,\n compareToSequential: false,\n checkResult: function (conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.ENTRY_MODIFICATION_AFTER_REMOVE_INSERT);\n expect(conflicts[0].path).to.be.equal('node1');\n }\n });\n });\n\n it('with remove+insert followed by remove+insert should report conflict', function () {\n var node = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function (root) {\n root.insert('node', node);\n },\n op1: function (root) {\n root.remove('node');\n root.insert('node', PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0'));\n },\n op2: function (root) {\n root.remove('node');\n root.insert('node', PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0'));\n },\n compareToSequential: false,\n checkResult: function (conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('node');\n }\n });\n });\n\n it('with conflicting inserts should report conflict', function () {\n var node1 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function (root) {\n },\n op1: function (root) {\n root.insert('node1', node1);\n },\n op2: function (root) {\n root.insert('node1', 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('node1');\n }\n });\n });\n\n it('with conflicting inserts of primitive types', function () {\n testRebasing({\n prepare: function (root) {\n },\n op1: function (root) {\n var string1 = PropertyFactory.create('String');\n string1.value = 'test1';\n root.insert('entry', string1);\n },\n op2: function (root) {\n var string2 = PropertyFactory.create('String');\n string2.value = 'test2';\n root.insert('entry', string2);\n },\n compareToSequential: false,\n checkResult: function (conflicts, changeSet) {\n expect(changeSet).to.deep.equal({\n modify: {\n String: {\n entry: {\n oldValue: 'test1',\n value: 'test2'\n }\n }\n }\n });\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('entry');\n expect(conflicts[0].conflictingChange).to.be.equal('test2');\n }\n });\n });\n\n // TODO: 'with conflicting inserts of primitive types' is identical to the below test. Why?\n it('with conflicting recursive modifies of primitive types should be possible and report a conflict', function () {\n testRebasing({\n prepare: function (root) {\n },\n op1: function (root) {\n var string1 = PropertyFactory.create('String');\n string1.value = 'test1';\n root.insert('entry', string1);\n },\n op2: function (root) {\n var string2 = PropertyFactory.create('String');\n string2.value = 'test2';\n root.insert('entry', string2);\n },\n compareToSequential: false,\n checkResult: function (conflicts, changeSet) {\n expect(changeSet).to.deep.equal({\n modify: {\n String: {\n entry: {\n oldValue: 'test1',\n value: 'test2'\n }\n }\n }\n });\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('entry');\n expect(conflicts[0].conflictingChange).to.be.equal('test2');\n }\n });\n });\n\n it('with conflicting recursive modifies of enums should be possible and report a conflict', function () {\n testRebasing({\n prepare: function (root) {\n },\n op1: function (root) {\n var enum1 = PropertyFactory.create('autodesk.core:UnitsEnum-1.0.0');\n enum1.value = 1;\n root.insert('entry', enum1);\n },\n op2: function (root) {\n var enum2 = PropertyFactory.create('autodesk.core:UnitsEnum-1.0.0');\n enum2.value = 2;\n root.insert('entry', enum2);\n },\n compareToSequential: false,\n checkResult: function (conflicts, changeSet) {\n expect(changeSet).to.deep.equal({\n modify: {\n 'enum<autodesk.core:UnitsEnum-1.0.0>': {\n entry: {\n oldValue: 1,\n value: 2\n }\n }\n }\n });\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('entry');\n expect(conflicts[0].conflictingChange).to.be.equal(2);\n }\n });\n });\n\n\n it('with conflicting inserts in a deep leaf should report a correct conflict', function () {\n testRebasing({\n prepare: function (root) {\n var node = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n root.insert('node', node);\n },\n op1: function (root) {\n var node1 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n root.resolvePath('node').insert('node2', node1);\n },\n op2: function (root) {\n var node2 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n root.resolvePath('node').insert('node2', 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('node.node2');\n }\n });\n });\n });\n\n describe('Compatibility with ChangeSets from spec', function () {\n // These are the ChangeSets from the discussion minutes document\n // after some cleanup, mainly missing parameters were added in inserts and\n // syntax corrections. Additionally, the Vector3 was renamed to autodesk.test:vector3-1.0.0 to avoid\n // conflicts with the inbuilt type\n\n var insertChangeSet1 = {\n insert: {\n 'autodesk.test:point2d-1.0.0': {\n 'myPoint': {\n 'Float32': {\n 'position.x': 122,\n 'position.y': 122,\n 'temperature': 10\n },\n 'autodesk.test:vector3-1.0.0': {\n 'normal': {\n Float32: {\n 'x': 1,\n 'y': 1,\n 'z': 1\n }\n }\n },\n 'map<autodesk.test:vector3-1.0.0>': {\n 'neighbours': {\n insert: {\n 'autodesk.test:vector3-1.0.0': {\n 'Point1': {\n Float32: {\n 'x': 1,\n 'y': 1,\n 'z': 1\n }\n }\n }\n }\n }\n }\n },\n 'd23kjda': {\n Float32: {\n 'position.x': 122,\n 'position.y': 122,\n 'temperature': 11\n },\n 'autodesk.test:vector3-1.0.0': {\n 'normal': {\n Float32: {\n 'x': 1,\n 'y': 1,\n 'z': 1\n }\n }\n },\n 'map<autodesk.test:vector3-1.0.0>': {\n 'neighbours': {}\n }\n }\n },\n Float32: {\n 'compression': 0\n },\n 'map<>': {\n birds: {\n insert: {\n 'autodesk.test:vector3-1.0.0': {\n 'Point1': {\n Float32: {\n 'x': 1,\n 'y': 1,\n 'z': 1\n }\n }\n }\n }\n },\n horses: {},\n forest: {}\n }\n }\n };\n\n var modifyChangeSet1 = {\n modify: {\n 'autodesk.test:point2d-1.0.0': {\n 'myPoint': {\n 'Float32': {\n 'position.x': 11,\n 'temperature': 31\n },\n 'autodesk.test:vector3-1.0.0': {\n 'normal': {\n 'Float32': {\n 'x': 0.5\n }\n }\n }\n }\n }\n }\n };\n\n var modifyChangeSet2 = {\n modify: {\n 'autodesk.test:point2d-1.0.0': {\n 'myPoint': {\n 'map<autodesk.test:vector3-1.0.0>': {\n 'neighbours': {\n insert: {\n 'autodesk.test:vector3-1.0.0': {\n 'Point2': {\n Float32: {\n 'x': 1,\n 'y': 1,\n 'z': 1\n }\n }\n }\n }\n }\n }\n }\n }\n }\n };\n\n var modifyChangeSet3 = {\n modify: {\n 'autodesk.test:point2d-1.0.0': {\n 'myPoint': {\n 'map<autodesk.test:vector3-1.0.0>': {\n 'neighbours': {\n modify: {\n 'autodesk.test:vector3-1.0.0': {\n 'Point2': {\n Float32: {\n 'x': 2\n }\n }\n }\n }\n }\n }\n }\n }\n }\n };\n\n var removePreparationChangeSet1 = {\n insert: {\n 'autodesk.test:SceneObject-1.0.0': {\n 'dasdm23': {\n 'String': {\n 'revitId': '#23213',\n 'name': 'Door'\n }\n }\n }\n }\n };\n\n var removePreparationChangeSet2 = {\n modify: {\n 'autodesk.test:SceneObject-1.0.0': {\n 'dasdm23': {\n insert: {\n 'autodesk.test:SceneObject-1.0.0': {\n 'as2398d': {\n 'String': {\n 'revitId': '#2231',\n 'name': 'Room'\n }\n }\n }\n }\n }\n }\n }\n };\n\n var removeChangeSet1 = {\n remove: [\n 'dasdm23'\n ]\n };\n\n var removeChangeSet2 = {\n modify: {\n 'autodesk.test:SceneObject-1.0.0': {\n 'dasdm23': {\n remove: [\n 'as2398d'\n ]\n }\n }\n }\n };\n\n it('should be possible to insert properties with the example from the spec', function () {\n var rootProperty = PropertyFactory.create('NodeProperty');\n rootProperty.applyChangeSet(insertChangeSet1);\n\n // Make sure all properties are as expected\n expect(rootProperty.getDynamicIds().length).to.equal(6);\n expect(rootProperty._getDynamicChildrenReadOnly()).to.have.all.keys('birds', 'horses', 'forest',\n 'compression', 'myPoint', 'd23kjda');\n expect(rootProperty._properties.compression.value).to.equal(0);\n assert(rootProperty._properties.birds instanceof MapProperty);\n assert(rootProperty._properties.forest instanceof MapProperty);\n assert(rootProperty._properties.horses instanceof MapProperty);\n\n expect(rootProperty.resolvePath('myPoint.position.x').value).to.equal(122);\n expect(rootProperty.resolvePath('myPoint.position.y').value).to.equal(122);\n expect(rootProperty.resolvePath('myPoint.temperature').value).to.equal(10);\n\n expect(rootProperty.resolvePath('myPoint.normal.x').value).to.equal(1);\n expect(rootProperty.resolvePath('myPoint.normal.y').value).to.equal(1);\n expect(rootProperty.resolvePath('myPoint.normal.z').value).to.equal(1);\n\n var neighbours = rootProperty.resolvePath('myPoint.neighbours');\n assert(neighbours.has('Point1'));\n expect(neighbours.get('Point1')._properties.x.value).to.equal(1);\n expect(neighbours.get('Point1')._properties.y.value).to.equal(1);\n expect(neighbours.get('Point1')._properties.z.value).to.equal(1);\n\n expect(rootProperty.resolvePath('d23kjda.position.x').value).to.equal(122);\n expect(rootProperty.resolvePath('d23kjda.position.y').value).to.equal(122);\n expect(rootProperty.resolvePath('d23kjda.temperature').value).to.equal(11);\n\n expect(rootProperty.resolvePath('d23kjda.normal.x').value).to.equal(1);\n expect(rootProperty.resolvePath('d23kjda.normal.y').value).to.equal(1);\n expect(rootProperty.resolvePath('d23kjda.normal.z').value).to.equal(1);\n\n // Make sure serialization gives the same result as the initial ChangeSet\n expect(rootProperty.serialize({ 'dirtyOnly': false })).to.deep.equal(insertChangeSet1);\n expect(rootProperty.serialize({ 'dirtyOnly': true })).to.deep.equal(insertChangeSet1);\n });\n\n it('should be possible to use the first modify ChangeSet from the spec', function () {\n // Prepare the initial state\n var rootProperty = PropertyFactory.create('NodeProperty');\n rootProperty.applyChangeSet(insertChangeSet1);\n\n // Clean dirtiness\n rootProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n // Apply the modify changeSet\n rootProperty.applyChangeSet(modifyChangeSet1);\n expect(rootProperty.resolvePath('myPoint.position.x').value).to.equal(11);\n expect(rootProperty.resolvePath('myPoint.normal.x').value).to.equal(0.5);\n expect(rootProperty.resolvePath('myPoint.temperature').value).to.equal(31);\n\n // Make sure the serialization gives the expected result\n expect(rootProperty.serialize({ 'dirtyOnly': true })).to.deep.equal(modifyChangeSet1);\n });\n\n it('should be possible to use the second modify ChangeSet from the spec', function () {\n // Prepare the initial state\n var rootProperty = PropertyFactory.create('NodeProperty');\n rootProperty.applyChangeSet(insertChangeSet1);\n\n // Clean dirtiness\n rootProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n // Apply the modify changeSet\n rootProperty.applyChangeSet(modifyChangeSet2);\n var point2 = rootProperty.resolvePath('myPoint.neighbours').get('Point2');\n expect(point2._properties.x.value).to.equal(1);\n expect(point2._properties.y.value).to.equal(1);\n expect(point2._properties.z.value).to.equal(1);\n\n // Make sure the serialization gives the expected result\n expect(rootProperty.serialize({ 'dirtyOnly': true })).to.deep.equal(modifyChangeSet2);\n });\n\n it('should be possible to use the third modify ChangeSet from the spec', function () {\n // Prepare the initial state\n var rootProperty = PropertyFactory.create('NodeProperty');\n rootProperty.applyChangeSet(insertChangeSet1);\n rootProperty.applyChangeSet(modifyChangeSet2);\n\n // Clean dirtiness\n rootProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n // Apply the modify changeSet\n rootProperty.applyChangeSet(modifyChangeSet3);\n var point2 = rootProperty.resolvePath('myPoint.neighbours').get('Point2');\n expect(point2._properties.x.value).to.equal(2);\n\n // Make sure the serialization gives the expected result\n expect(rootProperty.serialize({ 'dirtyOnly': true })).to.deep.equal(modifyChangeSet3);\n });\n\n it('should be possible to use the first remove ChangeSet from the spec', function () {\n // Prepare the initial state\n var rootProperty = PropertyFactory.create('NodeProperty');\n rootProperty.applyChangeSet(removePreparationChangeSet1);\n rootProperty.applyChangeSet(removePreparationChangeSet2);\n\n // Clean dirtiness\n rootProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n // Apply the modify changeSet\n expect(rootProperty.getDynamicIds().length).to.be.equal(1);\n rootProperty.applyChangeSet(removeChangeSet1);\n expect(rootProperty.getDynamicIds().length).to.be.equal(0);\n\n // Make sure the serialization gives the expected result\n expect(rootProperty.serialize({ 'dirtyOnly': true })).to.deep.equal(removeChangeSet1);\n });\n\n it('should be possible to use the first remove ChangeSet from the spec', function () {\n // Prepare the initial state\n var rootProperty = PropertyFactory.create('NodeProperty');\n rootProperty.applyChangeSet(removePreparationChangeSet1);\n rootProperty.applyChangeSet(removePreparationChangeSet2);\n\n // Clean dirtiness\n rootProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n // Apply the remove changeSet\n expect(rootProperty.resolvePath('dasdm23').getDynamicIds().length).to.be.equal(1);\n rootProperty.applyChangeSet(removeChangeSet2);\n expect(rootProperty.getDynamicIds().length).to.be.equal(1);\n expect(rootProperty.resolvePath('dasdm23').getDynamicIds().length).to.be.equal(0);\n\n // Make sure the serialization gives the expected result\n expect(rootProperty.serialize({ 'dirtyOnly': true })).to.deep.equal(removeChangeSet2);\n });\n });\n\n describe('Make sure struct changes and path updates are signaled correctly', function () {\n it('Should be possible to access dynamic nodes via propertis and paths', function () {\n var root = PropertyFactory.create('NodeProperty');\n var newRoot = PropertyFactory.create('NodeProperty');\n\n // Create a hierarchy of nodes\n root.insert('child1', PropertyFactory.create('NodeProperty'));\n root.insert('child2', PropertyFactory.create('NodeProperty'));\n\n expect(root._properties.child1.position).to.be.undefined;\n expect(root.resolvePath('child1.position')).to.be.undefined;\n\n // Crate a dynamic object via a NodeProperty\n var positionProperty = PropertyFactory.create('NodeProperty');\n root._properties.child1.propertyNode.insert('position', positionProperty);\n root._properties.child1.position.propertyNode.insert('x', PropertyFactory.create('Float32'));\n root._properties.child1.position.propertyNode.insert('y', PropertyFactory.create('Float32'));\n root._properties.child1.position.propertyNode.insert('z', PropertyFactory.create('Float32'));\n\n // Make sure paths resolve correctly\n expect(root._properties.child1.position).not.to.be.undefined;\n expect(root._properties.child1.position.propertyNode).to.be.an.instanceof(NodeProperty);\n expect(root.resolvePath('child1.position')).to.be.instanceof(NodeProperty);\n\n // assign values via the properties object (for NodeProperty)\n root._properties.child1.position.x.value = 1;\n root._properties.child1.position.y.value = 2;\n root._properties.child1.position.z.value = 3;\n\n // assign values via resolve path\n root.resolvePath('child1.position.x').value = 3;\n root.resolvePath('child1.position.y').value = 2;\n root.resolvePath('child1.position.z').value = 1;\n\n // Check values\n expect(root._properties.child1.position.x.value).to.equal(3);\n expect(root._properties.child1.position.y.value).to.equal(2);\n expect(root._properties.child1.position.z.value).to.equal(1);\n\n // Crate a dynamic object via a template\n var vec3Property = PropertyFactory.create('autodesk.test:vector3-1.0.0');\n root._properties.child1.propertyNode.insert('vector', vec3Property);\n\n // Make sure paths resolve correctly\n expect(root._properties.child1.vector).not.to.be.undefined;\n expect(root._properties.child1.vector.propertyNode).to.be.an.instanceof(BaseProperty);\n expect(root.resolvePath('child1.vector')).to.be.instanceof(BaseProperty);\n\n root._properties.child1.vector.x.value = 1;\n root._properties.child1.vector.y.value = 2;\n root._properties.child1.vector.z.value = 3;\n\n // assign values via resolve path\n root.resolvePath('child1.vector.x').value = 3;\n root.resolvePath('child1.vector.y').value = 2;\n root.resolvePath('child1.vector.z').value = 1;\n\n // Check values\n expect(root._properties.child1.vector.x.value).to.equal(3);\n expect(root._properties.child1.vector.y.value).to.equal(2);\n expect(root._properties.child1.vector.z.value).to.equal(1);\n\n // Check roots\n expect(positionProperty.getRoot()).to.equal(root);\n expect(positionProperty._properties.x.getRoot()).to.equal(root);\n expect(vec3Property.getRoot()).to.equal(root);\n expect(vec3Property._properties.x.getRoot()).to.equal(root);\n\n // Check paths\n expect(positionProperty.getAbsolutePath()).to.equal('/child1.position');\n expect(positionProperty._properties.x.getAbsolutePath()).to.equal('/child1.position.x');\n expect(vec3Property.getAbsolutePath()).to.equal('/child1.vector');\n expect(vec3Property._properties.x.getAbsolutePath()).to.equal('/child1.vector.x');\n\n // Check deletion\n root._properties.child1.propertyNode.remove('position');\n root._properties.child1.propertyNode.remove('vector');\n\n expect(root._properties.child1.position).to.be.undefined;\n expect(root.resolvePath('child1.position')).to.be.undefined;\n\n expect(root._properties.child1.vector).to.be.undefined;\n expect(root.resolvePath('child1.vector')).to.be.undefined;\n\n // Check roots\n expect(positionProperty.getRoot()).to.equal(positionProperty);\n expect(positionProperty._properties.x.getRoot()).to.equal(positionProperty);\n expect(vec3Property.getRoot()).to.equal(vec3Property);\n expect(vec3Property._properties.x.getRoot()).to.equal(vec3Property);\n\n // Check paths\n expect(positionProperty.getAbsolutePath()).to.equal('/');\n expect(positionProperty._properties.x.getAbsolutePath()).to.equal('/x');\n expect(vec3Property.getAbsolutePath()).to.equal('/');\n expect(vec3Property._properties.x.getAbsolutePath()).to.equal('/x');\n\n // Check addition to a new property root under a different key\n newRoot.insert('newPosition', positionProperty);\n newRoot.insert('newvector', vec3Property);\n\n // Check roots\n expect(positionProperty.getRoot()).to.equal(newRoot);\n expect(positionProperty._properties.x.getRoot()).to.equal(newRoot);\n expect(vec3Property.getRoot()).to.equal(newRoot);\n expect(vec3Property._properties.x.getRoot()).to.equal(newRoot);\n\n // Check paths\n expect(positionProperty.getAbsolutePath()).to.equal('/newPosition');\n expect(positionProperty._properties.x.getAbsolutePath()).to.equal('/newPosition.x');\n expect(vec3Property.getAbsolutePath()).to.equal('/newvector');\n expect(vec3Property._properties.x.getAbsolutePath()).to.equal('/newvector.x');\n\n // Check keys with characters that require quotations\n newRoot.remove('newPosition');\n newRoot.remove('newvector');\n newRoot.insert('new\"Position', positionProperty);\n newRoot.insert('new.Vector', vec3Property);\n\n // Check paths\n expect(positionProperty.getAbsolutePath()).to.equal('/\"new\\\\\"Position\"');\n expect(positionProperty._properties.x.getAbsolutePath()).to.equal('/\"new\\\\\"Position\".x');\n expect(newRoot.resolvePath('\"new\\\\\"Position\".x')).to.equal(positionProperty._properties.x);\n expect(vec3Property.getAbsolutePath()).to.equal('/\"new.Vector\"');\n expect(vec3Property._properties.x.getAbsolutePath()).to.equal('/\"new.Vector\".x');\n expect(newRoot.resolvePath('\"new.Vector\".x')).to.equal(vec3Property._properties.x);\n\n newRoot.remove('new\"Position');\n\n // Path resolution for named properties should return the correct path\n var namedProperty = PropertyFactory.create('NamedProperty');\n var nodeProperty = PropertyFactory.create('NodeProperty');\n nodeProperty.insert(namedProperty);\n expect(namedProperty.getAbsolutePath()).to.equal('/' + namedProperty.getGuid());\n expect(nodeProperty.resolvePath(namedProperty.getGuid())).to.equal(namedProperty);\n\n // Try multiple levels\n var leaf = PropertyFactory.create('NodeProperty');\n expect(leaf.resolvePath('/')).to.equal(leaf);\n var map1 = PropertyFactory.create('NodeProperty');\n map1.insert('entry', leaf);\n expect(leaf.resolvePath('/')).to.equal(map1);\n\n var map2 = PropertyFactory.create('NodeProperty');\n map2.insert('entry', map1);\n expect(leaf.resolvePath('/')).to.equal(map2);\n\n var map3 = PropertyFactory.create('NodeProperty');\n map3.insert('entry', map2);\n expect(leaf.resolvePath('/')).to.equal(map3);\n });\n });\n\n it('should correctly clean templates inheriting from NamedNodeProperty', function () {\n var property = PropertyFactory.create('autodesk.tests:MixedNamedNodeProperty-1.0.0');\n var childProperty = property.get('stringProperty');\n childProperty.value = 'changed';\n expect(childProperty.isDirty()).to.be.true;\n property.cleanDirty();\n expect(property.isDirty()).to.be.false;\n expect(childProperty.isDirty()).to.be.false;\n });\n\n describe('Make sure to have appropriate types for ids given to nodeProperty when inserting', function () {\n it('should be possible for the id passed to be a string', function (done) {\n var node1 = PropertyFactory.create('NodeProperty');\n var node2 = PropertyFactory.create('autodesk.tests:MixedNamedNodeProperty-1.0.0');\n var node3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n node1.insert('node', node3);\n node3.insert('node1', node2);\n node2._properties.stringProperty.value = 'test';\n expect(node1.resolvePath('node.node1.stringProperty').value).to.equal('test');\n expect(node3.resolvePath('node1.stringProperty').value).to.equal('test');\n done();\n });\n\n it('should be possible for the id passed to be a number', function (done) {\n var node1 = PropertyFactory.create('NodeProperty');\n var node2 = PropertyFactory.create('autodesk.tests:MixedNamedNodeProperty-1.0.0');\n var node3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n node1.insert('node', node3);\n node3.insert(1122, node2);\n node2._properties.stringProperty.value = 'test';\n expect(node1.resolvePath('node.1122.stringProperty').value).to.equal('test');\n expect(node3.resolvePath('1122.stringProperty').value).to.equal('test');\n done();\n });\n\n it('should throw an error when the id passed is an object', function (done) {\n var node1 = PropertyFactory.create('NodeProperty');\n var node2 = PropertyFactory.create('autodesk.tests:MixedNamedNodeProperty-1.0.0');\n var node3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n node1.insert('node', node3);\n try {\n node3.insert({ foo: 'bar' }, node2);\n node2._properties.stringProperty.value = 'test';\n } catch (e) {\n done();\n }\n });\n });\n\n describe('_coveredByPaths', function () {\n this.timeout(500);\n let PathHelper, getPathCoverageSpy, paths, prop, propPath;\n\n before(function () {\n PathHelper = require('@fluid-experimental/property-changeset').PathHelper;\n });\n\n beforeEach(function () {\n getPathCoverageSpy = sinon.spy(PathHelper, 'getPathCoverage');\n });\n\n afterEach(function () {\n PathHelper.getPathCoverage.restore();\n });\n\n after(function () {\n });\n\n it('should succeed if property is included in a path 1', function () {\n paths = ['a.b'];\n prop = PropertyFactory.create('String');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if property is included in a path 2', function () {\n paths = ['a.b'];\n prop = PropertyFactory.create('Int32');\n propPath = 'a.b.c';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if property is a primitive collection included in a path', function () {\n paths = ['a.b'];\n prop = PropertyFactory.create('Int32', 'array');\n propPath = 'a.b.c.d';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should fail if property is not included in any path 1', function () {\n paths = ['a.b'];\n prop = PropertyFactory.create('Bool');\n propPath = 'b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.false;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should fail if property is not included in any path 2', function () {\n paths = ['a.b'];\n prop = PropertyFactory.create('Float32');\n propPath = 'b.f.g';\n expect(prop._coveredByPaths(propPath, paths)).to.be.false;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should fail if property is not included in any path but have common root 1', function () {\n paths = ['a.b'];\n prop = PropertyFactory.create('String', 'map');\n propPath = 'a.h';\n expect(prop._coveredByPaths(propPath, paths)).to.be.false;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should fail if property is not included in any path but have common root 2', function () {\n paths = ['a.b'];\n prop = PropertyFactory.create('NodeProperty');\n propPath = 'a.i.j';\n expect(prop._coveredByPaths(propPath, paths)).to.be.false;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if path goes through a primitive property 1', function () {\n paths = ['a.b.c', 'a.b.d', 'z'];\n prop = PropertyFactory.create('String');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if path goes through a primitive property 2', function () {\n paths = ['a.b.c', 'a.b.d', 'z'];\n prop = PropertyFactory.create('Int32');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if path goes through a primitive collection property 1', function () {\n paths = ['a.b.c', 'z', 'a.b.d'];\n prop = PropertyFactory.create('Int32', 'map');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if path goes through a primitive collection property 2', function () {\n paths = ['z', 'a.b.c', 'a.b.d'];\n prop = PropertyFactory.create('String', 'array');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if path goes through a non-primitive collection property 1', function () {\n paths = ['a.b.c', 'z', 'a.b.d'];\n prop = PropertyFactory.create('NodeProperty', 'map');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if path goes through a non-primitive collection property 2', function () {\n paths = ['z', 'a.b.c', 'a.b.d'];\n prop = PropertyFactory.create('NamedProperty', 'set');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if property is included in multiple paths 1', function () {\n paths = ['a.b.c', 'a.b.d', 'z'];\n prop = PropertyFactory.create('NodeProperty');\n prop.insert('c', PropertyFactory.create('String'));\n prop.insert('d', PropertyFactory.create('String'));\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(3);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.c', ['a.b.c', 'a.b.d'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d', ['a.b.c', 'a.b.d'])).to.be.true;\n });\n\n it('should succeed if property is included in multiple paths 2', function () {\n paths = ['a.b.c', 'z', 'a.b.d'];\n prop = PropertyFactory.create('NodeProperty');\n let c = PropertyFactory.create('NodeProperty');\n prop.insert('c', c);\n c.insert('f', PropertyFactory.create('String'));\n c.insert('g', PropertyFactory.create('String'));\n let d = PropertyFactory.create('String', 'map');\n prop.insert('d', d);\n d.insert('h', 'h');\n d.insert('i', 'i');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(3);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.c', ['a.b.c', 'a.b.d'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d', ['a.b.c', 'a.b.d'])).to.be.true;\n });\n\n it('should succeed if property is included in multiple paths 3', function () {\n paths = ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i', 'a.z'];\n prop = PropertyFactory.create('NodeProperty');\n let c = PropertyFactory.create('NodeProperty');\n prop.insert('c', c);\n c.insert('f', PropertyFactory.create('String'));\n c.insert('g', PropertyFactory.create('String'));\n let d = PropertyFactory.create('NodeProperty');\n prop.insert('d', d);\n d.insert('h', PropertyFactory.create('String'));\n d.insert('i', PropertyFactory.create('String'));\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(5);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.c', ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d', ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d.h', ['a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d.i', ['a.b.d.h', 'a.b.d.i'])).to.be.true;\n });\n\n it('should succeed if property is included in multiple paths 4', function () {\n paths = ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i', 'a.z'];\n prop = PropertyFactory.create('NodeProperty');\n let b = PropertyFactory.create('NodeProperty');\n prop.insert('b', b);\n let c = PropertyFactory.create('NodeProperty');\n b.insert('c', c);\n c.insert('f', PropertyFactory.create('String'));\n c.insert('g', PropertyFactory.create('String'));\n let d = PropertyFactory.create('NodeProperty');\n b.insert('d', d);\n d.insert('h', PropertyFactory.create('String'));\n d.insert('i', PropertyFactory.create('String'));\n propPath = 'a';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(6);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b', paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.c', ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d', ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d.h', ['a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d.i', ['a.b.d.h', 'a.b.d.i'])).to.be.true;\n });\n\n it('should succeed if property is included in multiple paths through map 1', function () {\n paths = ['a.b.c', 'a.b.d.z', 'z'];\n prop = PropertyFactory.create('String', 'map');\n prop.insert('c', 'c');\n prop.insert('d', 'd');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(3);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.c', ['a.b.c', 'a.b.d.z'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d', ['a.b.c', 'a.b.d.z'])).to.be.true;\n });\n\n it('should succeed if property is included in multiple paths through map 2', function () {\n paths = ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i', 'a.z'];\n prop = PropertyFactory.create('NodeProperty');\n let c = PropertyFactory.create('NodeProperty');\n let d = PropertyFactory.create('String', 'map');\n prop.insert('c', c);\n c.insert('f', PropertyFactory.create('String'));\n c.insert('g', PropertyFactory.create('String'));\n prop.insert('d', d);\n d.insert('h', 'h');\n d.insert('i', 'i');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(5);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.c', ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d', ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d.h', ['a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d.i', ['a.b.d.h', 'a.b.d.i'])).to.be.true;\n });\n\n it('should fail if property is not completely included in multiple paths 1', function () {\n paths = ['a.b.c', 'a.b.d', 'z'];\n prop = PropertyFactory.create('NodeProperty');\n prop.insert('c', PropertyFactory.create('String'));\n prop.insert('e', PropertyFactory.create('String'));\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.false;\n expect(getPathCoverageSpy.callCount).to.be.above(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should fail if property is not completely included in multiple paths 2', function () {\n paths = ['z', 'a.b.d', 'a.b.c'];\n prop = PropertyFactory.create('NodeProperty');\n prop.insert('e', PropertyFactory.create('String'));\n prop.insert('c', PropertyFactory.create('String'));\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.false;\n expect(getPathCoverageSpy.callCount).to.be.above(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"nodeProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/nodeProperty.spec.js"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n/* globals assert, sinon */\n/* eslint-disable no-unused-expressions */\n/**\n * @fileoverview In this file, we will test the NodeProperty\n * object described in properties/nodeProperty.js\n */\nconst { ChangeSet } = require('@fluid-experimental/property-changeset');\nconst { generateGUID } = require('@fluid-experimental/property-common').GuidUtils;\nconst { MSG } = require('@fluid-experimental/property-common').constants;\nconst _ = require('lodash');\nconst { PropertyFactory } = require('../..');\nconst { BaseProperty } = require('../..');\nconst { NodeProperty } = require('../../properties/nodeProperty');\nconst { MapProperty } = require('../../properties/mapProperty');\n\ndescribe('NodeProperty', function() {\n var changeSetWithTwoMapEntries, changeSetWithTwoMapEntries_full, removalChangeSet;\n var myNode, mapNode1, mapNode2;\n\n before(function() {\n // Register a template with a set property for the tests\n var MixedNodePropertyTemplate = {\n typeid: 'autodesk.tests:MixedNodeTestProperty-1.0.0',\n inherits: ['NodeProperty'],\n properties: [\n { id: 'stringProperty', typeid: 'String' },\n { id: 'stringProperty2', typeid: 'String' },\n ],\n };\n var AnonymousTestPropertyTemplate = {\n typeid: 'autodesk.tests:AnonymousProperty-1.0.0',\n properties: [\n { id: 'stringProperty', typeid: 'String' },\n ],\n };\n var MixedNamedNodePropertyTemplate = {\n typeid: 'autodesk.tests:MixedNamedNodeProperty-1.0.0',\n inherits: ['NodeProperty', 'NamedProperty'],\n properties: [\n { id: 'stringProperty', typeid: 'String' },\n ],\n };\n var TestEnumTemplate = {\n typeid: 'autodesk.core:UnitsEnum-1.0.0',\n inherits: 'Enum',\n annotation: { description: 'The metric units' },\n properties: [\n { id: 'm', value: 1, annotation: { description: 'meter' } },\n { id: 'cm', value: 2, annotation: { description: 'centimeter' } },\n { id: 'mm', value: 3, annotation: { description: 'millimeter' } },\n ],\n };\n PropertyFactory._reregister(TestEnumTemplate);\n\n PropertyFactory._reregister(MixedNodePropertyTemplate);\n PropertyFactory._reregister(MixedNamedNodePropertyTemplate);\n PropertyFactory._reregister(AnonymousTestPropertyTemplate);\n\n myNode = PropertyFactory.create('NodeProperty');\n mapNode1 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n mapNode2 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n // Register the templates from the discussion document\n var Vec3Template = {\n typeid: 'autodesk.test:vector3-1.0.0',\n properties: [\n { id: 'x', typeid: 'Float32' },\n { id: 'y', typeid: 'Float32' },\n { id: 'z', typeid: 'Float32' },\n ],\n };\n\n var Point2DTemplate = {\n typeid: 'autodesk.test:point2d-1.0.0',\n properties: [\n {\n id: 'position', properties: [\n { id: 'x', typeid: 'Float32' },\n { id: 'y', typeid: 'Float32' },\n ],\n },\n { id: 'normal', typeid: 'autodesk.test:vector3-1.0.0' },\n { id: 'neighbours', typeid: 'autodesk.test:vector3-1.0.0', context: 'map' },\n { id: 'temperature', typeid: 'Float32' },\n ],\n };\n\n var SceneObjectTemplate = {\n inherits: 'NodeProperty',\n typeid: 'autodesk.test:SceneObject-1.0.0',\n properties: [\n { id: 'name', typeid: 'String' },\n { id: 'revitId', typeid: 'String' },\n ],\n };\n\n var nestedNodeProperty = {\n typeid: 'autodesk.tests:nested.node.property-1.0.0',\n properties: [\n {\n id: 'nested', properties: [\n { id: 'property', typeid: 'NodeProperty' },\n ],\n },\n ],\n };\n\n var testArrayProperty = {\n typeid: 'autodesk.tests:test.array.property-1.0.0',\n properties: [\n { id: 'array', typeid: 'Float32', context: 'array' },\n ],\n };\n\n PropertyFactory._reregister(Vec3Template);\n PropertyFactory._reregister(Point2DTemplate);\n PropertyFactory._reregister(SceneObjectTemplate);\n PropertyFactory._reregister(nestedNodeProperty);\n PropertyFactory._reregister(testArrayProperty);\n });\n\n // Helper functions for the test cases\n var keyCounter = 0;\n var resetKeyCounter = function() {\n keyCounter = 0;\n };\n\n // Inserts a node with the given guid (a new one is generated when undefined)\n var insertNodeInRootWithKeyAndGuid = function(key, guid, root) {\n var node = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n if (key === undefined) {\n key = 'node' + keyCounter++;\n }\n\n root.insert(key, node);\n };\n\n // Inserts a new node in the root\n var insertNodeInRoot = function(root) {\n insertNodeInRootWithKeyAndGuid(undefined, undefined, root);\n };\n\n // Returns a functor that will insert a node with a constant GUID\n var insertUniqueNodeInRoot = function() {\n var key = 'node' + keyCounter++;\n return insertNodeInRootWithKeyAndGuid.bind(undefined, key, generateGUID());\n };\n\n // Inserts a new node as leaf\n var insertNodeAsLeaf = function(root) {\n var leaf = root;\n while (leaf.getDynamicIds().length > 0) {\n leaf = _.values(leaf._getDynamicChildrenReadOnly())[0];\n }\n var node = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var key = 'node' + keyCounter++;\n leaf.insert(key, node);\n };\n\n // Removes the first node from the root\n var removeFirstNodeInRoot = function(root) {\n var firstKey = root.getDynamicIds()[0];\n root.remove(firstKey);\n };\n\n // Modifies the leaf node\n var modifyLeaf = function(root) {\n var leaf = root;\n while (leaf.getDynamicIds().length > 0) {\n leaf = _.values(leaf._getDynamicChildrenReadOnly())[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(myNode.getIds()).to.be.empty;\n expect(myNode.serialize({ 'dirtyOnly': true })).to.be.empty;\n });\n\n it('should be possible to insert into the map', function() {\n // Test insertion of the first node\n myNode.insert('node1', mapNode1);\n expect(myNode.has('node1')).to.be.ok;\n expect(myNode.has('node2')).to.be.not.ok;\n expect(myNode.get('node2')).to.equal(undefined);\n expect(mapNode1.getParent()).to.equal(myNode);\n\n var CS = myNode.serialize({ 'dirtyOnly': true });\n expect(CS.insert &&\n CS.insert['autodesk.tests:MixedNodeTestProperty-1.0.0'] &&\n _.keys(CS.insert['autodesk.tests:MixedNodeTestProperty-1.0.0']).length === 1 &&\n _.keys(CS.insert['autodesk.tests:MixedNodeTestProperty-1.0.0'])[0] === 'node1').to.be.ok;\n\n // Test insertion of the second node\n myNode.insert('node2', mapNode2);\n expect(myNode.has('node2')).to.be.ok;\n expect(myNode.get('node2')).to.equal(mapNode2);\n changeSetWithTwoMapEntries = myNode.serialize({ 'dirtyOnly': true });\n expect(changeSetWithTwoMapEntries.insert &&\n changeSetWithTwoMapEntries.insert['autodesk.tests:MixedNodeTestProperty-1.0.0'] &&\n _.keys(changeSetWithTwoMapEntries.insert['autodesk.tests:MixedNodeTestProperty-1.0.0']).length === 2 &&\n _.includes(\n _.keys(changeSetWithTwoMapEntries.insert['autodesk.tests:MixedNodeTestProperty-1.0.0']), 'node1') &&\n _.includes(\n _.keys(\n changeSetWithTwoMapEntries.insert['autodesk.tests:MixedNodeTestProperty-1.0.0']), 'node2')).to.be.ok;\n\n changeSetWithTwoMapEntries_full = myNode.serialize({ 'dirtyOnly': false });\n expect(changeSetWithTwoMapEntries).to.deep.equal(changeSetWithTwoMapEntries_full);\n });\n\n it('should fail when trying to insert with empty id', function() {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var mapNode3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n expect(() => myNode1.insert('', mapNode3)).to.throw(MSG.ID_SHOULD_NOT_BE_EMPTY_STRING);\n });\n\n it('should fail when trying to insert in itself', function() {\n var myNode1 = PropertyFactory.create('NodeProperty');\n expect(() => myNode1.insert('a', myNode1)).to.throw(MSG.INSERTED_IN_OWN_CHILDREN);\n });\n\n it('should fail when trying to insert in child', function() {\n var myNodeParent = PropertyFactory.create('NodeProperty');\n var myNodeChild = PropertyFactory.create('NodeProperty');\n myNodeParent.insert('a', myNodeChild);\n expect(() => myNodeChild.insert('a', myNodeParent)).to.throw(MSG.INSERTED_IN_OWN_CHILDREN);\n });\n\n it('should fail when trying to insert in grand-child', function() {\n var myNodeParent = PropertyFactory.create('NodeProperty');\n var myNodeChild = PropertyFactory.create('NodeProperty');\n var myNodeGrandChild = PropertyFactory.create('NodeProperty');\n myNodeParent.insert('a', myNodeChild);\n myNodeChild.insert('a', myNodeGrandChild);\n expect(() => myNodeGrandChild.insert('a', myNodeParent)).to.throw(MSG.INSERTED_IN_OWN_CHILDREN);\n });\n\n it('.remove should return the property removed', function() {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var mapNode3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var mapNode4 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n myNode1.insert('node1', mapNode3);\n myNode1.insert('node2', mapNode4);\n expect(myNode1.remove('node1')).to.deep.equal(mapNode3);\n expect(myNode1.remove(mapNode4)).to.deep.equal(mapNode4);\n expect(myNode1.getIds()).to.be.empty;\n });\n\n it('.clear should remove all nodes', function() {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var mapNode3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var mapNode4 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n myNode1.insert('node1', mapNode3);\n myNode1.insert('node2', mapNode4);\n expect(myNode1.clear()).to.be.undefined;\n expect(myNode1.getIds()).to.be.empty;\n });\n\n it('.getValues should work', function() {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var mapNode3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var mapNode4 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n myNode1.insert('node1', mapNode3);\n myNode1.insert('node2', mapNode4);\n expect(myNode1.getValues()).to.deep.equal({\n node1: { stringProperty: '', stringProperty2: '' },\n node2: { stringProperty: '', stringProperty2: '' },\n });\n });\n\n it('getValues should work with nested arrays', function() {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var myArray = PropertyFactory.create('autodesk.tests:test.array.property-1.0.0');\n myNode1.insert('array1', myArray);\n myNode1.get('array1').get('array').insertRange(0, [1, 2, 3]);\n expect(myNode1.getIds()).to.deep.equal(['array1']);\n expect(myNode1.getValues()).to.deep.equal({\n array1: { array: [1, 2, 3] },\n });\n });\n\n it.skip('@bugfix getValues should work with circular references', function() {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var myRef1 = PropertyFactory.create('Reference', 'single', '/ref2');\n var myRef2 = PropertyFactory.create('Reference', 'single', '/ref1');\n myNode1.insert('ref1', myRef1);\n myNode1.insert('ref2', myRef2);\n myNode1.getValues();\n expect(myNode1.getIds()).to.deep.equal(['ref1', 'ref2']);\n expect(myNode1.getValues()).to.deep.equal({\n 'ref1': '/ref2',\n 'ref2': '/ref1',\n });\n });\n\n it('getValues should work with bad references', function() {\n var myNode1 = PropertyFactory.create('NodeProperty');\n var myRef = PropertyFactory.create('Reference', 'single');\n myNode1.insert('badref', myRef);\n myNode1.getValues();\n expect(myNode1.getIds()).to.deep.equal(['badref']);\n expect(myNode1.getValues()).to.deep.equal({\n 'badref': undefined,\n });\n });\n\n it('Should track dirtiness', function() {\n myNode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n expect(myNode.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n })).to.be.empty;\n expect(myNode.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n })).deep.equal(changeSetWithTwoMapEntries_full);\n expect(myNode.serialize({ 'dirtyOnly': false })).deep.equal(changeSetWithTwoMapEntries_full);\n });\n\n it('Should handle removals correctly', function() {\n myNode.remove('node1');\n expect(mapNode1.getParent()).to.be.undefined;\n myNode.remove('node2');\n expect(myNode.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n })).to.be.empty;\n expect(myNode.serialize({ 'dirtyOnly': false })).to.be.empty;\n removalChangeSet = myNode.serialize({\n 'dirtyOnly': true,\n 'includeRootTypeid': false,\n 'dirtinessType': BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n });\n expect(removalChangeSet).to.have.all.keys(['remove']);\n expect(removalChangeSet.remove).to.have.length(2);\n expect(removalChangeSet.remove).to.contain('node1');\n expect(removalChangeSet.remove).to.contain('node2');\n });\n\n it('Should support deserialization', function() {\n var deserializedNode = PropertyFactory.create('NodeProperty');\n var deserializedChanges1 = deserializedNode.deserialize(changeSetWithTwoMapEntries);\n var CS4 = deserializedNode.serialize({ 'dirtyOnly': false });\n expect(CS4).to.deep.equal(changeSetWithTwoMapEntries);\n expect(deserializedChanges1).to.deep.equal(changeSetWithTwoMapEntries);\n\n var deserializedChanges2 = deserializedNode.deserialize(changeSetWithTwoMapEntries);\n expect(deserializedChanges2).to.be.empty;\n\n var deserializedChanges3 = deserializedNode.deserialize({});\n expect(deserializedChanges3).to.deep.equal(removalChangeSet);\n });\n\n it('should support deserialization for nested properties', function() {\n var P1 = PropertyFactory.create('autodesk.tests:nested.node.property-1.0.0');\n var P2 = PropertyFactory.create('autodesk.tests:nested.node.property-1.0.0');\n\n P1._properties.nested.property.propertyNode.insert('testProperty', PropertyFactory.create('String'));\n P1._properties.nested.property.testProperty.value = 'testString';\n\n P2.deserialize(P1.serialize({ 'dirtyOnly': false }));\n expect(P1.serialize({ 'dirtyOnly': false })).to.deep.equal(P2.serialize({ 'dirtyOnly': false }));\n expect(P2._properties.nested.property.testProperty.value).to.equal('testString');\n });\n\n it('Should track modifies', function() {\n var modifyNode1 = PropertyFactory.create('NodeProperty');\n var modifyNode2 = PropertyFactory.create('NodeProperty');\n\n modifyNode1.deserialize(changeSetWithTwoMapEntries);\n modifyNode2.deserialize(changeSetWithTwoMapEntries);\n\n modifyNode1.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n var child1 = modifyNode1.get('node1');\n child1._properties.stringProperty.value = 'modify test';\n var modifyChangeSet = modifyNode1.serialize({ 'dirtyOnly': true });\n modifyNode2.applyChangeSet(modifyChangeSet);\n expect(modifyNode2.serialize({ 'dirtyOnly': false }))\n .to.deep.equal(modifyNode1.serialize({ 'dirtyOnly': false }));\n });\n\n it('Should support hierarchical properties', function() {\n var node1 = PropertyFactory.create('NodeProperty');\n var node2 = PropertyFactory.create('NodeProperty');\n var node3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n // Createa a hierarchy of three nodes\n node1.insert('node', node2);\n node2.insert('node', node3);\n node3._properties.stringProperty.value = 'test';\n\n // Check that deserializing and serializing works with a hierarchy\n var hierarchicalChangeSet = node1.serialize({ 'dirtyOnly': true });\n var deserializedNode = PropertyFactory.create('NodeProperty');\n deserializedNode.deserialize(hierarchicalChangeSet);\n var child1 = deserializedNode.get(deserializedNode.getIds()[0]);\n expect(child1).to.not.equal(undefined);\n var child2 = child1.get(child1.getIds()[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.get(deserializedNode.getIds()[0]);\n expect(child1).to.not.equal(undefined);\n child2 = child1.get(child1.getIds()[0]);\n expect(child2).to.not.equal(undefined);\n expect(child2._properties.stringProperty.value).to.equal('test2');\n });\n\n it('should be possible to use anonymous properties', function() {\n var rootNode = PropertyFactory.create('NodeProperty');\n var rootNode2 = PropertyFactory.create('NodeProperty');\n var node1 = PropertyFactory.create('autodesk.tests:AnonymousProperty-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:AnonymousProperty-1.0.0');\n\n rootNode.insert('node1', node1);\n rootNode.insert('node2', node2);\n var testChangeSet = rootNode.serialize({ 'dirtyOnly': false });\n\n expect(rootNode.get('node1')).to.be.equal(node1);\n expect(rootNode.get('node2')).to.be.equal(node2);\n rootNode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n node1._properties.stringProperty.value = '1';\n node2._properties.stringProperty.value = '2';\n\n rootNode2.deserialize(testChangeSet);\n rootNode2.applyChangeSet(rootNode.serialize({ 'dirtyOnly': true }));\n expect(rootNode2.serialize({ 'dirtyOnly': false })).to.be.deep.equal(rootNode.serialize({ 'dirtyOnly': false }));\n });\n\n it('inserting the same key twice should throw an exception', function() {\n var rootNode = PropertyFactory.create('NodeProperty');\n var node1 = PropertyFactory.create('NodeProperty');\n var node2 = PropertyFactory.create('NodeProperty');\n rootNode.insert('node1', node1);\n expect(function() {\n rootNode.insert('node1', node2);\n }).to.throw();\n });\n\n it('Should work to create a MixedNodeTemplate', function() {\n var mixedNode = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n mixedNode.insert('dynamicFloat', PropertyFactory.create('Float32'));\n mixedNode.insert('dynamicString', PropertyFactory.create('String'));\n\n mixedNode._properties.stringProperty.value = 'string1';\n mixedNode._properties.stringProperty2.value = 'string2';\n mixedNode._properties.dynamicString.value = 'dynamic2';\n mixedNode._properties.dynamicFloat.value = 11;\n\n expect(mixedNode.serialize({ 'dirtyOnly': false })).to.deep.equal({\n String: {\n stringProperty: 'string1',\n stringProperty2: 'string2',\n },\n insert: {\n String: {\n dynamicString: 'dynamic2',\n },\n Float32: {\n dynamicFloat: 11,\n },\n },\n });\n\n mixedNode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n mixedNode._properties.stringProperty.value = 'modified1';\n mixedNode._properties.dynamicString.value = 'modified2';\n mixedNode.insert('dynamicString2', PropertyFactory.create('String'));\n mixedNode._properties.dynamicString2.value = 'dynamic3';\n\n expect(mixedNode.serialize({ 'dirtyOnly': true })).to.deep.equal({\n String: {\n stringProperty: 'modified1',\n },\n modify: {\n String: {\n dynamicString: 'modified2',\n },\n },\n insert: {\n String: {\n dynamicString2: 'dynamic3',\n },\n },\n });\n\n // Pretty printing\n var expectedPrettyStr =\n 'undefined (autodesk.tests:MixedNodeTestProperty-1.0.0):\\n' +\n ' stringProperty (String): \"modified1\"\\n' +\n ' stringProperty2 (String): \"string2\"\\n' +\n ' dynamicFloat (Float32): 11\\n' +\n ' dynamicString (String): \"modified2\"\\n' +\n ' dynamicString2 (String): \"dynamic3\"\\n';\n var prettyStr = '';\n mixedNode.prettyPrint(function(str) {\n prettyStr += str + '\\n';\n });\n expect(prettyStr).to.equal(expectedPrettyStr);\n });\n\n it('inserting the same node twice should be a bug', function() {\n var rootNode = PropertyFactory.create('NodeProperty');\n var node = PropertyFactory.create('NodeProperty');\n\n // Try to insert the same node object under two keys\n rootNode.insert('node', node);\n expect(function() {\n rootNode.insert('node2', node);\n }).to.throw();\n\n // After removing it, adding it under a new key should be possible\n rootNode.remove('node');\n rootNode.insert('node2', node);\n });\n\n it('should not allow adding two nodes with same id', function() {\n var NodeTemplate = {\n typeid: 'autodesk.tests:NodeTemplate-1.0.0',\n inherits: 'NodeProperty',\n properties: [{ id: 'a', typeid: 'Float32' }],\n };\n\n PropertyFactory._reregister(NodeTemplate);\n\n var node = PropertyFactory.create('autodesk.tests:NodeTemplate-1.0.0');\n var child = PropertyFactory.create('String');\n\n expect(function() {\n node.insert('a', child);\n }).to.throw(MSG.PROPERTY_ALREADY_EXISTS + 'a');\n });\n\n it('Should correctly report whether it is a root', function() {\n var root = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var child = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var stringProperty = child.resolvePath('stringProperty');\n\n root.insert('childKey', child);\n assert(root.isRoot());\n assert(!child.isRoot());\n\n expect(stringProperty.getAbsolutePath()).to.equal('/childKey.stringProperty');\n expect(stringProperty.getRelativePath(child)).to.equal('stringProperty');\n expect(root.resolvePath(stringProperty.getAbsolutePath())).to.equal(stringProperty);\n expect(child.resolvePath(stringProperty.getRelativePath(child))).to.equal(stringProperty);\n });\n\n it('should correctly report changes when deserializing keys which contain 0', function() {\n var property = PropertyFactory.create('NodeProperty');\n property.insert('test', PropertyFactory.create('Int32'));\n property._properties.test.value = 5; // Make sure, it is marked as modified\n property._properties.test.value = 0;\n\n var property2 = PropertyFactory.create('NodeProperty');\n property2.insert('test', PropertyFactory.create('Int32'));\n property2._properties.test.value = 5;\n\n var actualChanges = property2.deserialize(property.serialize({ 'dirtyOnly': false }));\n expect(actualChanges).to.deep.equal({ modify: { 'Int32': { 'test': 0 } } });\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 resetKeyCounter();\n var testProperty = PropertyFactory.create('NodeProperty');\n\n var callbacks = in_options.callbacks;\n if (in_options.pre) {\n in_options.pre(testProperty);\n }\n\n var initialChangeset = new ChangeSet(testProperty.serialize({ 'dirtyOnly': false }));\n initialChangeset.setIsNormalized(true);\n\n var squashedChangeset = new ChangeSet();\n testProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](testProperty);\n var changes = testProperty.serialize({ 'dirtyOnly': true });\n testProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n squashedChangeset.applyChangeSet(changes);\n }\n\n if (in_options.post) {\n in_options.post(squashedChangeset.getSerializedChangeSet());\n }\n\n initialChangeset.applyChangeSet(squashedChangeset.getSerializedChangeSet());\n expect(initialChangeset.getSerializedChangeSet()).to.deep.equal(testProperty.serialize({ 'dirtyOnly': false }));\n };\n\n it('should work for multiple independent inserts', function() {\n testChangeSetSquashing({ callbacks: [insertNodeInRoot, insertNodeInRoot, insertNodeInRoot] });\n });\n it('should work for multiple hierarchical inserts', function() {\n testChangeSetSquashing({ callbacks: [insertNodeAsLeaf, insertNodeAsLeaf, insertNodeAsLeaf] });\n });\n it('should work for inserts followed by removes', function() {\n testChangeSetSquashing({\n callbacks: [insertNodeInRoot, insertNodeInRoot, removeFirstNodeInRoot, removeFirstNodeInRoot],\n post: function(changeset) {\n expect(changeset).to.be.empty;\n },\n });\n });\n it('should work for a tree removal', function() {\n testChangeSetSquashing({\n callbacks: [insertNodeAsLeaf, insertNodeAsLeaf, insertNodeAsLeaf, removeFirstNodeInRoot],\n post: function(changeset) {\n expect(changeset).to.be.empty;\n },\n });\n });\n\n it('should work for modifies in a tree', function() {\n testChangeSetSquashing({\n callbacks: [insertNodeAsLeaf, insertNodeAsLeaf, insertNodeAsLeaf, modifyLeaf, modifyLeaf],\n });\n });\n it('should work for modifies of a primitive type', function() {\n testChangeSetSquashing({\n callbacks: [\n function(root) {\n var newStringNode = PropertyFactory.create('String');\n newStringNode.value = 'initial value';\n root.insert('stringProp', newStringNode);\n },\n function(root) {\n root.get('stringProp').value = 'new value';\n },\n ],\n });\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).to.have.all.keys('remove');\n },\n });\n });\n it('of a replace operation should be possible', function() {\n // Create two nodes\n var node1 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n node2._properties.stringProperty.value = 'testString2';\n\n testChangeSetSquashing({\n pre: function(root) {\n root.insert('node1', node1);\n },\n callbacks: [\n removeFirstNodeInRoot,\n function(root) {\n root.insert('node1', node2);\n },\n ],\n post: function(changeset) {\n expect(changeset).to.have.all.keys('remove', 'insert');\n },\n });\n });\n });\n describe('Rebasing', function() {\n var testRebasing = function(in_options) {\n // Prepare the initial state\n var baseProperty1 = PropertyFactory.create('NodeProperty');\n if (in_options.prepare) {\n in_options.prepare(baseProperty1);\n }\n // Create two copies of this state\n var baseProperty2 = PropertyFactory.create('NodeProperty');\n baseProperty2.deserialize(baseProperty1.serialize({ 'dirtyOnly': false }));\n var baseProperty3 = PropertyFactory.create('NodeProperty');\n baseProperty3.deserialize(baseProperty1.serialize({ 'dirtyOnly': false }));\n\n // Make sure the states are clear\n baseProperty1.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n baseProperty2.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n baseProperty3.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n var initialChangeSet = baseProperty1.serialize({ 'dirtyOnly': false });\n\n // Apply the operations to the two properties in parallel\n if (in_options.op1) {\n in_options.op1(baseProperty1);\n }\n if (in_options.op2) {\n in_options.op2(baseProperty2);\n }\n\n // Get the ChangeSets\n var changeSet1 = new ChangeSet(baseProperty1.serialize({ 'dirtyOnly': true }));\n var changeSet2 = baseProperty2.serialize({ 'dirtyOnly': true });\n\n // Perform the actual rebase\n var conflicts = [];\n changeSet1._rebaseChangeSet(changeSet2, conflicts);\n\n var combinedChangeSet = new ChangeSet(initialChangeSet).clone();\n combinedChangeSet.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('NodeProperty');\n var node2 = PropertyFactory.create('NodeProperty');\n\n testRebasing({\n prepare: function(root) {\n root.insert('node1', node1);\n root.insert('node2', node2);\n },\n op1: function(root) {\n root.remove('node1');\n },\n op2: function(root) {\n root.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:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root.insert('node1', node1);\n },\n op1: modifyLeaf,\n op2: removeFirstNodeInRoot,\n compareToSequential: true,\n });\n });\n\n it('with a remove and a modify should possible', function() {\n var node1 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root.insert('node1', node1);\n },\n op1: removeFirstNodeInRoot,\n op2: modifyLeaf,\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE);\n expect(conflicts[0].path).to.be.equal('node1');\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:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root.insert('node1', node1);\n },\n op1: function(root) {\n root.remove('node1');\n },\n op2: function(root) {\n root.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:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root.insert('node1', node1);\n },\n op1: function(root) {\n _.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty.value = 'a';\n },\n op2: function(root) {\n _.values(root._getDynamicChildrenReadOnly())[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:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root.insert('node1', node1);\n },\n op1: function(root) {\n _.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty.value = 'b';\n },\n op2: function(root) {\n _.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty.value = 'a';\n },\n compareToSequential: true,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(changeSet.modify['autodesk.tests:MixedNodeTestProperty-1.0.0']\n .node1.String.stringProperty).to.equal('a');\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('node1.stringProperty');\n },\n });\n });\n\n it('with modify followed by remove+insert should work', function() {\n var node1 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root.insert('node1', node1);\n },\n op1: modifyLeaf,\n op2: function(root) {\n var node2 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n root.remove('node1');\n root.insert('node1', node2);\n },\n compareToSequential: true,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.REMOVE_AFTER_MODIFY);\n expect(conflicts[0].path).to.be.equal('node1');\n expect(changeSet).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:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root.insert('node1', node1);\n },\n op1: function(root) {\n var node2 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n root.remove('node1');\n root.insert('node1', node2);\n },\n op2: modifyLeaf,\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.ENTRY_MODIFICATION_AFTER_REMOVE_INSERT);\n expect(conflicts[0].path).to.be.equal('node1');\n },\n });\n });\n\n it('with remove+insert followed by remove+insert should report conflict', function() {\n var node = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n root.insert('node', node);\n },\n op1: function(root) {\n root.remove('node');\n root.insert('node', PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0'));\n },\n op2: function(root) {\n root.remove('node');\n root.insert('node', PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0'));\n },\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(conflicts).to.have.length(1);\n expect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n expect(conflicts[0].path).to.be.equal('node');\n },\n });\n });\n\n it('with conflicting inserts should report conflict', function() {\n var node1 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n var node2 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n testRebasing({\n prepare: function(root) {\n },\n op1: function(root) {\n root.insert('node1', node1);\n },\n op2: function(root) {\n root.insert('node1', 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('node1');\n },\n });\n });\n\n it('with conflicting inserts of primitive types', function() {\n testRebasing({\n prepare: function(root) {\n },\n op1: function(root) {\n var string1 = PropertyFactory.create('String');\n string1.value = 'test1';\n root.insert('entry', string1);\n },\n op2: function(root) {\n var string2 = PropertyFactory.create('String');\n string2.value = 'test2';\n root.insert('entry', string2);\n },\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(changeSet).to.deep.equal({\n modify: {\n String: {\n entry: {\n oldValue: 'test1',\n value: 'test2',\n },\n },\n },\n });\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('entry');\n expect(conflicts[0].conflictingChange).to.be.equal('test2');\n },\n });\n });\n\n // TODO: 'with conflicting inserts of primitive types' is identical to the below test. Why?\n it('with conflicting recursive modifies of primitive types should be possible and report a conflict', function() {\n testRebasing({\n prepare: function(root) {\n },\n op1: function(root) {\n var string1 = PropertyFactory.create('String');\n string1.value = 'test1';\n root.insert('entry', string1);\n },\n op2: function(root) {\n var string2 = PropertyFactory.create('String');\n string2.value = 'test2';\n root.insert('entry', string2);\n },\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(changeSet).to.deep.equal({\n modify: {\n String: {\n entry: {\n oldValue: 'test1',\n value: 'test2',\n },\n },\n },\n });\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('entry');\n expect(conflicts[0].conflictingChange).to.be.equal('test2');\n },\n });\n });\n\n it('with conflicting recursive modifies of enums should be possible and report a conflict', function() {\n testRebasing({\n prepare: function(root) {\n },\n op1: function(root) {\n var enum1 = PropertyFactory.create('autodesk.core:UnitsEnum-1.0.0');\n enum1.value = 1;\n root.insert('entry', enum1);\n },\n op2: function(root) {\n var enum2 = PropertyFactory.create('autodesk.core:UnitsEnum-1.0.0');\n enum2.value = 2;\n root.insert('entry', enum2);\n },\n compareToSequential: false,\n checkResult: function(conflicts, changeSet) {\n expect(changeSet).to.deep.equal({\n modify: {\n 'enum<autodesk.core:UnitsEnum-1.0.0>': {\n entry: {\n oldValue: 1,\n value: 2,\n },\n },\n },\n });\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('entry');\n expect(conflicts[0].conflictingChange).to.be.equal(2);\n },\n });\n });\n\n it('with conflicting inserts in a deep leaf should report a correct conflict', function() {\n testRebasing({\n prepare: function(root) {\n var node = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n root.insert('node', node);\n },\n op1: function(root) {\n var node1 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n root.resolvePath('node').insert('node2', node1);\n },\n op2: function(root) {\n var node2 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n root.resolvePath('node').insert('node2', 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('node.node2');\n },\n });\n });\n });\n\n describe('Compatibility with ChangeSets from spec', function() {\n // These are the ChangeSets from the discussion minutes document\n // after some cleanup, mainly missing parameters were added in inserts and\n // syntax corrections. Additionally, the Vector3 was renamed to autodesk.test:vector3-1.0.0 to avoid\n // conflicts with the inbuilt type\n\n var insertChangeSet1 = {\n insert: {\n 'autodesk.test:point2d-1.0.0': {\n 'myPoint': {\n 'Float32': {\n 'position.x': 122,\n 'position.y': 122,\n 'temperature': 10,\n },\n 'autodesk.test:vector3-1.0.0': {\n 'normal': {\n Float32: {\n 'x': 1,\n 'y': 1,\n 'z': 1,\n },\n },\n },\n 'map<autodesk.test:vector3-1.0.0>': {\n 'neighbours': {\n insert: {\n 'autodesk.test:vector3-1.0.0': {\n 'Point1': {\n Float32: {\n 'x': 1,\n 'y': 1,\n 'z': 1,\n },\n },\n },\n },\n },\n },\n },\n 'd23kjda': {\n Float32: {\n 'position.x': 122,\n 'position.y': 122,\n 'temperature': 11,\n },\n 'autodesk.test:vector3-1.0.0': {\n 'normal': {\n Float32: {\n 'x': 1,\n 'y': 1,\n 'z': 1,\n },\n },\n },\n 'map<autodesk.test:vector3-1.0.0>': {\n 'neighbours': {},\n },\n },\n },\n Float32: {\n 'compression': 0,\n },\n 'map<>': {\n birds: {\n insert: {\n 'autodesk.test:vector3-1.0.0': {\n 'Point1': {\n Float32: {\n 'x': 1,\n 'y': 1,\n 'z': 1,\n },\n },\n },\n },\n },\n horses: {},\n forest: {},\n },\n },\n };\n\n var modifyChangeSet1 = {\n modify: {\n 'autodesk.test:point2d-1.0.0': {\n 'myPoint': {\n 'Float32': {\n 'position.x': 11,\n 'temperature': 31,\n },\n 'autodesk.test:vector3-1.0.0': {\n 'normal': {\n 'Float32': {\n 'x': 0.5,\n },\n },\n },\n },\n },\n },\n };\n\n var modifyChangeSet2 = {\n modify: {\n 'autodesk.test:point2d-1.0.0': {\n 'myPoint': {\n 'map<autodesk.test:vector3-1.0.0>': {\n 'neighbours': {\n insert: {\n 'autodesk.test:vector3-1.0.0': {\n 'Point2': {\n Float32: {\n 'x': 1,\n 'y': 1,\n 'z': 1,\n },\n },\n },\n },\n },\n },\n },\n },\n },\n };\n\n var modifyChangeSet3 = {\n modify: {\n 'autodesk.test:point2d-1.0.0': {\n 'myPoint': {\n 'map<autodesk.test:vector3-1.0.0>': {\n 'neighbours': {\n modify: {\n 'autodesk.test:vector3-1.0.0': {\n 'Point2': {\n Float32: {\n 'x': 2,\n },\n },\n },\n },\n },\n },\n },\n },\n },\n };\n\n var removePreparationChangeSet1 = {\n insert: {\n 'autodesk.test:SceneObject-1.0.0': {\n 'dasdm23': {\n 'String': {\n 'revitId': '#23213',\n 'name': 'Door',\n },\n },\n },\n },\n };\n\n var removePreparationChangeSet2 = {\n modify: {\n 'autodesk.test:SceneObject-1.0.0': {\n 'dasdm23': {\n insert: {\n 'autodesk.test:SceneObject-1.0.0': {\n 'as2398d': {\n 'String': {\n 'revitId': '#2231',\n 'name': 'Room',\n },\n },\n },\n },\n },\n },\n },\n };\n\n var removeChangeSet1 = {\n remove: [\n 'dasdm23',\n ],\n };\n\n var removeChangeSet2 = {\n modify: {\n 'autodesk.test:SceneObject-1.0.0': {\n 'dasdm23': {\n remove: [\n 'as2398d',\n ],\n },\n },\n },\n };\n\n it('should be possible to insert properties with the example from the spec', function() {\n var rootProperty = PropertyFactory.create('NodeProperty');\n rootProperty.applyChangeSet(insertChangeSet1);\n\n // Make sure all properties are as expected\n expect(rootProperty.getDynamicIds().length).to.equal(6);\n expect(rootProperty._getDynamicChildrenReadOnly()).to.have.all.keys('birds', 'horses', 'forest',\n 'compression', 'myPoint', 'd23kjda');\n expect(rootProperty._properties.compression.value).to.equal(0);\n assert(rootProperty._properties.birds instanceof MapProperty);\n assert(rootProperty._properties.forest instanceof MapProperty);\n assert(rootProperty._properties.horses instanceof MapProperty);\n\n expect(rootProperty.resolvePath('myPoint.position.x').value).to.equal(122);\n expect(rootProperty.resolvePath('myPoint.position.y').value).to.equal(122);\n expect(rootProperty.resolvePath('myPoint.temperature').value).to.equal(10);\n\n expect(rootProperty.resolvePath('myPoint.normal.x').value).to.equal(1);\n expect(rootProperty.resolvePath('myPoint.normal.y').value).to.equal(1);\n expect(rootProperty.resolvePath('myPoint.normal.z').value).to.equal(1);\n\n var neighbours = rootProperty.resolvePath('myPoint.neighbours');\n assert(neighbours.has('Point1'));\n expect(neighbours.get('Point1')._properties.x.value).to.equal(1);\n expect(neighbours.get('Point1')._properties.y.value).to.equal(1);\n expect(neighbours.get('Point1')._properties.z.value).to.equal(1);\n\n expect(rootProperty.resolvePath('d23kjda.position.x').value).to.equal(122);\n expect(rootProperty.resolvePath('d23kjda.position.y').value).to.equal(122);\n expect(rootProperty.resolvePath('d23kjda.temperature').value).to.equal(11);\n\n expect(rootProperty.resolvePath('d23kjda.normal.x').value).to.equal(1);\n expect(rootProperty.resolvePath('d23kjda.normal.y').value).to.equal(1);\n expect(rootProperty.resolvePath('d23kjda.normal.z').value).to.equal(1);\n\n // Make sure serialization gives the same result as the initial ChangeSet\n expect(rootProperty.serialize({ 'dirtyOnly': false })).to.deep.equal(insertChangeSet1);\n expect(rootProperty.serialize({ 'dirtyOnly': true })).to.deep.equal(insertChangeSet1);\n });\n\n it('should be possible to use the first modify ChangeSet from the spec', function() {\n // Prepare the initial state\n var rootProperty = PropertyFactory.create('NodeProperty');\n rootProperty.applyChangeSet(insertChangeSet1);\n\n // Clean dirtiness\n rootProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n // Apply the modify changeSet\n rootProperty.applyChangeSet(modifyChangeSet1);\n expect(rootProperty.resolvePath('myPoint.position.x').value).to.equal(11);\n expect(rootProperty.resolvePath('myPoint.normal.x').value).to.equal(0.5);\n expect(rootProperty.resolvePath('myPoint.temperature').value).to.equal(31);\n\n // Make sure the serialization gives the expected result\n expect(rootProperty.serialize({ 'dirtyOnly': true })).to.deep.equal(modifyChangeSet1);\n });\n\n it('should be possible to use the second modify ChangeSet from the spec', function() {\n // Prepare the initial state\n var rootProperty = PropertyFactory.create('NodeProperty');\n rootProperty.applyChangeSet(insertChangeSet1);\n\n // Clean dirtiness\n rootProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n // Apply the modify changeSet\n rootProperty.applyChangeSet(modifyChangeSet2);\n var point2 = rootProperty.resolvePath('myPoint.neighbours').get('Point2');\n expect(point2._properties.x.value).to.equal(1);\n expect(point2._properties.y.value).to.equal(1);\n expect(point2._properties.z.value).to.equal(1);\n\n // Make sure the serialization gives the expected result\n expect(rootProperty.serialize({ 'dirtyOnly': true })).to.deep.equal(modifyChangeSet2);\n });\n\n it('should be possible to use the third modify ChangeSet from the spec', function() {\n // Prepare the initial state\n var rootProperty = PropertyFactory.create('NodeProperty');\n rootProperty.applyChangeSet(insertChangeSet1);\n rootProperty.applyChangeSet(modifyChangeSet2);\n\n // Clean dirtiness\n rootProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n // Apply the modify changeSet\n rootProperty.applyChangeSet(modifyChangeSet3);\n var point2 = rootProperty.resolvePath('myPoint.neighbours').get('Point2');\n expect(point2._properties.x.value).to.equal(2);\n\n // Make sure the serialization gives the expected result\n expect(rootProperty.serialize({ 'dirtyOnly': true })).to.deep.equal(modifyChangeSet3);\n });\n\n it('should be possible to use the first remove ChangeSet from the spec', function() {\n // Prepare the initial state\n var rootProperty = PropertyFactory.create('NodeProperty');\n rootProperty.applyChangeSet(removePreparationChangeSet1);\n rootProperty.applyChangeSet(removePreparationChangeSet2);\n\n // Clean dirtiness\n rootProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n // Apply the modify changeSet\n expect(rootProperty.getDynamicIds().length).to.be.equal(1);\n rootProperty.applyChangeSet(removeChangeSet1);\n expect(rootProperty.getDynamicIds().length).to.be.equal(0);\n\n // Make sure the serialization gives the expected result\n expect(rootProperty.serialize({ 'dirtyOnly': true })).to.deep.equal(removeChangeSet1);\n });\n\n it('should be possible to use the first remove ChangeSet from the spec', function() {\n // Prepare the initial state\n var rootProperty = PropertyFactory.create('NodeProperty');\n rootProperty.applyChangeSet(removePreparationChangeSet1);\n rootProperty.applyChangeSet(removePreparationChangeSet2);\n\n // Clean dirtiness\n rootProperty.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE);\n\n // Apply the remove changeSet\n expect(rootProperty.resolvePath('dasdm23').getDynamicIds().length).to.be.equal(1);\n rootProperty.applyChangeSet(removeChangeSet2);\n expect(rootProperty.getDynamicIds().length).to.be.equal(1);\n expect(rootProperty.resolvePath('dasdm23').getDynamicIds().length).to.be.equal(0);\n\n // Make sure the serialization gives the expected result\n expect(rootProperty.serialize({ 'dirtyOnly': true })).to.deep.equal(removeChangeSet2);\n });\n });\n\n describe('Make sure struct changes and path updates are signaled correctly', function() {\n it('Should be possible to access dynamic nodes via propertis and paths', function() {\n var root = PropertyFactory.create('NodeProperty');\n var newRoot = PropertyFactory.create('NodeProperty');\n\n // Create a hierarchy of nodes\n root.insert('child1', PropertyFactory.create('NodeProperty'));\n root.insert('child2', PropertyFactory.create('NodeProperty'));\n\n expect(root._properties.child1.position).to.be.undefined;\n expect(root.resolvePath('child1.position')).to.be.undefined;\n\n // Crate a dynamic object via a NodeProperty\n var positionProperty = PropertyFactory.create('NodeProperty');\n root._properties.child1.propertyNode.insert('position', positionProperty);\n root._properties.child1.position.propertyNode.insert('x', PropertyFactory.create('Float32'));\n root._properties.child1.position.propertyNode.insert('y', PropertyFactory.create('Float32'));\n root._properties.child1.position.propertyNode.insert('z', PropertyFactory.create('Float32'));\n\n // Make sure paths resolve correctly\n expect(root._properties.child1.position).not.to.be.undefined;\n expect(root._properties.child1.position.propertyNode).to.be.an.instanceof(NodeProperty);\n expect(root.resolvePath('child1.position')).to.be.instanceof(NodeProperty);\n\n // assign values via the properties object (for NodeProperty)\n root._properties.child1.position.x.value = 1;\n root._properties.child1.position.y.value = 2;\n root._properties.child1.position.z.value = 3;\n\n // assign values via resolve path\n root.resolvePath('child1.position.x').value = 3;\n root.resolvePath('child1.position.y').value = 2;\n root.resolvePath('child1.position.z').value = 1;\n\n // Check values\n expect(root._properties.child1.position.x.value).to.equal(3);\n expect(root._properties.child1.position.y.value).to.equal(2);\n expect(root._properties.child1.position.z.value).to.equal(1);\n\n // Crate a dynamic object via a template\n var vec3Property = PropertyFactory.create('autodesk.test:vector3-1.0.0');\n root._properties.child1.propertyNode.insert('vector', vec3Property);\n\n // Make sure paths resolve correctly\n expect(root._properties.child1.vector).not.to.be.undefined;\n expect(root._properties.child1.vector.propertyNode).to.be.an.instanceof(BaseProperty);\n expect(root.resolvePath('child1.vector')).to.be.instanceof(BaseProperty);\n\n root._properties.child1.vector.x.value = 1;\n root._properties.child1.vector.y.value = 2;\n root._properties.child1.vector.z.value = 3;\n\n // assign values via resolve path\n root.resolvePath('child1.vector.x').value = 3;\n root.resolvePath('child1.vector.y').value = 2;\n root.resolvePath('child1.vector.z').value = 1;\n\n // Check values\n expect(root._properties.child1.vector.x.value).to.equal(3);\n expect(root._properties.child1.vector.y.value).to.equal(2);\n expect(root._properties.child1.vector.z.value).to.equal(1);\n\n // Check roots\n expect(positionProperty.getRoot()).to.equal(root);\n expect(positionProperty._properties.x.getRoot()).to.equal(root);\n expect(vec3Property.getRoot()).to.equal(root);\n expect(vec3Property._properties.x.getRoot()).to.equal(root);\n\n // Check paths\n expect(positionProperty.getAbsolutePath()).to.equal('/child1.position');\n expect(positionProperty._properties.x.getAbsolutePath()).to.equal('/child1.position.x');\n expect(vec3Property.getAbsolutePath()).to.equal('/child1.vector');\n expect(vec3Property._properties.x.getAbsolutePath()).to.equal('/child1.vector.x');\n\n // Check deletion\n root._properties.child1.propertyNode.remove('position');\n root._properties.child1.propertyNode.remove('vector');\n\n expect(root._properties.child1.position).to.be.undefined;\n expect(root.resolvePath('child1.position')).to.be.undefined;\n\n expect(root._properties.child1.vector).to.be.undefined;\n expect(root.resolvePath('child1.vector')).to.be.undefined;\n\n // Check roots\n expect(positionProperty.getRoot()).to.equal(positionProperty);\n expect(positionProperty._properties.x.getRoot()).to.equal(positionProperty);\n expect(vec3Property.getRoot()).to.equal(vec3Property);\n expect(vec3Property._properties.x.getRoot()).to.equal(vec3Property);\n\n // Check paths\n expect(positionProperty.getAbsolutePath()).to.equal('/');\n expect(positionProperty._properties.x.getAbsolutePath()).to.equal('/x');\n expect(vec3Property.getAbsolutePath()).to.equal('/');\n expect(vec3Property._properties.x.getAbsolutePath()).to.equal('/x');\n\n // Check addition to a new property root under a different key\n newRoot.insert('newPosition', positionProperty);\n newRoot.insert('newvector', vec3Property);\n\n // Check roots\n expect(positionProperty.getRoot()).to.equal(newRoot);\n expect(positionProperty._properties.x.getRoot()).to.equal(newRoot);\n expect(vec3Property.getRoot()).to.equal(newRoot);\n expect(vec3Property._properties.x.getRoot()).to.equal(newRoot);\n\n // Check paths\n expect(positionProperty.getAbsolutePath()).to.equal('/newPosition');\n expect(positionProperty._properties.x.getAbsolutePath()).to.equal('/newPosition.x');\n expect(vec3Property.getAbsolutePath()).to.equal('/newvector');\n expect(vec3Property._properties.x.getAbsolutePath()).to.equal('/newvector.x');\n\n // Check keys with characters that require quotations\n newRoot.remove('newPosition');\n newRoot.remove('newvector');\n newRoot.insert('new\"Position', positionProperty);\n newRoot.insert('new.Vector', vec3Property);\n\n // Check paths\n expect(positionProperty.getAbsolutePath()).to.equal('/\"new\\\\\"Position\"');\n expect(positionProperty._properties.x.getAbsolutePath()).to.equal('/\"new\\\\\"Position\".x');\n expect(newRoot.resolvePath('\"new\\\\\"Position\".x')).to.equal(positionProperty._properties.x);\n expect(vec3Property.getAbsolutePath()).to.equal('/\"new.Vector\"');\n expect(vec3Property._properties.x.getAbsolutePath()).to.equal('/\"new.Vector\".x');\n expect(newRoot.resolvePath('\"new.Vector\".x')).to.equal(vec3Property._properties.x);\n\n newRoot.remove('new\"Position');\n\n // Path resolution for named properties should return the correct path\n var namedProperty = PropertyFactory.create('NamedProperty');\n var nodeProperty = PropertyFactory.create('NodeProperty');\n nodeProperty.insert(namedProperty);\n expect(namedProperty.getAbsolutePath()).to.equal('/' + namedProperty.getGuid());\n expect(nodeProperty.resolvePath(namedProperty.getGuid())).to.equal(namedProperty);\n\n // Try multiple levels\n var leaf = PropertyFactory.create('NodeProperty');\n expect(leaf.resolvePath('/')).to.equal(leaf);\n var map1 = PropertyFactory.create('NodeProperty');\n map1.insert('entry', leaf);\n expect(leaf.resolvePath('/')).to.equal(map1);\n\n var map2 = PropertyFactory.create('NodeProperty');\n map2.insert('entry', map1);\n expect(leaf.resolvePath('/')).to.equal(map2);\n\n var map3 = PropertyFactory.create('NodeProperty');\n map3.insert('entry', map2);\n expect(leaf.resolvePath('/')).to.equal(map3);\n });\n });\n\n it('should correctly clean templates inheriting from NamedNodeProperty', function() {\n var property = PropertyFactory.create('autodesk.tests:MixedNamedNodeProperty-1.0.0');\n var childProperty = property.get('stringProperty');\n childProperty.value = 'changed';\n expect(childProperty.isDirty()).to.be.true;\n property.cleanDirty();\n expect(property.isDirty()).to.be.false;\n expect(childProperty.isDirty()).to.be.false;\n });\n\n describe('Make sure to have appropriate types for ids given to nodeProperty when inserting', function() {\n it('should be possible for the id passed to be a string', function(done) {\n var node1 = PropertyFactory.create('NodeProperty');\n var node2 = PropertyFactory.create('autodesk.tests:MixedNamedNodeProperty-1.0.0');\n var node3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n node1.insert('node', node3);\n node3.insert('node1', node2);\n node2._properties.stringProperty.value = 'test';\n expect(node1.resolvePath('node.node1.stringProperty').value).to.equal('test');\n expect(node3.resolvePath('node1.stringProperty').value).to.equal('test');\n done();\n });\n\n it('should be possible for the id passed to be a number', function(done) {\n var node1 = PropertyFactory.create('NodeProperty');\n var node2 = PropertyFactory.create('autodesk.tests:MixedNamedNodeProperty-1.0.0');\n var node3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n node1.insert('node', node3);\n node3.insert(1122, node2);\n node2._properties.stringProperty.value = 'test';\n expect(node1.resolvePath('node.1122.stringProperty').value).to.equal('test');\n expect(node3.resolvePath('1122.stringProperty').value).to.equal('test');\n done();\n });\n\n it('should throw an error when the id passed is an object', function(done) {\n var node1 = PropertyFactory.create('NodeProperty');\n var node2 = PropertyFactory.create('autodesk.tests:MixedNamedNodeProperty-1.0.0');\n var node3 = PropertyFactory.create('autodesk.tests:MixedNodeTestProperty-1.0.0');\n\n node1.insert('node', node3);\n try {\n node3.insert({ foo: 'bar' }, node2);\n node2._properties.stringProperty.value = 'test';\n } catch (e) {\n done();\n }\n });\n });\n\n describe('_coveredByPaths', function() {\n this.timeout(500);\n let PathHelper, getPathCoverageSpy, paths, prop, propPath;\n\n before(function() {\n PathHelper = require('@fluid-experimental/property-changeset').PathHelper;\n });\n\n beforeEach(function() {\n getPathCoverageSpy = sinon.spy(PathHelper, 'getPathCoverage');\n });\n\n afterEach(function() {\n PathHelper.getPathCoverage.restore();\n });\n\n after(function() {\n });\n\n it('should succeed if property is included in a path 1', function() {\n paths = ['a.b'];\n prop = PropertyFactory.create('String');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if property is included in a path 2', function() {\n paths = ['a.b'];\n prop = PropertyFactory.create('Int32');\n propPath = 'a.b.c';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if property is a primitive collection included in a path', function() {\n paths = ['a.b'];\n prop = PropertyFactory.create('Int32', 'array');\n propPath = 'a.b.c.d';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should fail if property is not included in any path 1', function() {\n paths = ['a.b'];\n prop = PropertyFactory.create('Bool');\n propPath = 'b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.false;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should fail if property is not included in any path 2', function() {\n paths = ['a.b'];\n prop = PropertyFactory.create('Float32');\n propPath = 'b.f.g';\n expect(prop._coveredByPaths(propPath, paths)).to.be.false;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should fail if property is not included in any path but have common root 1', function() {\n paths = ['a.b'];\n prop = PropertyFactory.create('String', 'map');\n propPath = 'a.h';\n expect(prop._coveredByPaths(propPath, paths)).to.be.false;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should fail if property is not included in any path but have common root 2', function() {\n paths = ['a.b'];\n prop = PropertyFactory.create('NodeProperty');\n propPath = 'a.i.j';\n expect(prop._coveredByPaths(propPath, paths)).to.be.false;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if path goes through a primitive property 1', function() {\n paths = ['a.b.c', 'a.b.d', 'z'];\n prop = PropertyFactory.create('String');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if path goes through a primitive property 2', function() {\n paths = ['a.b.c', 'a.b.d', 'z'];\n prop = PropertyFactory.create('Int32');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if path goes through a primitive collection property 1', function() {\n paths = ['a.b.c', 'z', 'a.b.d'];\n prop = PropertyFactory.create('Int32', 'map');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if path goes through a primitive collection property 2', function() {\n paths = ['z', 'a.b.c', 'a.b.d'];\n prop = PropertyFactory.create('String', 'array');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if path goes through a non-primitive collection property 1', function() {\n paths = ['a.b.c', 'z', 'a.b.d'];\n prop = PropertyFactory.create('NodeProperty', 'map');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if path goes through a non-primitive collection property 2', function() {\n paths = ['z', 'a.b.c', 'a.b.d'];\n prop = PropertyFactory.create('NamedProperty', 'set');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should succeed if property is included in multiple paths 1', function() {\n paths = ['a.b.c', 'a.b.d', 'z'];\n prop = PropertyFactory.create('NodeProperty');\n prop.insert('c', PropertyFactory.create('String'));\n prop.insert('d', PropertyFactory.create('String'));\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(3);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.c', ['a.b.c', 'a.b.d'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d', ['a.b.c', 'a.b.d'])).to.be.true;\n });\n\n it('should succeed if property is included in multiple paths 2', function() {\n paths = ['a.b.c', 'z', 'a.b.d'];\n prop = PropertyFactory.create('NodeProperty');\n let c = PropertyFactory.create('NodeProperty');\n prop.insert('c', c);\n c.insert('f', PropertyFactory.create('String'));\n c.insert('g', PropertyFactory.create('String'));\n let d = PropertyFactory.create('String', 'map');\n prop.insert('d', d);\n d.insert('h', 'h');\n d.insert('i', 'i');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(3);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.c', ['a.b.c', 'a.b.d'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d', ['a.b.c', 'a.b.d'])).to.be.true;\n });\n\n it('should succeed if property is included in multiple paths 3', function() {\n paths = ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i', 'a.z'];\n prop = PropertyFactory.create('NodeProperty');\n let c = PropertyFactory.create('NodeProperty');\n prop.insert('c', c);\n c.insert('f', PropertyFactory.create('String'));\n c.insert('g', PropertyFactory.create('String'));\n let d = PropertyFactory.create('NodeProperty');\n prop.insert('d', d);\n d.insert('h', PropertyFactory.create('String'));\n d.insert('i', PropertyFactory.create('String'));\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(5);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.c', ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d', ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d.h', ['a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d.i', ['a.b.d.h', 'a.b.d.i'])).to.be.true;\n });\n\n it('should succeed if property is included in multiple paths 4', function() {\n paths = ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i', 'a.z'];\n prop = PropertyFactory.create('NodeProperty');\n let b = PropertyFactory.create('NodeProperty');\n prop.insert('b', b);\n let c = PropertyFactory.create('NodeProperty');\n b.insert('c', c);\n c.insert('f', PropertyFactory.create('String'));\n c.insert('g', PropertyFactory.create('String'));\n let d = PropertyFactory.create('NodeProperty');\n b.insert('d', d);\n d.insert('h', PropertyFactory.create('String'));\n d.insert('i', PropertyFactory.create('String'));\n propPath = 'a';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(6);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b', paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.c', ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d', ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d.h', ['a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d.i', ['a.b.d.h', 'a.b.d.i'])).to.be.true;\n });\n\n it('should succeed if property is included in multiple paths through map 1', function() {\n paths = ['a.b.c', 'a.b.d.z', 'z'];\n prop = PropertyFactory.create('String', 'map');\n prop.insert('c', 'c');\n prop.insert('d', 'd');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(3);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.c', ['a.b.c', 'a.b.d.z'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d', ['a.b.c', 'a.b.d.z'])).to.be.true;\n });\n\n it('should succeed if property is included in multiple paths through map 2', function() {\n paths = ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i', 'a.z'];\n prop = PropertyFactory.create('NodeProperty');\n let c = PropertyFactory.create('NodeProperty');\n let d = PropertyFactory.create('String', 'map');\n prop.insert('c', c);\n c.insert('f', PropertyFactory.create('String'));\n c.insert('g', PropertyFactory.create('String'));\n prop.insert('d', d);\n d.insert('h', 'h');\n d.insert('i', 'i');\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.callCount).to.equal(5);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.c', ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d', ['a.b.c.f', 'a.b.c', 'a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d.h', ['a.b.d.h', 'a.b.d.i'])).to.be.true;\n expect(getPathCoverageSpy.calledWith('a.b.d.i', ['a.b.d.h', 'a.b.d.i'])).to.be.true;\n });\n\n it('should fail if property is not completely included in multiple paths 1', function() {\n paths = ['a.b.c', 'a.b.d', 'z'];\n prop = PropertyFactory.create('NodeProperty');\n prop.insert('c', PropertyFactory.create('String'));\n prop.insert('e', PropertyFactory.create('String'));\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.false;\n expect(getPathCoverageSpy.callCount).to.be.above(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n\n it('should fail if property is not completely included in multiple paths 2', function() {\n paths = ['z', 'a.b.d', 'a.b.c'];\n prop = PropertyFactory.create('NodeProperty');\n prop.insert('e', PropertyFactory.create('String'));\n prop.insert('c', PropertyFactory.create('String'));\n propPath = 'a.b';\n expect(prop._coveredByPaths(propPath, paths)).to.be.false;\n expect(getPathCoverageSpy.callCount).to.be.above(1);\n expect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n });\n });\n});\n"]}
|