@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":"propertyFactory.spec.js","sourceRoot":"","sources":["../../src/test/propertyFactory.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 sinon */\n/* eslint-disable no-unused-expressions */\n\nconst { PropertyFactory } = require('..');\nconst { MSG } = require('@fluid-experimental/property-common').constants;\nconst { generateGUID } = require('@fluid-experimental/property-common').GuidUtils;\nconst { StringProperty } = require('../properties/stringProperty');\n\ndescribe('PropertyFactory', function () {\n beforeEach(() => {\n PropertyFactory._clear();\n });\n\n let SimplePoint = {\n typeid: 'SimpleTest:PointID-1.0.0',\n properties: [\n {\n id: 'position',\n properties: [\n {\n id: 'x',\n typeid: 'Float32'\n },\n {\n id: 'y',\n typeid: 'Float32'\n },\n {\n id: 'z',\n typeid: 'Float32'\n }\n ]\n },\n {\n id: 'normal',\n typeid: 'Float32',\n context: 'array',\n size: 3\n }\n ]\n };\n\n it('is not a function.', function (done) {\n expect(PropertyFactory).to.not.be.a('function');\n expect(PropertyFactory).to.be.an('object');\n done();\n });\n\n it('should validate a simple file', function () {\n var testFile1 = require('./validation/goodPointId');\n var result = PropertyFactory.validate(testFile1);\n expect(result.isValid).to.equal(true);\n });\n\n it('should fail an invalid file', function () {\n var testFile1 = require('./validation/badPrimitiveTypeid');\n var result = PropertyFactory.validate(testFile1);\n expect(result.isValid).to.equal(false);\n expect(result.errors.length).to.be.greaterThan(0);\n expect(result.unresolvedTypes.length).to.equal(1);\n });\n\n it('should create and initialize a property set', function () {\n PropertyFactory.register(SimplePoint);\n var goodPointTest = PropertyFactory.create('SimpleTest:PointID-1.0.0');\n expect(goodPointTest.resolvePath('normal')._dataArrayRef._buffer.length).to.equal(3);\n\n var goodPoint = PropertyFactory.create('SimpleTest:PointID-1.0.0', null, {\n position: {\n x: 0.0,\n y: 1.0,\n z: 2.0\n },\n normal: [1.23, 2.3399999141693115, 3.45]\n });\n\n expect(goodPoint.resolvePath('normal').get(1)).to.equal(2.3399999141693115);\n });\n\n it('should throw on unknown Template', function () {\n var insertUnknownPropertyChangeSet = {\n insert: {\n 'UnknownProperty': {\n 'test': {\n String: {\n 'unknownStringProperty': 'Hi There!'\n }\n }\n }\n }\n };\n var root = PropertyFactory.create('NodeProperty');\n expect(\n function () {\n root.deserialize(insertUnknownPropertyChangeSet);\n }).to.throw();\n });\n\n it('should throw when trying to create with undefined as typeid', function () {\n var creationFunction = function () {\n PropertyFactory.create(undefined);\n };\n expect(creationFunction).to.throw(MSG.UNKNOWN_TYPEID_SPECIFIED + 'undefined');\n });\n\n it('should throw when trying to create with a number as typeid', function () {\n var creationFunction = function () {\n PropertyFactory.create(1);\n };\n expect(creationFunction).to.throw(MSG.UNKNOWN_TYPEID_SPECIFIED + '1');\n });\n\n it('should support the creation of a polymorphic collection', function () {\n var testSet = {\n typeid: 'autodesk.examples:test.set-1.0.0',\n inherits: 'NamedProperty'\n };\n PropertyFactory.register(testSet);\n\n var testTemplate = {\n typeid: 'autodesk.examples:polymorphic.collection.test-1.0.0',\n properties: [\n { id: 'testMap', context: 'map' },\n { id: 'testSet', typeid: 'autodesk.examples:test.set-1.0.0', context: 'set' }\n // TODO: add array as soon as polymorphic arrays are supported: {id: 'testArray', context:'array' }\n ]\n };\n\n PropertyFactory._reregister(testTemplate);\n var instance = PropertyFactory.create('autodesk.examples:polymorphic.collection.test-1.0.0');\n\n expect(instance._properties.testMap).to.exist;\n expect(instance._properties.testMap.getContext()).to.equal('map');\n expect(instance._properties.testMap.getTypeid()).to.equal('BaseProperty');\n\n expect(instance._properties.testSet).to.exist;\n expect(instance._properties.testSet.getContext()).to.equal('set');\n expect(PropertyFactory.inheritsFrom(instance._properties.testSet.getTypeid(), 'NamedProperty')).to.equal(true);\n });\n\n it('should return correct template based on typeid', function () {\n PropertyFactory.register(SimplePoint);\n var returnedTemplate = JSON.parse(JSON.stringify(PropertyFactory.getTemplate(SimplePoint.typeid)));\n if (!SimplePoint.annotation) {\n delete returnedTemplate.annotation;\n }\n if (!SimplePoint.length) {\n delete returnedTemplate.length;\n }\n delete returnedTemplate._serializedParams;\n\n expect(returnedTemplate).to.deep.equal(SimplePoint);\n expect(PropertyFactory.getTemplate('Adsk.Library:Colors.ColorPalette-1.0.0')).to.be.undefined;\n });\n\n describe('Inheritance', function () {\n beforeEach(function () {\n PropertyFactory._clear();\n\n var Shape = {\n typeid: 'SimpleTest:Shape-1.0.0',\n properties: [{\n id: 'props', properties: [\n { id: 'x', typeid: 'Float32' },\n { id: 'y', typeid: 'Float32' },\n {\n id: 'size', properties: [\n { id: 'width', typeid: 'Float32' },\n { id: 'height', typeid: 'Float32' },\n {\n id: 'border', properties: [\n { id: 'weight', typeid: 'Int32' }]\n }]\n }]\n }]\n };\n PropertyFactory.register(Shape);\n\n var Color = {\n typeid: 'SimpleTest:Color-1.0.0',\n properties: [\n { id: 'stroke', typeid: 'String' },\n {\n id: 'fill', properties: [\n { id: 'rgb', typeid: 'String' }]\n }]\n };\n PropertyFactory.register(Color);\n\n var EntryWithOverriddenDefaults = {\n typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'string', typeid: 'String', value: 'entry_string' }\n ]\n };\n PropertyFactory.register(EntryWithOverriddenDefaults);\n\n var EntryWithOverriddenPolyDefaults = {\n typeid: 'SimpleTest:EntryWithOverriddenPolyDefaults-1.0.0',\n inherits: ['SimpleTest:EntryWithOverriddenDefaults-1.0.0'],\n properties: [\n { id: 'string', typeid: 'String', value: 'entry_string' }\n ]\n };\n PropertyFactory.register(EntryWithOverriddenPolyDefaults);\n\n var DynamicWithOverriddenDefaults = {\n typeid: 'SimpleTest:DynamicWithOverriddenDefaults-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32' },\n {\n id: 'dynamic', properties: [\n { id: 'dynamic_string', typeid: 'String' }\n ]\n }\n ]\n };\n PropertyFactory.register(DynamicWithOverriddenDefaults);\n });\n\n it('should allow the creation of an inherited type', function () {\n var Square = {\n typeid: 'SimpleTest:Square-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0'],\n properties: [\n { id: 'area', typeid: 'Float32' }\n ]\n };\n\n PropertyFactory.register(Square);\n\n var square = PropertyFactory.create('SimpleTest:Square-1.0.0');\n\n expect(square._getChildrenCount()).to.equal(2);\n expect(square.get('props')).to.exist;\n expect(square.get('area')).to.exist;\n });\n\n it('should inherit constants', function () {\n var ShapeWithConstant = {\n typeid: 'SimpleTest:ShapeWithConstant-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0'],\n constants: [\n { id: 'originX', typeid: 'Int8', value: 10 }\n ]\n };\n\n var SquareWithConstant = {\n typeid: 'SimpleTest:SquareWithConstant-1.0.0',\n inherits: ['SimpleTest:ShapeWithConstant-1.0.0'],\n constants: [\n { id: 'originY', typeid: 'Int8', value: 20 }\n ]\n };\n\n PropertyFactory.register(ShapeWithConstant);\n PropertyFactory.register(SquareWithConstant);\n\n var square = PropertyFactory.create('SimpleTest:ShapeWithConstant-1.0.0');\n var square = PropertyFactory.create('SimpleTest:SquareWithConstant-1.0.0');\n\n expect(square._getChildrenCount()).to.equal(3);\n expect(square.get('props')).to.exist;\n expect(square.get('originX')).to.exist;\n expect(square.get('originY')).to.exist;\n\n expect(square.get('originX').getValue()).to.equal(10);\n expect(square.get('originY').getValue()).to.equal(20);\n });\n\n it('Will complete constants definition from inherited template', function () {\n var template1 = {\n typeid: 'consttest:template-1.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'hello',\n annotation: { description: 'The first constant.' }\n },\n {\n id: 'const2',\n typeid: 'String',\n value: ['hello'],\n context: 'array',\n annotation: { description: 'The second constant.' }\n }\n ]\n };\n\n var testedTemplate = {\n typeid: 'consttest:template-2.0.0',\n inherits: 'consttest:template-1.0.0',\n constants: [\n {\n id: 'const1',\n value: 'hello2'\n },\n {\n id: 'const2',\n value: ['hello2']\n }\n ]\n };\n\n PropertyFactory.register(testedTemplate);\n PropertyFactory.register(template1);\n\n var tested = PropertyFactory.create('consttest:template-2.0.0');\n expect(tested._getChildrenCount()).to.equal(2);\n expect(tested.get('const1')).to.exist;\n expect(tested.get('const2')).to.exist;\n expect(tested.get('const1').getValue()).to.equal('hello2');\n expect(tested.get('const2').getValues()).to.deep.equal(['hello2']);\n });\n\n it('Will throw because typeid is still missing at creation', function () {\n var template1 = {\n typeid: 'consttest2:template-1.0.0',\n constants: [\n {\n id: 'const2',\n typeid: 'String',\n value: 'hello',\n annotation: { description: 'The first constant.' }\n }\n ]\n };\n\n var testedTemplate = {\n typeid: 'consttest2:template-2.0.0',\n inherits: 'consttest2:template-1.0.0',\n constants: [\n {\n id: 'const1',\n value: 'hello2'\n }\n ]\n };\n\n PropertyFactory.register(template1);\n PropertyFactory.register(testedTemplate);\n\n try {\n PropertyFactory.create('consttest2:template-2.0.0');\n } catch (error) {\n expect(error.message).to.include(\n 'PF-043: Field \"typeid\" is required.' +\n ' It is the \"typeid\" of the resulting PropertySets Template.const1.typeid'\n );\n }\n });\n\n it('Will throw because of a type mismatch when creating template', function () {\n var template1 = {\n typeid: 'consttest3:template-1.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'hello',\n annotation: { description: 'The first constant.' }\n }\n ]\n };\n\n var template2 = {\n typeid: 'consttest3:template-2.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'Uint8',\n value: 3\n }\n ]\n };\n\n var testedTemplate = {\n typeid: 'consttest3:template-3.0.0',\n inherits: ['consttest3:template-2.0.0', 'consttest3:template-1.0.0'],\n constants: [\n {\n id: 'const1',\n value: 'hello2'\n }\n ]\n };\n\n PropertyFactory.register(template2);\n PropertyFactory.register(template1);\n PropertyFactory.register(testedTemplate);\n\n try {\n PropertyFactory.create('consttest3:template-3.0.0');\n } catch (error) {\n expect(error.message).to.include(\n 'PF-001: Id already exists: const1'\n );\n }\n });\n\n it('Will fail if inheriting constants with the same id from multiple templates', function () {\n var template1 = {\n typeid: 'consttest4:template-1.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'hello'\n },\n {\n id: 'const2',\n typeid: 'Uint8',\n value: 5\n }\n ]\n };\n\n var template2 = {\n typeid: 'consttest4:template-2.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'bye',\n annotation: { description: 'The first constant.' }\n }\n ]\n };\n\n var testedTemplate = {\n typeid: 'consttest4:template-3.0.0',\n inherits: ['consttest4:template-1.0.0', 'consttest4:template-2.0.0'],\n constants: [\n {\n id: 'const1',\n value: 'hello2'\n },\n {\n id: 'const2',\n value: 14\n }\n ]\n };\n\n PropertyFactory.register(testedTemplate);\n PropertyFactory.register(template1);\n PropertyFactory.register(template2);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'consttest4:template-3.0.0'))\n .to.throw(MSG.OVERWRITING_ID + 'const1');\n });\n\n it('Will allow to register the same inherited template again', function () {\n var template1 = {\n typeid: 'consttest5:template-1.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'hello',\n annotation: { description: 'The first constant.' }\n }\n ]\n };\n\n var testedTemplate = {\n typeid: 'consttest5:template-2.0.0',\n inherits: 'consttest5:template-1.0.0',\n constants: [\n {\n id: 'const1',\n value: 'hello2'\n }\n ]\n };\n\n PropertyFactory.register(template1);\n PropertyFactory.register(testedTemplate);\n PropertyFactory.register(testedTemplate);\n });\n\n it('Will not allow to register a different template under the same id', function () {\n var template1 = {\n typeid: 'consttest6:template-1.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'hello',\n annotation: { description: 'The first constant.' }\n }\n ]\n };\n\n var testedTemplate = {\n typeid: 'consttest6:template-2.0.0',\n inherits: 'consttest6:template-1.0.0',\n constants: [\n {\n id: 'const1',\n value: 'hello2'\n }\n ]\n };\n\n var testedTemplate2 = {\n typeid: 'consttest6:template-2.0.0',\n inherits: 'consttest6:template-1.0.0',\n constants: [\n {\n id: 'const1',\n value: 'hello3'\n }\n ]\n };\n\n try {\n PropertyFactory.register(template1);\n PropertyFactory.register(testedTemplate);\n PropertyFactory.register(testedTemplate2);\n throw new Error('Should have failed');\n } catch (error) {\n expect(error.message).to.include(\n 'PF-004: Template structures do not match for typeid: consttest6:template-2.0.0'\n );\n }\n });\n\n it('Wont register if constant id is missing', function () {\n var template1 = {\n typeid: 'consttest7:template-1.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'hello',\n annotation: { description: 'The first constant.' }\n }\n ]\n };\n\n var testedTemplate = {\n typeid: 'consttest7:template-2.0.0',\n inherits: 'consttest7:template-1.0.0',\n constants: [\n {\n value: 'hello2'\n }\n ]\n };\n\n try {\n PropertyFactory.register(template1);\n PropertyFactory.register(testedTemplate);\n throw new Error('Should have failed');\n } catch (error) {\n expect(error.message).to.include(\n 'PF-050: Failed to register typeid = consttest7:template-2.0.0'\n );\n }\n });\n\n it('should allow inheriting from schemas with no properties defined', function () {\n var ShapeAbstract1 = {\n typeid: 'SimpleTest:ShapeAbstract1-1.0.0'\n };\n\n var ShapeAbstract2 = {\n typeid: 'SimpleTest:ShapeAbstract2-1.0.0',\n properties: [\n { id: 'area', properties: [] },\n { id: 'color' }\n ]\n };\n\n var SquareAbstract = {\n typeid: 'SimpleTest:SquareAbstract-1.0.0',\n inherits: ['SimpleTest:ShapeAbstract1-1.0.0', 'SimpleTest:ShapeAbstract2-1.0.0'],\n properties: [\n { id: 'originX', properties: [] },\n { id: 'originY' },\n {\n id: 'color', properties: [\n { id: 'rgb', typeid: 'Int64' }\n ]\n }\n ]\n };\n\n PropertyFactory.register(ShapeAbstract1);\n PropertyFactory.register(ShapeAbstract2);\n PropertyFactory.register(SquareAbstract);\n\n var square = PropertyFactory.create('SimpleTest:SquareAbstract-1.0.0');\n\n expect(square._getChildrenCount()).to.equal(4);\n expect(square.get('area')).to.exist;\n expect(square.get('color')).to.exist;\n expect(square.get('originX')).to.exist;\n expect(square.get('originY')).to.exist;\n expect(square.get(['color', 'rgb'])).to.exist;\n });\n\n it('should allow multiple inheritance', function () {\n var SquareWithColor = {\n typeid: 'SimpleTest:SquareWithColor-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0', 'SimpleTest:Color-1.0.0'],\n properties: [\n { id: 'area', typeid: 'Float32' }\n ]\n };\n\n PropertyFactory.register(SquareWithColor);\n\n var square = PropertyFactory.create('SimpleTest:SquareWithColor-1.0.0');\n\n expect(square._getChildrenCount()).to.equal(4);\n expect(square.get('area')).to.exist;\n expect(square.get('props')).to.exist;\n expect(square.get('stroke')).to.exist;\n expect(square.get('fill')).to.exist;\n });\n\n it('should fail when inheriting from multiple types that have the same property name', function () {\n var Point = {\n typeid: 'SimpleTest:Point-1.0.0',\n properties: [{\n id: 'props', properties: [\n { id: 'x', typeid: 'Float32' },\n { id: 'y', typeid: 'Float32' }]\n }]\n };\n\n var ShapeWithInheritanceError = {\n typeid: 'SimpleTest:ShapeWithInheritanceError-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0', 'SimpleTest:Point-1.0.0'],\n properties: [\n { id: 'weight', typeid: 'Float32' }\n ]\n };\n\n PropertyFactory.register(Point);\n PropertyFactory.register(ShapeWithInheritanceError);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:ShapeWithInheritanceError-1.0.0'))\n .to.throw(MSG.OVERWRITING_ID + 'props');\n });\n\n it('should fail when overriding an inherited typed property', function () {\n var ShapeWithOverridesError = {\n typeid: 'SimpleTest:ShapeWithOverridesError-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0'],\n properties: [{ id: 'props', typeid: 'Float32' }]\n };\n\n PropertyFactory.register(ShapeWithOverridesError);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:ShapeWithOverridesError-1.0.0'))\n .to.throw(MSG.OVERRIDEN_PROP_MUST_HAVE_SAME_FIELD_VALUES_AS_BASE_TYPE);\n });\n\n it('should allow extending inherited nested untyped properties', function () {\n var SquareWithOverrides = {\n typeid: 'SimpleTest:SquareWithOverrides-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0', 'SimpleTest:Color-1.0.0'],\n properties: [\n { id: 'normal', typeid: 'Float32', context: 'array', size: 3 },\n {\n id: 'props', properties: [\n { id: 'z', typeid: 'Float32' },\n {\n id: 'size', properties: [\n { id: 'unit', typeid: 'Int32' },\n {\n id: 'border', properties: [\n { id: 'color', typeid: 'String' }]\n }]\n }]\n },\n {\n id: 'fill', properties: [\n { id: 'unit', typeid: 'Int32' }]\n }]\n };\n\n PropertyFactory.register(SquareWithOverrides);\n\n var square = PropertyFactory.create('SimpleTest:SquareWithOverrides-1.0.0');\n\n expect(square._getChildrenCount()).to.equal(4);\n expect(square.get('normal')).to.exist;\n expect(square.get('props')).to.exist;\n expect(square.get('stroke')).to.exist;\n expect(square.get('fill')).to.exist;\n\n expect(square.get('props')._getChildrenCount()).to.equal(4);\n expect(square.get(['props', 'x'])).to.exist;\n expect(square.get(['props', 'y'])).to.exist;\n expect(square.get(['props', 'z'])).to.exist;\n expect(square.get(['props', 'size'])).to.exist;\n\n expect(square.get(['props', 'size'])._getChildrenCount()).to.equal(4);\n expect(square.get(['props', 'size', 'unit'])).to.exist;\n expect(square.get(['props', 'size', 'border'])).to.exist;\n expect(square.get(['props', 'size', 'width'])).to.exist;\n expect(square.get(['props', 'size', 'height'])).to.exist;\n\n expect(square.get(['props', 'size', 'border'])._getChildrenCount()).to.equal(2);\n expect(square.get(['props', 'size', 'border', 'color'])).to.exist;\n expect(square.get(['props', 'size', 'border', 'weight'])).to.exist;\n\n expect(square.get('fill')._getChildrenCount()).to.equal(2);\n expect(square.get(['fill', 'rgb'])).to.exist;\n expect(square.get(['fill', 'unit'])).to.exist;\n });\n\n it('should support more than one level of inheritance', function () {\n var ShapeWithArea = {\n typeid: 'SimpleTest:ShapeWithArea-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0'],\n properties: [\n {\n id: 'props', properties: [\n {\n id: 'area', properties: [\n { id: 'length', typeid: 'Float32' }]\n }]\n }]\n };\n\n var SquareWithArea = {\n typeid: 'SimpleTest:SquareWithArea-1.0.0',\n inherits: ['SimpleTest:ShapeWithArea-1.0.0'],\n properties: [\n { id: 'normal', typeid: 'String' },\n {\n id: 'props', properties: [\n { id: 'color', typeid: 'String' },\n {\n id: 'area', properties: [\n { id: 'unit', typeid: 'String' }]\n }]\n }]\n };\n\n PropertyFactory.register(ShapeWithArea);\n PropertyFactory.register(SquareWithArea);\n\n var square = PropertyFactory.create('SimpleTest:SquareWithArea-1.0.0');\n\n expect(square._getChildrenCount()).to.equal(2);\n expect(square.get('normal')).to.exist;\n expect(square.get('props')).to.exist;\n\n expect(square.get('props')._getChildrenCount()).to.equal(5);\n expect(square.get(['props', 'x'])).to.exist;\n expect(square.get(['props', 'y'])).to.exist;\n expect(square.get(['props', 'size'])).to.exist;\n expect(square.get(['props', 'color'])).to.exist;\n expect(square.get(['props', 'area'])).to.exist;\n\n expect(square.get(['props', 'area'])._getChildrenCount()).to.equal(2);\n expect(square.get(['props', 'area', 'unit'])).to.exist;\n expect(square.get(['props', 'area', 'length'])).to.exist;\n });\n\n it('should work with properties named \"length\"', function () {\n var DefaultInitialValue = {\n 'typeid': 'autodesk.product:components.physicalProperties-0.0.0',\n 'properties': [\n {\n 'id': 'mass',\n 'properties': [\n {\n 'id': 'value',\n 'typeid': 'Float64'\n },\n {\n 'id': 'unit',\n 'typeid': 'String'\n }\n ]\n },\n {\n 'id': 'boundingBox',\n 'properties': [\n {\n 'id': 'length',\n 'typeid': 'Float64'\n },\n {\n 'id': 'width',\n 'typeid': 'Float64'\n },\n {\n 'id': 'height',\n 'typeid': 'Float64'\n },\n {\n 'id': 'unit',\n 'typeid': 'String'\n }\n ]\n },\n {\n 'id': 'material',\n 'typeid': 'String'\n }\n ],\n 'annotation': {\n 'description': 'Specialized component storing physical properties computed from a model.'\n }\n };\n\n PropertyFactory.register(DefaultInitialValue);\n\n var prop = PropertyFactory.create('autodesk.product:components.physicalProperties-0.0.0', null, {\n mass: {\n value: 1.2,\n unit: 'units'\n },\n boundingBox: {\n length: 1.2,\n width: 1.4,\n height: 34.2,\n unit: 'units'\n },\n material: 'ABS Plastic'\n });\n\n expect(prop.get('boundingBox').get('length').value).to.equal(1.2);\n });\n\n describe('Overriding default values', function () {\n it('should allow overriding default values', function () {\n var MapNestedWithOverriddenDefaults = {\n typeid: 'SimpleTest:MapNestedWithOverriddenDefaults-1.0.0',\n inherits: ['NamedProperty'],\n properties: [{\n id: 'map_nested', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'map'\n }]\n };\n\n var SetNestedWithOverriddenDefaults = {\n typeid: 'SimpleTest:SetNestedWithOverriddenDefaults-1.0.0',\n inherits: ['NamedProperty'],\n properties: [{\n id: 'set_nested', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'set'\n }]\n };\n\n var ShapeWithOverriddenDefaults = {\n typeid: 'SimpleTest:ShapeWithOverriddenDefaults-1.0.0',\n properties: [\n { id: 'num', typeid: 'Int8', value: 1 },\n { id: 'array', typeid: 'String', value: ['array_string_1', 'array_string_2'], context: 'array' },\n {\n id: 'array_poly', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'array', value: [\n { string: 'entry_string_poly' }]\n },\n {\n id: 'enum', typeid: 'Enum', properties: [{ id: 'solid', value: 1 }, { id: 'dashed', value: 2 }],\n value: 'solid'\n },\n {\n id: 'untyped', properties: [\n { id: 'num', typeid: 'Uint32' },\n { id: 'string', typeid: 'String' }\n ], value: { string: 'untyped_string', num: 1 }\n },\n {\n id: 'template', typeid: 'SimpleTest:DynamicWithOverriddenDefaults-1.0.0', value: {\n num: 1, dynamic: { dynamic_string: 'dynamic_string' }\n }\n },\n {\n id: 'map_primitive', typeid: 'Int32', context: 'map', value: {\n key1: 1,\n key3: 3\n }\n },\n {\n id: 'map', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'map', value: {\n key1: { string: 'map_string_1' },\n key3: { string: 'map_string_3' }\n }\n },\n {\n id: 'map_poly', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'map', value: {\n key1: { string: 'map_poly_string_1' },\n key3: { string: 'map_poly_string_3' }\n }\n },\n {\n id: 'map_nest', typeid: 'SimpleTest:MapNestedWithOverriddenDefaults-1.0.0', context: 'map', value: {\n key1: {\n map_nested: {\n key1_1: { string: 'map_nested_1_string_1' },\n key1_3: { string: 'map_nested_1_string_3' }\n }\n },\n key3: {\n map_nested: {\n key3_1: { string: 'map_nested_3_string_1' }\n }\n }\n }\n },\n {\n id: 'set', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'set', value: [\n { string: 'set_string_1' },\n { string: 'set_string_2' }\n ]\n },\n {\n id: 'set_poly', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'set', value: [\n { string: 'set_poly_string_1' },\n { string: 'set_poly_string_1' }\n ]\n },\n {\n id: 'set_nest', typeid: 'SimpleTest:SetNestedWithOverriddenDefaults-1.0.0', context: 'set', value: [{\n set_nested: [\n { string: 'set_nested_1_string_1' },\n { string: 'set_nested_1_string_2' }\n ]\n }, {\n set_nested: [\n { string: 'set_nested_3_string_1' },\n { string: 'set_nested_3_string_2' }\n ]\n }]\n }\n ]\n };\n\n var SquareWithOverriddenDefaults = {\n typeid: 'SimpleTest:SquareWithOverriddenDefaults-1.0.0',\n inherits: ['SimpleTest:ShapeWithOverriddenDefaults-1.0.0'],\n properties: [\n { id: 'num', typeid: 'Int8', value: 2 },\n {\n id: 'array', typeid: 'String', value: ['array_string_1_inherited', 'array_string_2_inherited'],\n context: 'array'\n },\n {\n id: 'array_poly', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'array', typedValue:\n [{\n typeid: 'SimpleTest:EntryWithOverriddenPolyDefaults-1.0.0',\n value: { string: 'entry_string_poly_1_inherited' }\n },\n {\n typeid: 'SimpleTest:EntryWithOverriddenPolyDefaults-1.0.0',\n value: { string: 'entry_string_poly_2_inherited' }\n }\n ]\n },\n {\n id: 'enum', typeid: 'Enum', properties: [{ id: 'solid', value: 1 }, { id: 'dashed', value: 2 }],\n value: 'dashed'\n },\n {\n id: 'untyped', properties: [\n { id: 'num', typeid: 'Uint32' },\n { id: 'string', typeid: 'String' }\n ], value: { string: 'untyped_string_inherited', num: 2 }\n },\n {\n id: 'template', typeid: 'SimpleTest:DynamicWithOverriddenDefaults-1.0.0', value: {\n num: 2, dynamic: { dynamic_string: 'dynamic_string_inherited' }\n }\n },\n {\n id: 'map_primitive', typeid: 'Int32', context: 'map', value: {\n key2: 2,\n key3: 3\n }\n },\n {\n id: 'map', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'map', value: {\n key2: { string: 'map_string_2_inherited' },\n key3: { string: 'map_string_3_inherited' }\n }\n },\n {\n id: 'map_poly', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'map', typedValue: {\n key2: {\n typeid: 'SimpleTest:EntryWithOverriddenPolyDefaults-1.0.0',\n value: { string: 'map_poly_string_2_inherited' }\n },\n key3: {\n typeid: 'SimpleTest:EntryWithOverriddenPolyDefaults-1.0.0',\n value: { string: 'map_poly_string_3_inherited' }\n }\n }\n },\n {\n id: 'map_nest', typeid: 'SimpleTest:MapNestedWithOverriddenDefaults-1.0.0', context: 'map', value: {\n key2: {\n map_nested: {\n key2_2: { string: 'map_nested_2_string_2_inherited' },\n key2_3: { string: 'map_nested_2_string_3_inherited' }\n }\n },\n key3: {\n map_nested: {\n key3_1: { string: 'map_nested_3_string_1_inherited' }\n }\n }\n }\n },\n {\n id: 'set', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'set', value: [\n { string: 'set_string_2_inherited' },\n { string: 'set_string_3_inherited' }\n ]\n },\n {\n id: 'set_poly', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'set', typedValue: [\n {\n typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0',\n value: { string: 'set_poly_string_2_inherited' }\n },\n {\n typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0',\n value: { string: 'set_poly_string_3_inherited' }\n }\n ]\n },\n {\n id: 'set_nest', typeid: 'SimpleTest:SetNestedWithOverriddenDefaults-1.0.0', context: 'set', value: [{\n set_nested: [\n { string: 'set_nested_2_string_1_inherited' },\n { string: 'set_nested_2_string_2_inherited' }\n ]\n }]\n }\n ]\n };\n\n PropertyFactory.register(MapNestedWithOverriddenDefaults);\n PropertyFactory.register(SetNestedWithOverriddenDefaults);\n PropertyFactory.register(ShapeWithOverriddenDefaults);\n PropertyFactory.register(SquareWithOverriddenDefaults);\n\n var instance = PropertyFactory.create('SimpleTest:SquareWithOverriddenDefaults-1.0.0');\n\n expect(instance._getChildrenCount()).to.equal(13);\n expect(instance.resolvePath('num').getValue()).and.eql(2);\n expect(instance.resolvePath('array').getValues()).and.eql([\n 'array_string_1_inherited', 'array_string_2_inherited'\n ]);\n expect(instance.resolvePath('array_poly').getValues().length).to.eql(2);\n expect(instance.resolvePath('array_poly').getValues()[0].string).to.eql('entry_string_poly_1_inherited');\n expect(instance.resolvePath('array_poly').getValues()[1].string).to.eql('entry_string_poly_2_inherited');\n expect(instance.resolvePath('enum').getValue()).and.eql(2);\n expect(instance.resolvePath('untyped.num').getValue()).and.eql(2);\n expect(instance.resolvePath('untyped.string').getValue()).and.eql('untyped_string_inherited');\n expect(instance.resolvePath('template.num').getValue()).and.eql(2);\n expect(instance.resolvePath('template.dynamic.dynamic_string')\n .getValue()).and.eql('dynamic_string_inherited');\n expect(instance.resolvePath('map_primitive').getIds().length).to.equal(2);\n expect(instance.resolvePath('map_primitive').getEntriesReadOnly().key2).to.equal(2);\n expect(instance.resolvePath('map_primitive').getEntriesReadOnly().key3).to.equal(3);\n expect(instance.resolvePath('map').getIds().length).to.equal(2);\n expect(instance.resolvePath('map').getEntriesReadOnly().key2.get('string').getValue())\n .to.equal('map_string_2_inherited');\n expect(instance.resolvePath('map').getEntriesReadOnly().key3.get('string').getValue())\n .to.equal('map_string_3_inherited');\n expect(instance.resolvePath('map_poly').getIds().length).to.equal(2);\n expect(instance.resolvePath('map_poly').getEntriesReadOnly().key2.get('string').getValue())\n .to.equal('map_poly_string_2_inherited');\n expect(instance.resolvePath('map_poly').getEntriesReadOnly().key3.get('string').getValue())\n .to.equal('map_poly_string_3_inherited');\n expect(instance.resolvePath('map_nest').getIds().length).to.equal(2);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getIds().length).to.equal(2);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getAsArray().length).to.equal(2);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getAsArray()[0].get('string').getValue()).to.equal('map_nested_2_string_2_inherited');\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getAsArray()[1].get('string').getValue()).to.equal('map_nested_2_string_3_inherited');\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key3.get('map_nested')\n .getIds().length).to.equal(1);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key3.get('map_nested')\n .getAsArray()[0].get('string').getValue()).to.equal('map_nested_3_string_1_inherited');\n expect(instance.resolvePath('set').getIds().length).to.equal(2);\n expect(instance.resolvePath('set').getAsArray()[0].get('string')\n .getValue()).to.equal('set_string_2_inherited');\n expect(instance.resolvePath('set').getAsArray()[1].get('string')\n .getValue()).to.equal('set_string_3_inherited');\n expect(instance.resolvePath('set_poly').getIds().length).to.equal(2);\n expect(instance.resolvePath('set_poly').getAsArray()[0].get('string')\n .getValue()).to.equal('set_poly_string_2_inherited');\n expect(instance.resolvePath('set_poly').getAsArray()[1].get('string')\n .getValue()).to.equal('set_poly_string_3_inherited');\n expect(instance.resolvePath('set_nest').getIds().length).to.equal(1);\n expect(instance.resolvePath('set_nest').getAsArray()[0].get('set_nested').getIds().length).to.equal(2);\n expect(instance.resolvePath('set_nest').getAsArray()[0].get('set_nested')\n .getAsArray()[0].get('string').getValue()).to.equal('set_nested_2_string_1_inherited');\n expect(instance.resolvePath('set_nest').getAsArray()[0].get('set_nested')\n .getAsArray()[1].get('string').getValue()).to.equal('set_nested_2_string_2_inherited');\n });\n\n it('should not allow overriding default values when typeid is different', function () {\n var ShapeWithDiffTypeidDefaults = {\n typeid: 'SimpleTest:ShapeWithDiffTypeidDefaults-1.0.0',\n properties: [{ id: 'num', typeid: 'Int8', value: 1 }]\n };\n\n var SquareWithDiffTypeidDefaults = {\n typeid: 'SimpleTest:SquareWithDiffTypeidDefaults-1.0.0',\n inherits: ['SimpleTest:ShapeWithDiffTypeidDefaults-1.0.0'],\n properties: [{ id: 'num', typeid: 'Int32', value: 2 }]\n };\n\n PropertyFactory.register(ShapeWithDiffTypeidDefaults);\n PropertyFactory.register(SquareWithDiffTypeidDefaults);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:SquareWithDiffTypeidDefaults-1.0.0'))\n .to.throw(MSG.OVERRIDEN_PROP_MUST_HAVE_SAME_FIELD_VALUES_AS_BASE_TYPE);\n });\n\n it('should not allow overriding default values when context is different', function () {\n var ShapeWithDiffContextDefaults = {\n typeid: 'SimpleTest:ShapeWithDiffContextDefaults-1.0.0',\n properties: [{ id: 'num', typeid: 'Int8', value: 1 }]\n };\n\n var SquareWithDiffContextDefaults = {\n typeid: 'SimpleTest:SquareWithDiffContextDefaults-1.0.0',\n inherits: ['SimpleTest:ShapeWithDiffContextDefaults-1.0.0'],\n properties: [{ id: 'num', typeid: 'Int8', value: [1, 2], context: 'array' }]\n };\n\n PropertyFactory.register(ShapeWithDiffContextDefaults);\n PropertyFactory.register(SquareWithDiffContextDefaults);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:SquareWithDiffContextDefaults-1.0.0'))\n .to.throw(MSG.OVERRIDEN_PROP_MUST_HAVE_SAME_FIELD_VALUES_AS_BASE_TYPE);\n });\n });\n\n describe('Overriding constants', function () {\n it('should allow overriding constants', function () {\n var EntryWithOverriddenConstants = {\n typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0',\n inherits: ['NamedProperty'],\n constants: [\n { id: 'string', typeid: 'String', value: 'entry_string' }\n ]\n };\n\n var EntryWithOverriddenPolyConstants = {\n typeid: 'SimpleTest:EntryWithOverriddenPolyConstants-1.0.0',\n inherits: ['SimpleTest:EntryWithOverriddenConstants-1.0.0'],\n constants: [\n { id: 'string', typeid: 'String', value: 'entry_string' }\n ]\n };\n\n var DynamicWithOverriddenConstants = {\n typeid: 'SimpleTest:DynamicWithOverriddenConstants-1.0.0',\n constants: [{ id: 'num', typeid: 'Uint32', value: 1 }],\n properties: [\n {\n id: 'dynamic', properties: [\n { id: 'dynamic_string', typeid: 'String' }\n ]\n }\n ]\n };\n\n var MapNestedWithOverriddenConstants = {\n typeid: 'SimpleTest:MapNestedWithOverriddenConstants-1.0.0',\n inherits: ['NamedProperty'],\n constants: [{\n id: 'map_nested', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'map', value: {}\n }]\n };\n\n var SetNestedWithOverriddenConstants = {\n typeid: 'SimpleTest:SetNestedWithOverriddenConstants-1.0.0',\n inherits: ['NamedProperty'],\n constants: [{\n id: 'set_nested', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'set', value: []\n }]\n };\n\n var ShapeWithOverriddenConstants = {\n typeid: 'SimpleTest:ShapeWithOverriddenConstants-1.0.0',\n constants: [\n { id: 'num', typeid: 'Int8', value: 1 },\n { id: 'array', typeid: 'String', value: ['array_string_1', 'array_string_2'], context: 'array' },\n {\n id: 'array_poly', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'array', value: [\n { string: 'entry_string_poly' }]\n },\n {\n id: 'template', typeid: 'SimpleTest:DynamicWithOverriddenConstants-1.0.0', value: {\n num: 1, dynamic: { dynamic_string: 'dynamic_string' }\n }\n },\n {\n id: 'map_primitive', typeid: 'Int32', context: 'map', value: {\n key1: 1,\n key3: 3\n }\n },\n {\n id: 'map', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'map', value: {\n key1: { string: 'map_string_1' },\n key3: { string: 'map_string_3' }\n }\n },\n {\n id: 'map_poly', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'map', value: {\n key1: { string: 'map_poly_string_1' },\n key3: { string: 'map_poly_string_3' }\n }\n },\n {\n id: 'map_nest', typeid: 'SimpleTest:MapNestedWithOverriddenConstants-1.0.0', context: 'map', value: {\n key1: {\n map_nested: {\n key1_1: { string: 'map_nested_1_string_1' },\n key1_3: { string: 'map_nested_1_string_3' }\n }\n },\n key3: {\n map_nested: {\n key3_1: { string: 'map_nested_3_string_1' }\n }\n }\n }\n },\n {\n id: 'set', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'set', value: [\n { string: 'set_string_1' },\n { string: 'set_string_2' }\n ]\n },\n {\n id: 'set_poly', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'set', value: [\n { string: 'set_poly_string_1' },\n { string: 'set_poly_string_1' }\n ]\n },\n {\n id: 'set_nest', typeid: 'SimpleTest:SetNestedWithOverriddenConstants-1.0.0', context: 'set', value: [{\n set_nested: [\n { string: 'set_nested_1_string_1' },\n { string: 'set_nested_1_string_2' }\n ]\n }, {\n set_nested: [\n { string: 'set_nested_3_string_1' },\n { string: 'set_nested_3_string_2' }\n ]\n }]\n }\n ]\n };\n\n var SquareWithOverriddenConstants = {\n typeid: 'SimpleTest:SquareWithOverriddenConstants-1.0.0',\n inherits: ['SimpleTest:ShapeWithOverriddenConstants-1.0.0'],\n constants: [\n { id: 'num', typeid: 'Int8', value: 2 },\n {\n id: 'array', typeid: 'String', value: ['array_string_1_inherited', 'array_string_2_inherited'],\n context: 'array'\n },\n {\n id: 'array_poly', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'array', typedValue:\n [{\n typeid: 'SimpleTest:EntryWithOverriddenPolyConstants-1.0.0',\n value: { string: 'entry_string_poly_1_inherited' }\n },\n {\n typeid: 'SimpleTest:EntryWithOverriddenPolyConstants-1.0.0',\n value: { string: 'entry_string_poly_2_inherited' }\n }\n ]\n },\n {\n id: 'template', typeid: 'SimpleTest:DynamicWithOverriddenConstants-1.0.0', value: {\n num: 2, dynamic: { dynamic_string: 'dynamic_string_inherited' }\n }\n },\n {\n id: 'map_primitive', typeid: 'Int32', context: 'map', value: {\n key2: 2,\n key3: 3\n }\n },\n {\n id: 'map', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'map', value: {\n key2: { string: 'map_string_2_inherited' },\n key3: { string: 'map_string_3_inherited' }\n }\n },\n {\n id: 'map_poly', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'map', typedValue: {\n key2: {\n typeid: 'SimpleTest:EntryWithOverriddenPolyConstants-1.0.0',\n value: { string: 'map_poly_string_2_inherited' }\n },\n key3: {\n typeid: 'SimpleTest:EntryWithOverriddenPolyConstants-1.0.0',\n value: { string: 'map_poly_string_3_inherited' }\n }\n }\n },\n {\n id: 'map_nest', typeid: 'SimpleTest:MapNestedWithOverriddenConstants-1.0.0', context: 'map', value: {\n key2: {\n map_nested: {\n key2_2: { string: 'map_nested_2_string_2_inherited' },\n key2_3: { string: 'map_nested_2_string_3_inherited' }\n }\n },\n key3: {\n map_nested: {\n key3_1: { string: 'map_nested_3_string_1_inherited' }\n }\n }\n }\n },\n {\n id: 'set', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'set', value: [\n { string: 'set_string_2_inherited' },\n { string: 'set_string_3_inherited' }\n ]\n },\n {\n id: 'set_poly', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'set', typedValue: [\n {\n typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0',\n value: { string: 'set_poly_string_2_inherited' }\n },\n {\n typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0',\n value: { string: 'set_poly_string_3_inherited' }\n }\n ]\n },\n {\n id: 'set_nest', typeid: 'SimpleTest:SetNestedWithOverriddenConstants-1.0.0', context: 'set', value: [{\n set_nested: [\n { string: 'set_nested_2_string_1_inherited' },\n { string: 'set_nested_2_string_2_inherited' }\n ]\n }]\n }\n ]\n };\n\n PropertyFactory.register(EntryWithOverriddenConstants);\n PropertyFactory.register(EntryWithOverriddenPolyConstants);\n PropertyFactory.register(DynamicWithOverriddenConstants);\n PropertyFactory.register(MapNestedWithOverriddenConstants);\n PropertyFactory.register(SetNestedWithOverriddenConstants);\n PropertyFactory.register(ShapeWithOverriddenConstants);\n PropertyFactory.register(SquareWithOverriddenConstants);\n\n var instance = PropertyFactory.create('SimpleTest:SquareWithOverriddenConstants-1.0.0');\n\n expect(instance._getChildrenCount()).to.equal(11);\n expect(instance.resolvePath('num').getValue()).and.eql(2);\n expect(instance.resolvePath('array').getValues()).and.eql([\n 'array_string_1_inherited', 'array_string_2_inherited'\n ]);\n expect(instance.resolvePath('array_poly').getValues().length).to.eql(2);\n expect(instance.resolvePath('array_poly').getValues()[0].string).to.eql('entry_string_poly_1_inherited');\n expect(instance.resolvePath('array_poly').getValues()[1].string).to.eql('entry_string_poly_2_inherited');\n expect(instance.resolvePath('template.num').getValue()).and.eql(2);\n expect(instance.resolvePath('template.dynamic.dynamic_string')\n .getValue()).and.eql('dynamic_string_inherited');\n expect(instance.resolvePath('map_primitive').getIds().length).to.equal(2);\n expect(instance.resolvePath('map_primitive').getEntriesReadOnly().key2).to.equal(2);\n expect(instance.resolvePath('map_primitive').getEntriesReadOnly().key3).to.equal(3);\n expect(instance.resolvePath('map').getIds().length).to.equal(2);\n expect(instance.resolvePath('map').getEntriesReadOnly().key2.get('string').getValue())\n .to.equal('map_string_2_inherited');\n expect(instance.resolvePath('map').getEntriesReadOnly().key3.get('string').getValue())\n .to.equal('map_string_3_inherited');\n expect(instance.resolvePath('map_poly').getIds().length).to.equal(2);\n expect(instance.resolvePath('map_poly').getEntriesReadOnly().key2.get('string').getValue())\n .to.equal('map_poly_string_2_inherited');\n expect(instance.resolvePath('map_poly').getEntriesReadOnly().key3.get('string').getValue())\n .to.equal('map_poly_string_3_inherited');\n expect(instance.resolvePath('map_nest').getIds().length).to.equal(2);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getIds().length).to.equal(2);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getAsArray().length).to.equal(2);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getAsArray()[0].get('string').getValue()).to.equal('map_nested_2_string_2_inherited');\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getAsArray()[1].get('string').getValue()).to.equal('map_nested_2_string_3_inherited');\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key3.get('map_nested')\n .getIds().length).to.equal(1);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key3.get('map_nested')\n .getAsArray()[0].get('string').getValue()).to.equal('map_nested_3_string_1_inherited');\n expect(instance.resolvePath('set').getIds().length).to.equal(2);\n expect(instance.resolvePath('set').getAsArray()[0].get('string')\n .getValue()).to.equal('set_string_2_inherited');\n expect(instance.resolvePath('set').getAsArray()[1].get('string')\n .getValue()).to.equal('set_string_3_inherited');\n expect(instance.resolvePath('set_poly').getIds().length).to.equal(2);\n expect(instance.resolvePath('set_poly').getAsArray()[0].get('string')\n .getValue()).to.equal('set_poly_string_2_inherited');\n expect(instance.resolvePath('set_poly').getAsArray()[1].get('string')\n .getValue()).to.equal('set_poly_string_3_inherited');\n expect(instance.resolvePath('set_nest').getIds().length).to.equal(1);\n expect(instance.resolvePath('set_nest').getAsArray()[0].get('set_nested').getIds().length).to.equal(2);\n expect(instance.resolvePath('set_nest').getAsArray()[0].get('set_nested')\n .getAsArray()[0].get('string').getValue()).to.equal('set_nested_2_string_1_inherited');\n expect(instance.resolvePath('set_nest').getAsArray()[0].get('set_nested')\n .getAsArray()[1].get('string').getValue()).to.equal('set_nested_2_string_2_inherited');\n });\n\n it('should allow overriding constants with typed values', function () {\n var EntryWithTypedOverriddenConstants = {\n typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0',\n inherits: ['NamedProperty'],\n constants: [\n { id: 'string', typeid: 'String', value: 'entry_string' }\n ]\n };\n\n var EntryWithTypedOverriddenPolyConstants = {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n inherits: ['SimpleTest:EntryWithTypedOverriddenConstants-1.0.0'],\n constants: [\n { id: 'string', typeid: 'String', value: 'entry_string' },\n { id: 'name', typeid: 'String', value: 'entry2' }\n ]\n };\n\n var ShapeWithTypedOverriddenConstants = {\n typeid: 'SimpleTest:ShapeWithTypedOverriddenConstants-1.0.0',\n constants: [\n { id: 'entry1', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0' },\n { id: 'entry2', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0' },\n {\n id: 'array', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0', context: 'array',\n value: [{ string: 'entry_string' }]\n },\n {\n id: 'map', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0', context: 'map', value: {\n key1: { string: 'map_string_1' },\n key3: { string: 'map_string_3' }\n }\n },\n {\n id: 'set', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0', context: 'set', value: [\n { string: 'set_string_1' },\n { string: 'set_string_1' }\n ]\n }\n ]\n };\n\n var SquareWithTypedOverriddenConstants = {\n typeid: 'SimpleTest:SquareWithTypedOverriddenConstants-1.0.0',\n inherits: ['SimpleTest:ShapeWithTypedOverriddenConstants-1.0.0'],\n constants: [\n {\n id: 'entry1', typedValue: {\n typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0',\n value: { string: 'entry_string_1' }\n }\n },\n {\n id: 'entry2', typedValue: {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'entry_string_2', name: 'entry2' }\n }\n },\n {\n id: 'array', context: 'array', typedValue:\n [{\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'entry_string_1_inherited', name: 'entry_string_1' }\n },\n {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'entry_string_2_inherited', name: 'entry_string_2' }\n }\n ]\n },\n {\n id: 'map', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0', context: 'map', typedValue: {\n key2: {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'map_string_2_inherited', name: 'map_string_2' }\n },\n key3: {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'map_string_3_inherited', name: 'map_string_3' }\n }\n }\n },\n {\n id: 'set', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0', context: 'set', typedValue: [\n {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'set_string_2_inherited', name: 'set_string_2' }\n },\n {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'set_string_3_inherited', name: 'set_string_3' }\n }\n ]\n }\n ]\n };\n\n PropertyFactory.register(EntryWithTypedOverriddenConstants);\n PropertyFactory.register(EntryWithTypedOverriddenPolyConstants);\n PropertyFactory.register(ShapeWithTypedOverriddenConstants);\n PropertyFactory.register(SquareWithTypedOverriddenConstants);\n\n var instance = PropertyFactory.create('SimpleTest:SquareWithTypedOverriddenConstants-1.0.0');\n\n expect(instance._getChildrenCount()).to.equal(5);\n expect(instance.resolvePath('entry1').getTypeid())\n .to.eql('SimpleTest:EntryWithTypedOverriddenConstants-1.0.0');\n expect(instance.resolvePath('entry1.string').getValue()).to.eql('entry_string_1');\n expect(instance.resolvePath('entry2').getTypeid())\n .to.eql('SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0');\n expect(instance.resolvePath('entry2.name').getValue()).to.eql('entry2');\n expect(instance.resolvePath('entry2.string').getValue()).to.eql('entry_string_2');\n expect(instance.resolvePath('array').getValues().length).to.eql(2);\n expect(instance.resolvePath('array').getValues()[0].name).to.eql('entry_string_1');\n expect(instance.resolvePath('array').getValues()[0].string).to.eql('entry_string_1_inherited');\n expect(instance.resolvePath('array').getValues()[1].name).to.eql('entry_string_2');\n expect(instance.resolvePath('array').getValues()[1].string).to.eql('entry_string_2_inherited');\n expect(instance.resolvePath('map').getIds().length).to.equal(2);\n expect(instance.resolvePath('map').getEntriesReadOnly().key2.get('name').getValue())\n .to.equal('map_string_2');\n expect(instance.resolvePath('map').getEntriesReadOnly().key2.get('string').getValue())\n .to.equal('map_string_2_inherited');\n expect(instance.resolvePath('map').getEntriesReadOnly().key3.get('name').getValue())\n .to.equal('map_string_3');\n expect(instance.resolvePath('map').getEntriesReadOnly().key3.get('string').getValue())\n .to.equal('map_string_3_inherited');\n expect(instance.resolvePath('set').getIds().length).to.equal(2);\n expect(instance.resolvePath('set').getAsArray()[0].get('name')\n .getValue()).to.equal('set_string_2');\n expect(instance.resolvePath('set').getAsArray()[0].get('string')\n .getValue()).to.equal('set_string_2_inherited');\n expect(instance.resolvePath('set').getAsArray()[1].get('name')\n .getValue()).to.equal('set_string_3');\n expect(instance.resolvePath('set').getAsArray()[1].get('string')\n .getValue()).to.equal('set_string_3_inherited');\n });\n\n it('should not allow overriding constants when typeid is different', function () {\n var ShapeWithDiffTypeidConstants = {\n typeid: 'SimpleTest:ShapeWithDiffTypeidConstants-1.0.0',\n constants: [{ id: 'num', typeid: 'Int8', value: 1 }]\n };\n\n var SquareWithDiffTypeidConstants = {\n typeid: 'SimpleTest:SquareWithDiffTypeidConstants-1.0.0',\n inherits: ['SimpleTest:ShapeWithDiffTypeidConstants-1.0.0'],\n constants: [{ id: 'num', typeid: 'Int32', value: 2 }]\n };\n\n PropertyFactory.register(ShapeWithDiffTypeidConstants);\n PropertyFactory.register(SquareWithDiffTypeidConstants);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:SquareWithDiffTypeidConstants-1.0.0'))\n .to.throw(MSG.OVERRIDEN_PROP_MUST_HAVE_SAME_FIELD_VALUES_AS_BASE_TYPE);\n });\n\n it('should not allow overriding constants when context is different', function () {\n var ShapeWithDiffContextConstants = {\n typeid: 'SimpleTest:ShapeWithDiffContextConstants-1.0.0',\n constants: [{ id: 'num', typeid: 'Int8', value: 1 }]\n };\n\n var SquareWithDiffContextConstants = {\n typeid: 'SimpleTest:SquareWithDiffContextConstants-1.0.0',\n inherits: ['SimpleTest:ShapeWithDiffContextConstants-1.0.0'],\n constants: [{ id: 'num', typeid: 'Int8', value: [1, 2], context: 'array' }]\n };\n\n PropertyFactory.register(ShapeWithDiffContextConstants);\n PropertyFactory.register(SquareWithDiffContextConstants);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:SquareWithDiffContextConstants-1.0.0'))\n .to.throw(MSG.OVERRIDEN_PROP_MUST_HAVE_SAME_FIELD_VALUES_AS_BASE_TYPE);\n });\n\n it('should not allow overriding constants with a typedValue that does not inherit from base type', function () {\n var Type1 = {\n typeid: 'SimpleTest:Type1-1.0.0',\n constants: [{ id: 'num', typeid: 'Int32', value: 1 }]\n };\n\n var Type2 = {\n typeid: 'SimpleTest:Type2-1.0.0',\n constants: [{ id: 'num', typeid: 'Int32', value: 1 }]\n };\n\n var ShapeWithDiffTypedTypeidConstants = {\n typeid: 'SimpleTest:ShapeWithDiffTypeidConstants-1.0.0',\n constants: [{ id: 'type', typeid: 'SimpleTest:Type1-1.0.0' }]\n };\n\n var SquareWithDiffTypedTypeidConstants = {\n typeid: 'SimpleTest:SquareWithDiffTypeidConstants-1.0.0',\n inherits: ['SimpleTest:ShapeWithDiffTypeidConstants-1.0.0'],\n constants: [{ id: 'type', typedValue: { typeid: 'SimpleTest:Type2-1.0.0' } }]\n };\n\n PropertyFactory.register(Type1);\n PropertyFactory.register(Type2);\n PropertyFactory.register(ShapeWithDiffTypedTypeidConstants);\n PropertyFactory.register(SquareWithDiffTypedTypeidConstants);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:SquareWithDiffTypeidConstants-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_MUST_DERIVE_FROM_BASE_TYPE +\n 'SimpleTest:Type2-1.0.0 must be a subclass of SimpleTest:Type1-1.0.0');\n });\n });\n });\n\n\n describe('Default values', function () {\n it('should set default values for primitive property', function () {\n var DefaultPrimitive = {\n typeid: 'SimpleTest:DefaultPrimitive-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32', value: 111 },\n { id: 'bool', typeid: 'Bool', value: true }\n ]\n };\n\n PropertyFactory.register(DefaultPrimitive);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultPrimitive-1.0.0');\n expect(instance.get('num').getValue()).to.equal(111);\n expect(instance.get('bool').getValue()).to.equal(true);\n });\n\n it('should set a default value for a string property', function () {\n var DefaultString = {\n typeid: 'SimpleTest:DefaultString-1.0.0',\n properties: [\n { id: 'string', typeid: 'String', value: 'I am a string' }\n ]\n };\n\n PropertyFactory.register(DefaultString);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultString-1.0.0');\n expect(instance.get('string').getValue()).to.equal('I am a string');\n });\n\n it('should set a default value for a primitive array property', function () {\n var DefaultArray = {\n typeid: 'SimpleTest:DefaultArray-1.0.0',\n properties: [\n { id: 'array', typeid: 'Int32', value: [111, 222], context: 'array' }\n ]\n };\n\n PropertyFactory.register(DefaultArray);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultArray-1.0.0');\n expect(instance.get('array').get(0)).to.equal(111);\n expect(instance.get('array').get(1)).to.equal(222);\n });\n\n it('should set a default value for a typed array property', function () {\n var DefaultTypedArrayEntry = {\n typeid: 'SimpleTest:DefaultTypedArrayEntry-1.0.0',\n properties: [\n { id: 'string', typeid: 'String' }\n ]\n };\n\n var DefaultTypedArray = {\n typeid: 'SimpleTest:DefaultTypedArray-1.0.0',\n properties: [\n {\n id: 'array', typeid: 'SimpleTest:DefaultTypedArrayEntry-1.0.0', context: 'array', value: [\n { string: 'I am string 1' }, { string: 'I am string 2' }]\n }\n ]\n };\n\n PropertyFactory.register(DefaultTypedArrayEntry);\n PropertyFactory.register(DefaultTypedArray);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultTypedArray-1.0.0');\n expect(instance.get('array').get(0).get('string').value).to.equal('I am string 1');\n expect(instance.get('array').get(1).get('string').value).to.equal('I am string 2');\n });\n\n it('should set a default value for an enum property', function () {\n var DefaultEnum = {\n typeid: 'SimpleTest:DefaultEnum-1.0.0',\n properties: [\n {\n id: 'enum', typeid: 'Enum', properties: [\n { id: 'solid', value: 111 },\n { id: 'dashed', value: 222 },\n { id: 'dotted', value: 333 }\n ], value: 'dashed'\n }\n ]\n };\n\n PropertyFactory.register(DefaultEnum);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultEnum-1.0.0');\n expect(instance.get('enum').getValue()).to.equal(222);\n });\n\n it('should set a default value for an untyped property, parent default value has precedence', function () {\n var DefaultUntyped = {\n typeid: 'SimpleTest:DefaultUntyped-1.0.0',\n properties: [\n {\n id: 'untyped', properties: [\n { id: 'num', typeid: 'Uint32', value: 222 },\n { id: 'string', typeid: 'String', value: 'I should not be set' }\n ], value: { string: 'I am a string', num: 111 }\n }\n ]\n };\n\n PropertyFactory.register(DefaultUntyped);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultUntyped-1.0.0');\n\n expect(instance.get('untyped').get('string').getValue()).to.equal('I am a string');\n expect(instance.get('untyped').get('num').getValue()).to.equal(111);\n });\n\n it('should set a default value for a template, parent default value has precedence', function () {\n var DefaultTemplateEntry = {\n typeid: 'SimpleTest:DefaultTemplateEntry-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32', value: '222' },\n {\n id: 'dynamic', properties: [\n { id: 'dynamic_string', typeid: 'String' }\n ], value: { dynamic_string: 'I should not be set' }\n }\n ]\n };\n\n var DefaultTemplate = {\n typeid: 'SimpleTest:DefaultTemplate-1.0.0',\n properties: [\n {\n id: 'template', typeid: 'SimpleTest:DefaultTemplateEntry-1.0.0', value: {\n num: 111, dynamic: { dynamic_string: 'I am a string' }\n }\n }\n ]\n };\n\n PropertyFactory.register(DefaultTemplateEntry);\n PropertyFactory.register(DefaultTemplate);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultTemplate-1.0.0');\n\n expect(instance.get('template').get('num').getValue()).to.equal(111);\n expect(instance.get('template').get('dynamic').get('dynamic_string').getValue()).to.equal('I am a string');\n });\n\n it('should set a default value for a set', function () {\n var DefaultSetEntry = {\n typeid: 'SimpleTest:DefaultSetEntry-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'string', typeid: 'String' }\n ]\n };\n\n var DefaultSet = {\n typeid: 'SimpleTest:DefaultSet-1.0.0',\n properties: [\n {\n id: 'set', typeid: 'SimpleTest:DefaultSetEntry-1.0.0', context: 'set', value: [\n { string: 'I am a string 1' },\n { string: 'I am a string 2' }\n ]\n }\n ]\n };\n\n PropertyFactory.register(DefaultSetEntry);\n PropertyFactory.register(DefaultSet);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultSet-1.0.0');\n\n expect(instance.get('set').getAsArray().length).to.equal(2);\n expect(instance.get('set').getAsArray()[0].get('string').getValue()).to.equal('I am a string 1');\n expect(instance.get('set').getAsArray()[1].get('string').getValue()).to.equal('I am a string 2');\n });\n\n it('should set a default value for a primitive map', function () {\n var DefaultPrimitiveMap = {\n typeid: 'SimpleTest:DefaultPrimitiveMap-1.0.0',\n properties: [\n {\n id: 'map', typeid: 'Int32', context: 'map', value: {\n key1: 111,\n key2: 222\n }\n }\n ]\n };\n\n PropertyFactory.register(DefaultPrimitiveMap);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultPrimitiveMap-1.0.0');\n\n expect(instance.get('map').getEntriesReadOnly().key1).to.equal(111);\n expect(instance.get('map').getEntriesReadOnly().key2).to.equal(222);\n });\n\n it('should set a default value for a typed map', function () {\n var DefaultTypedMapEntry = {\n typeid: 'SimpleTest:DefaultTypedMapEntry-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'string', typeid: 'String' }\n ]\n };\n\n var DefaultTypedMap = {\n typeid: 'SimpleTest:DefaultTypedMap-1.0.0',\n properties: [\n {\n id: 'map', typeid: 'SimpleTest:DefaultTypedMapEntry-1.0.0', context: 'map', value: {\n key1: { string: 'I am a string 1' },\n key2: { string: 'I am a string 2' }\n }\n }\n ]\n };\n\n PropertyFactory.register(DefaultTypedMapEntry);\n PropertyFactory.register(DefaultTypedMap);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultTypedMap-1.0.0');\n\n expect(instance.get('map').getEntriesReadOnly().key1.get('string').getValue()).to.equal('I am a string 1');\n expect(instance.get('map').getEntriesReadOnly().key2.get('string').getValue()).to.equal('I am a string 2');\n });\n\n it('initial values should override default values', function () {\n var DefaultInitialValue = {\n typeid: 'SimpleTest:DefaultInitialValue-1.0.0',\n properties: [\n { id: 'string', typeid: 'String', value: 'I should not be set' }\n ]\n };\n\n PropertyFactory.register(DefaultInitialValue);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultInitialValue-1.0.0', null, {\n string: 'I am a string'\n });\n\n expect(instance.get('string').getValue()).to.equal('I am a string');\n });\n\n describe('#Polymorphic', function () {\n var DefaultPolyBase = {\n typeid: 'SimpleTest:DefaultPolyBase-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'num', typeid: 'Uint32', value: 111 }\n ]\n };\n\n var DefaultPolySub = {\n typeid: 'SimpleTest:DefaultPolySub-1.0.0',\n inherits: 'SimpleTest:DefaultPolyBase-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32', value: 222 },\n { id: 'str', typeid: 'String', value: 'Sub' }\n ]\n };\n\n var DefaultPolySubSub = {\n typeid: 'SimpleTest:DefaultPolySubSub-1.0.0',\n inherits: 'SimpleTest:DefaultPolySub-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32', value: 333 },\n { id: 'num2', typeid: 'Uint32', value: 111 },\n { id: 'str', typeid: 'String', value: 'SubSub' }\n ]\n };\n\n beforeEach(function () {\n PropertyFactory._clear();\n PropertyFactory.register(DefaultPolyBase);\n PropertyFactory.register(DefaultPolySub);\n PropertyFactory.register(DefaultPolySubSub);\n });\n\n it('should set default polymorphic values for non-primitive properties', function () {\n var DefaultPolyContainer = {\n typeid: 'SimpleTest:DefaultPolyContainer-1.0.0',\n properties: [\n {\n id: 'polySub', typeid: 'SimpleTest:DefaultPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:DefaultPolySub-1.0.0', value: { num: 333, str: 'PolySub' } }\n },\n {\n id: 'polySubSub', typeid: 'SimpleTest:DefaultPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:DefaultPolySubSub-1.0.0', value: { num: 444, str: 'PolySubSub' } }\n }\n ]\n };\n\n PropertyFactory.register(DefaultPolyContainer);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultPolyContainer-1.0.0');\n expect(instance.get('polySub').get('num').getValue()).to.equal(333);\n expect(instance.get('polySub').get('str').getValue()).to.equal('PolySub');\n\n expect(instance.get('polySubSub').get('num').getValue()).to.equal(444);\n expect(instance.get('polySubSub').get('str').getValue()).to.equal('PolySubSub');\n expect(instance.get('polySubSub').get('num2').getValue()).to.equal(111);\n });\n\n it('should fail when setting a default typedValue that doesnt have a typeid.', function () {\n var DefaultPolyNoTypeIdContainer = {\n typeid: 'SimpleTest:DefaultPolyNoTypeIdContainer-1.0.0',\n properties: [{\n id: 'polySub', typeid: 'SimpleTest:DefaultPolyBase-1.0.0',\n typedValue: { value: { num: 333, str: 'PolySub' } }\n }]\n };\n\n PropertyFactory.register(DefaultPolyNoTypeIdContainer);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPolyNoTypeIdContainer-1.0.0'))\n .to.throw(MSG.FIELD_TYPEID_IS_REQUIRED + 'typedValue SimpleTest:DefaultPolyBase-1.0.0');\n });\n\n it('should set a default polymorphic value for a non-primitive array', function () {\n var DefaultPolyArrayContainer = {\n typeid: 'SimpleTest:DefaultPolyArrayContainer-1.0.0',\n properties: [\n {\n id: 'array', typeid: 'SimpleTest:DefaultPolyBase-1.0.0', context: 'array', typedValue: [\n { typeid: 'SimpleTest:DefaultPolySub-1.0.0' },\n { typeid: 'SimpleTest:DefaultPolySub-1.0.0', value: { str: 'ArrSub' } },\n { typeid: 'SimpleTest:DefaultPolySubSub-1.0.0', value: { str: 'ArrSubSub' } }\n ]\n }\n ]\n };\n\n PropertyFactory.register(DefaultPolyArrayContainer);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultPolyArrayContainer-1.0.0');\n expect(instance.get('array').get(0).get('num').value).to.equal(222);\n expect(instance.get('array').get(0).get('str').value).to.equal('Sub');\n expect(instance.get('array').get(1).get('num').value).to.equal(222);\n expect(instance.get('array').get(1).get('str').value).to.equal('ArrSub');\n expect(instance.get('array').get(2).get('num').value).to.equal(333);\n expect(instance.get('array').get(2).get('str').value).to.equal('ArrSubSub');\n expect(instance.get('array').get(2).get('num2').value).to.equal(111);\n });\n\n it('should set a default polymorphic value for a non-primitive set', function () {\n var DefaultPolySetContainer = {\n typeid: 'SimpleTest:DefaultPolySetContainer-1.0.0',\n properties: [\n {\n id: 'set', typeid: 'SimpleTest:DefaultPolyBase-1.0.0', context: 'set', typedValue: [\n { typeid: 'SimpleTest:DefaultPolySub-1.0.0' },\n { typeid: 'SimpleTest:DefaultPolySub-1.0.0', value: { str: 'ArrSub' } },\n { typeid: 'SimpleTest:DefaultPolySubSub-1.0.0', value: { str: 'ArrSubSub' } }\n ]\n }\n ]\n };\n\n PropertyFactory.register(DefaultPolySetContainer);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultPolySetContainer-1.0.0');\n\n expect(instance.get('set').getAsArray().length).to.equal(3);\n expect(instance.get('set').getAsArray()[0].get('num').getValue()).to.equal(222);\n expect(instance.get('set').getAsArray()[0].get('str').getValue()).to.equal('Sub');\n expect(instance.get('set').getAsArray()[1].get('num').getValue()).to.equal(222);\n expect(instance.get('set').getAsArray()[1].get('str').getValue()).to.equal('ArrSub');\n expect(instance.get('set').getAsArray()[2].get('num').getValue()).to.equal(333);\n expect(instance.get('set').getAsArray()[2].get('str').getValue()).to.equal('ArrSubSub');\n expect(instance.get('set').getAsArray()[2].get('num2').getValue()).to.equal(111);\n });\n\n it('should set a default polymorphic value for a non-primitive map', function () {\n var DefaultPolyMapContainer = {\n typeid: 'SimpleTest:DefaultPolyMapContainer-1.0.0',\n properties: [\n {\n id: 'map', typeid: 'SimpleTest:DefaultPolyBase-1.0.0', context: 'map', typedValue: {\n key1: { typeid: 'SimpleTest:DefaultPolySub-1.0.0' },\n key2: { typeid: 'SimpleTest:DefaultPolySub-1.0.0', value: { str: 'ArrSub' } },\n key3: { typeid: 'SimpleTest:DefaultPolySubSub-1.0.0', value: { str: 'ArrSubSub' } }\n }\n }\n ]\n };\n\n PropertyFactory.register(DefaultPolyMapContainer);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultPolyMapContainer-1.0.0');\n\n expect(instance.get('map').getEntriesReadOnly().key1.get('num').getValue()).to.equal(222);\n expect(instance.get('map').getEntriesReadOnly().key1.get('str').getValue()).to.equal('Sub');\n expect(instance.get('map').getEntriesReadOnly().key2.get('num').getValue()).to.equal(222);\n expect(instance.get('map').getEntriesReadOnly().key2.get('str').getValue()).to.equal('ArrSub');\n expect(instance.get('map').getEntriesReadOnly().key3.get('num').getValue()).to.equal(333);\n expect(instance.get('map').getEntriesReadOnly().key3.get('str').getValue()).to.equal('ArrSubSub');\n expect(instance.get('map').getEntriesReadOnly().key3.get('num2').getValue()).to.equal(111);\n });\n\n it('should fail when setting default polymorphic values not derived from base type', function () {\n var DefaultPoly = {\n typeid: 'SimpleTest:DefaultPoly-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32', value: 111 }\n ]\n };\n\n var DefaultPolyUnderivedContainer = {\n typeid: 'SimpleTest:DefaultPolyUnderivedContainer-1.0.0',\n properties: [\n {\n id: 'poly', typeid: 'SimpleTest:DefaultPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:DefaultPoly-1.0.0', value: { num: 333 } }\n }\n ]\n };\n\n PropertyFactory.register(DefaultPoly);\n PropertyFactory.register(DefaultPolyUnderivedContainer);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPolyUnderivedContainer-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_MUST_DERIVE_FROM_BASE_TYPE + 'SimpleTest:DefaultPoly-1.0.0');\n });\n\n it('@bugfix should use default value when value field is missing', function () {\n var DefaultPoly = {\n typeid: 'SimpleTest:PolyWithNoValue-1.0.0',\n constants: [\n {\n id: 'type', typeid: 'SimpleTest:DefaultPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:DefaultPolyBase-1.0.0' }\n }\n ]\n };\n\n PropertyFactory.register(DefaultPoly);\n var prop = PropertyFactory.create(DefaultPoly.typeid);\n\n expect(prop.get('type').get('num').value).to.equal(111);\n });\n\n it('should fail when setting a typedValue to a primitive.', function () {\n var DefaultPrimitiveArrayPoly = {\n typeid: 'SimpleTest:DefaultPrimitivePoly-1.0.0',\n properties: [{\n id: 'int', typeid: 'Int32', typedValue: { typeid: 'Int32', value: 123 }\n }]\n };\n\n PropertyFactory.register(DefaultPrimitiveArrayPoly);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPrimitivePoly-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_FOR_PRIMITIVES_NOT_SUPPORTED + 'int');\n });\n\n it('should fail when setting a typedValue to a primitive array.', function () {\n var DefaultPrimitiveArrayPoly = {\n typeid: 'SimpleTest:DefaultPrimitiveArrayPoly-1.0.0',\n properties: [{\n id: 'array', context: 'array', typeid: 'Int32', typedValue: [{ typeid: 'Int32', value: 123 }]\n }]\n };\n\n PropertyFactory.register(DefaultPrimitiveArrayPoly);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPrimitiveArrayPoly-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_FOR_PRIMITIVES_NOT_SUPPORTED + 'array');\n });\n\n it('should fail when setting a typedValue to a primitive map.', function () {\n var DefaultPrimitiveMapPoly = {\n typeid: 'SimpleTest:DefaultPrimitiveMapPoly-1.0.0',\n properties: [{\n id: 'map', context: 'map', typeid: 'Int32', typedValue: {\n key1: { typeid: 'Int32', value: 1 },\n key2: { typeid: 'Int32', value: 2 }\n }\n }]\n };\n\n PropertyFactory.register(DefaultPrimitiveMapPoly);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPrimitiveMapPoly-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_FOR_PRIMITIVES_NOT_SUPPORTED + 'map');\n });\n });\n });\n\n describe('Constants', function () {\n it('should set constant properties as readonly', function () {\n var ConstantReadonly = {\n typeid: 'SimpleTest:ConstantReadonly-1.0.0',\n constants: [\n { id: 'num', typeid: 'Uint32', value: 111 }\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }]\n };\n\n PropertyFactory.register(ConstantReadonly);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantReadonly-1.0.0');\n\n expect(instance.get('num').getValue()).to.equal(111);\n expect(instance.get('num')._isConstant).to.equal(true);\n expect(instance.get('num')._checkIsNotReadOnly.bind(\n instance.get('num'), true)).to.throw(MSG.MODIFICATION_OF_CONSTANT_PROPERTY);\n expect(instance.get('num').setValue.bind(\n instance.get('num'), 1111)).to.throw(MSG.MODIFICATION_OF_CONSTANT_PROPERTY);\n });\n\n it('should set constant child properties as readonly', function () {\n var ConstantChildReadonlyEntry = {\n typeid: 'SimpleTest:ConstantChildReadonlyEntry-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32' },\n {\n id: 'dynamic', properties: [\n { id: 'dynamic_string', typeid: 'String' }\n ]\n }\n ]\n };\n\n var ConstantChildReadonly = {\n typeid: 'SimpleTest:ConstantChildReadonly-1.0.0',\n constants: [\n {\n id: 'template', typeid: 'SimpleTest:ConstantChildReadonlyEntry-1.0.0', value: {\n num: 111, dynamic: { dynamic_string: 'I am a string' }\n }\n }\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }]\n };\n\n PropertyFactory.register(ConstantChildReadonlyEntry);\n PropertyFactory.register(ConstantChildReadonly);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantChildReadonly-1.0.0');\n\n expect(instance.get('template').get('num')._isConstant).to.equal(true);\n expect(instance.get('template').get('dynamic')._isConstant).to.equal(true);\n expect(instance.get('template').get('dynamic').get('dynamic_string')._isConstant).to.equal(true);\n expect(instance.get('template').get('num')._checkIsNotReadOnly.bind(\n instance.get('template').get('num'), true)).to.throw(MSG.MODIFICATION_OF_CONSTANT_PROPERTY);\n expect(instance.get('template').get('num').setValue.bind(\n instance.get('template').get('num'), 1111)).to.throw(MSG.MODIFICATION_OF_CONSTANT_PROPERTY);\n expect(instance.get('template').get('dynamic').get('dynamic_string')._checkIsNotReadOnly.bind(\n instance.get('template').get('dynamic').get('dynamic_string'), true)).to.throw(\n MSG.MODIFICATION_OF_CONSTANT_PROPERTY);\n expect(instance.get('template').get('dynamic').get('dynamic_string').setValue.bind(\n instance.get('template').get('dynamic').get('dynamic_string'), 'should throw')).to.throw(\n MSG.MODIFICATION_OF_CONSTANT_PROPERTY);\n });\n\n it('should support primitive constants', function () {\n var ConstantPrimitive = {\n typeid: 'SimpleTest:ConstantPrimitive-1.0.0',\n constants: [\n { id: 'num', typeid: 'Uint32', value: 111 },\n { id: 'bool', typeid: 'Bool', value: true }\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }]\n };\n\n PropertyFactory.register(ConstantPrimitive);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantPrimitive-1.0.0');\n\n expect(instance.get('num').getValue()).to.equal(111);\n expect(instance.get('bool').getValue()).to.equal(true);\n });\n\n it('should support typed constants', function () {\n var ConstantEntry = {\n typeid: 'SimpleTest:ConstantEntry-1.0.0',\n constants: [\n { id: 'num', typeid: 'Uint32', value: 111 },\n { id: 'bool', typeid: 'Bool', value: true }\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }]\n };\n\n var ConstantTyped = {\n typeid: 'SimpleTest:ConstantTyped-1.0.0',\n constants: [\n { id: 'entry', typeid: 'SimpleTest:ConstantEntry-1.0.0', value: { num: 222, bool: false } }\n ],\n properties: [{ id: 'default2', typeid: 'Uint32' }]\n };\n\n PropertyFactory.register(ConstantEntry);\n PropertyFactory.register(ConstantTyped);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantTyped-1.0.0');\n\n expect(instance.get('entry').get('num').getValue()).to.equal(222);\n expect(instance.get('entry').get('bool').getValue()).to.equal(false);\n });\n\n it('should support string constants', function () {\n var ConstantString = {\n typeid: 'SimpleTest:ConstantString-1.0.0',\n constants: [\n { id: 'string', typeid: 'String', value: 'I am a string' }\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }]\n };\n\n PropertyFactory.register(ConstantString);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantString-1.0.0');\n\n expect(instance.get('string').getValue()).to.equal('I am a string');\n });\n\n it('should support primitive array constants', function () {\n var ConstantArray = {\n typeid: 'SimpleTest:ConstantArray-1.0.0',\n constants: [\n { id: 'array', typeid: 'Int32', value: [111, 222], context: 'array' }\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }]\n };\n\n PropertyFactory.register(ConstantArray);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantArray-1.0.0');\n expect(instance.get('array').get(0)).to.equal(111);\n expect(instance.get('array').get(1)).to.equal(222);\n });\n\n it('should support typed array constants', function () {\n var ConstantTypedArrayEntry = {\n typeid: 'SimpleTest:ConstantTypedArrayEntry-1.0.0',\n properties: [\n { id: 'string', typeid: 'String' }\n ]\n };\n\n var ConstantTypedArray = {\n typeid: 'SimpleTest:ConstantTypedArray-1.0.0',\n constants: [\n {\n id: 'array', typeid: 'SimpleTest:ConstantTypedArrayEntry-1.0.0', context: 'array', value: [\n { string: 'I am string 1' }, { string: 'I am string 2' }]\n }\n ]\n };\n\n PropertyFactory.register(ConstantTypedArrayEntry);\n PropertyFactory.register(ConstantTypedArray);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantTypedArray-1.0.0');\n expect(instance.get('array').get(0).get('string').value).to.equal('I am string 1');\n expect(instance.get('array').get(1).get('string').value).to.equal('I am string 2');\n });\n\n it('should support template constants', function () {\n var ConstantTemplateEntry = {\n typeid: 'SimpleTest:ConstantTemplateEntry-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32' },\n {\n id: 'dynamic', properties: [\n { id: 'dynamic_string', typeid: 'String' }\n ]\n }\n ]\n };\n\n var ConstantTemplate = {\n typeid: 'SimpleTest:ConstantTemplate-1.0.0',\n constants: [\n {\n id: 'template', typeid: 'SimpleTest:ConstantTemplateEntry-1.0.0', value: {\n num: 111, dynamic: { dynamic_string: 'I am a string' }\n }\n }\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }]\n };\n\n PropertyFactory.register(ConstantTemplateEntry);\n PropertyFactory._reregister(ConstantTemplate);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantTemplate-1.0.0');\n\n expect(instance.get('template').get('num').getValue()).to.equal(111);\n expect(instance.get('template').get('dynamic').get('dynamic_string').getValue()).to.equal('I am a string');\n });\n\n it('should support set constants', function () {\n var ConstantSetEntry = {\n typeid: 'SimpleTest:ConstantSetEntry-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'string', typeid: 'String' }\n ]\n };\n\n var ConstantSet = {\n typeid: 'SimpleTest:ConstantSet-1.0.0',\n constants: [\n {\n id: 'set', typeid: 'SimpleTest:ConstantSetEntry-1.0.0', context: 'set', value: [\n { string: 'I am a string 1' },\n { string: 'I am a string 2' }\n ]\n }\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }]\n };\n\n PropertyFactory.register(ConstantSetEntry);\n PropertyFactory.register(ConstantSet);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantSet-1.0.0');\n\n expect(instance.get('set').getAsArray().length).to.equal(2);\n expect(instance.get('set').getAsArray()[0].get('string').getValue()).to.equal('I am a string 1');\n expect(instance.get('set').getAsArray()[1].get('string').getValue()).to.equal('I am a string 2');\n\n // All instances should share the same constant objects\n var instance2 = PropertyFactory.create('SimpleTest:ConstantSet-1.0.0');\n expect(instance.get('set') === instance2.get('set')).to.be.true;\n });\n\n it('should support primitive map constants', function () {\n var ConstantPrimitiveMap = {\n typeid: 'SimpleTest:ConstantPrimitiveMap-1.0.0',\n constants: [\n {\n id: 'map', typeid: 'Int32', context: 'map', value: {\n key1: 111,\n key2: 222\n }\n }\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }]\n };\n\n PropertyFactory.register(ConstantPrimitiveMap);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantPrimitiveMap-1.0.0');\n\n expect(instance.get('map').getEntriesReadOnly().key1).to.equal(111);\n expect(instance.get('map').getEntriesReadOnly().key2).to.equal(222);\n });\n\n it('should support typed map constants', function () {\n var ConstantTypedMapEntry = {\n typeid: 'SimpleTest:ConstantTypedMapEntry-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'string', typeid: 'String' }\n ]\n };\n\n var ConstantTypedMap = {\n typeid: 'SimpleTest:ConstantTypedMap-1.0.0',\n constants: [\n {\n id: 'map', typeid: 'SimpleTest:ConstantTypedMapEntry-1.0.0', context: 'map', value: {\n key1: { string: 'I am a string 1' },\n key2: { string: 'I am a string 2' }\n }\n }\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }]\n };\n\n PropertyFactory.register(ConstantTypedMapEntry);\n PropertyFactory.register(ConstantTypedMap);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantTypedMap-1.0.0');\n\n expect(instance.get('map')._contextKeyType).to.equal('string');\n expect(instance.get('map').getEntriesReadOnly().key1.get('string').getValue()).to.equal('I am a string 1');\n expect(instance.get('map').getEntriesReadOnly().key2.get('string').getValue()).to.equal('I am a string 2');\n });\n\n it('should support map constants with templateid keys', function () {\n var ConstantTemplate = {\n typeid: 'SimpleTest:ConstantTemplate-1.0.0',\n constants: [\n {\n id: 'map',\n typeid: 'Int32',\n context: 'map',\n contextKeyType: 'typeid',\n value: { 'SimpleTest:ConstantTemplate1-1.0.0': 1, 'SimpleTest:ConstantTemplate2-1.0.0': -1 }\n }\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }]\n };\n PropertyFactory._reregister(ConstantTemplate);\n var instance = PropertyFactory.create('SimpleTest:ConstantTemplate-1.0.0');\n\n expect(instance.get('map')._contextKeyType).to.equal('typeid');\n expect(instance.get('map').get('SimpleTest:ConstantTemplate1-1.0.0')).to.equal(1);\n expect(instance.get('map').get('SimpleTest:ConstantTemplate2-1.0.0')).to.equal(-1);\n });\n\n it('should support constants with no value defined', function () {\n var ConstantNoValueEntry = {\n typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0',\n inherits: ['NamedProperty'],\n constants: [\n { id: 'num', typeid: 'Int16' },\n { id: 'bool', typeid: 'Bool' },\n { id: 'string', typeid: 'String' }\n ]\n };\n\n var ConstantNoValue = {\n typeid: 'SimpleTest:ConstantNoValue-1.0.0',\n constants: [\n { id: 'int', typeid: 'Int32' },\n { id: 'bool', typeid: 'Bool' },\n { id: 'string', typeid: 'String' },\n { id: 'array', typeid: 'Int16', context: 'array' },\n { id: 'array_typed', typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0', context: 'array' },\n { id: 'set', typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0', context: 'set' },\n { id: 'map', typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0', context: 'map' }\n ]\n };\n\n var ConstantNoValueInherited = {\n typeid: 'SimpleTest:ConstantNoValueInherited-1.0.0',\n inherits: 'SimpleTest:ConstantNoValue-1.0.0',\n constants: [\n { id: 'int', typeid: 'Int32', value: 100 },\n { id: 'bool', typeid: 'Bool', value: true },\n { id: 'string', typeid: 'String', value: 'I am a string' },\n { id: 'array', typeid: 'Int16', context: 'array', value: [100, 200] },\n {\n id: 'array_typed', typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0', context: 'array', value: [\n { num: 100 },\n { num: 200, string: 'I am a string 2', bool: true }]\n },\n {\n id: 'set', typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0', context: 'set', value: [\n { num: 100 },\n { num: 200, string: 'I am a string 2', bool: true }]\n },\n {\n id: 'map', typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0', context: 'map', value: {\n key1: { num: 100 },\n key2: { num: 200, string: 'I am a string 2', bool: true }\n }\n }\n ]\n };\n\n PropertyFactory.register(ConstantNoValueEntry);\n PropertyFactory.register(ConstantNoValue);\n PropertyFactory.register(ConstantNoValueInherited);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantNoValue-1.0.0');\n var instanceInherited = PropertyFactory.create('SimpleTest:ConstantNoValueInherited-1.0.0');\n\n expect(instance.get('int').getValue()).to.equal(0);\n expect(instance.get('bool').getValue()).to.equal(false);\n expect(instance.get('string').getValue()).to.equal('');\n expect(instance.get('array').getValues()).to.deep.equal([]);\n expect(instance.get('array_typed').getValues()).to.deep.equal([]);\n expect(instance.get('set').getAsArray()).to.deep.equal([]);\n expect(instance.get('map').getEntriesReadOnly()).to.deep.equal({});\n\n expect(instanceInherited.get('int').getValue()).to.equal(100);\n expect(instanceInherited.get('bool').getValue()).to.equal(true);\n expect(instanceInherited.get('string').getValue()).to.equal('I am a string');\n expect(instanceInherited.get('array').getValues()).to.deep.equal([100, 200]);\n\n let arr = instanceInherited.get('array_typed').getValues();\n expect(arr[0]['num']).to.equal(100);\n expect(arr[0]['string']).to.equal('');\n expect(arr[0]['bool']).to.equal(false);\n expect(arr[1]['num']).to.equal(200);\n expect(arr[1]['string']).to.equal('I am a string 2');\n expect(arr[1]['bool']).to.equal(true);\n\n let set = instanceInherited.get('set').getAsArray();\n\n expect(set[0].get('num').getValue()).to.equal(100);\n expect(set[0].get('string').getValue()).to.equal('');\n expect(set[0].get('bool').getValue()).to.equal(false);\n expect(set[1].get('num').getValue()).to.equal(200);\n expect(set[1].get('string').getValue()).to.equal('I am a string 2');\n expect(set[1].get('bool').getValue()).to.equal(true);\n\n let map = instanceInherited.get('map').getEntriesReadOnly();\n expect(map.key1.get('num').getValue()).to.equal(100);\n expect(map.key1.get('string').getValue()).to.equal('');\n expect(map.key1.get('bool').getValue()).to.equal(false);\n expect(map.key2.get('num').getValue()).to.equal(200);\n expect(map.key2.get('string').getValue()).to.equal('I am a string 2');\n expect(map.key2.get('bool').getValue()).to.equal(true);\n });\n\n describe('#Polymorphic', function () {\n var ConstantPolyBase = {\n typeid: 'SimpleTest:ConstantPolyBase-1.0.0',\n inherits: ['NamedProperty'],\n constants: [\n { id: 'num', typeid: 'Uint32', value: 111 }\n ]\n };\n\n var ConstantPolySub = {\n typeid: 'SimpleTest:ConstantPolySub-1.0.0',\n inherits: 'SimpleTest:ConstantPolyBase-1.0.0',\n constants: [\n { id: 'num', typeid: 'Uint32', value: 222 },\n { id: 'str', typeid: 'String', value: 'Sub' }\n ]\n };\n\n var ConstantPolySubSub = {\n typeid: 'SimpleTest:ConstantPolySubSub-1.0.0',\n inherits: 'SimpleTest:ConstantPolySub-1.0.0',\n constants: [\n { id: 'num', typeid: 'Uint32', value: 333 },\n { id: 'num2', typeid: 'Uint32', value: 111 },\n { id: 'str', typeid: 'String', value: 'SubSub' }\n ]\n };\n\n beforeEach(function () {\n PropertyFactory._clear();\n PropertyFactory.register(ConstantPolyBase);\n PropertyFactory.register(ConstantPolySub);\n PropertyFactory.register(ConstantPolySubSub);\n });\n\n it('should set constant polymorphic values for non-primitive constants', function () {\n var ConstantPolyContainer = {\n typeid: 'SimpleTest:ConstantPolyContainer-1.0.0',\n constants: [\n {\n id: 'polySub', typeid: 'SimpleTest:ConstantPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:ConstantPolySub-1.0.0', value: { num: 333, str: 'PolySub' } }\n },\n {\n id: 'polySubSub', typeid: 'SimpleTest:ConstantPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:ConstantPolySubSub-1.0.0', value: { num: 444, str: 'PolySubSub' } }\n }\n ]\n };\n\n PropertyFactory.register(ConstantPolyContainer);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantPolyContainer-1.0.0');\n expect(instance.get('polySub').get('num').getValue()).to.equal(333);\n expect(instance.get('polySub').get('str').getValue()).to.equal('PolySub');\n\n expect(instance.get('polySubSub').get('num').getValue()).to.equal(444);\n expect(instance.get('polySubSub').get('str').getValue()).to.equal('PolySubSub');\n expect(instance.get('polySubSub').get('num2').getValue()).to.equal(111);\n });\n\n it('should pass when setting a constant typedValue that doesnt have a value.', function () {\n var ConstantPolyNoValueContainer = {\n typeid: 'SimpleTest:ConstantPolyNoValueContainer-1.0.0',\n constants: [{\n id: 'polySub', typeid: 'SimpleTest:ConstantPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:ConstantPolySub-1.0.0' }\n }]\n };\n\n PropertyFactory.register(ConstantPolyNoValueContainer);\n var prop = PropertyFactory.create('SimpleTest:ConstantPolyNoValueContainer-1.0.0');\n\n expect(prop.get('polySub').get('str').value).to.equal('Sub');\n });\n\n it('should fail when setting a constant typedValue that doesnt have a typeid.', function () {\n var ConstantPolyNoTypeIdContainer = {\n typeid: 'SimpleTest:ConstantPolyNoTypeIdContainer-1.0.0',\n constants: [{\n id: 'polySub', typeid: 'SimpleTest:ConstantPolyBase-1.0.0',\n typedValue: { value: { num: 333, str: 'PolySub' } }\n }]\n };\n\n PropertyFactory.register(ConstantPolyNoTypeIdContainer);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:ConstantPolyNoTypeIdContainer-1.0.0'))\n .to.throw(MSG.FIELD_TYPEID_IS_REQUIRED + 'typedValue SimpleTest:ConstantPolyBase-1.0.0');\n });\n\n it('should set a constant polymorphic value for a non-primitive array', function () {\n var ConstantPolyArrayContainer = {\n typeid: 'SimpleTest:ConstantPolyArrayContainer-1.0.0',\n constants: [\n {\n id: 'array', typeid: 'SimpleTest:ConstantPolyBase-1.0.0', context: 'array', typedValue: [\n { typeid: 'SimpleTest:ConstantPolySub-1.0.0' },\n { typeid: 'SimpleTest:ConstantPolySub-1.0.0', value: { str: 'ArrSub' } },\n { typeid: 'SimpleTest:ConstantPolySubSub-1.0.0', value: { str: 'ArrSubSub' } }\n ]\n }\n ]\n };\n\n PropertyFactory.register(ConstantPolyArrayContainer);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantPolyArrayContainer-1.0.0');\n expect(instance.get('array').get(0).get('num').value).to.equal(222);\n expect(instance.get('array').get(0).get('str').value).to.equal('Sub');\n expect(instance.get('array').get(1).get('num').value).to.equal(222);\n expect(instance.get('array').get(1).get('str').value).to.equal('ArrSub');\n expect(instance.get('array').get(2).get('num').value).to.equal(333);\n expect(instance.get('array').get(2).get('str').value).to.equal('ArrSubSub');\n expect(instance.get('array').get(2).get('num2').value).to.equal(111);\n });\n\n it('should set a constant polymorphic value for a non-primitive set', function () {\n var ConstantPolySetContainer = {\n typeid: 'SimpleTest:ConstantPolySetContainer-1.0.0',\n constants: [\n {\n id: 'set', typeid: 'SimpleTest:ConstantPolyBase-1.0.0', context: 'set', typedValue: [\n { typeid: 'SimpleTest:ConstantPolySub-1.0.0' },\n { typeid: 'SimpleTest:ConstantPolySub-1.0.0', value: { str: 'ArrSub' } },\n { typeid: 'SimpleTest:ConstantPolySubSub-1.0.0', value: { str: 'ArrSubSub' } }\n ]\n }\n ]\n };\n\n PropertyFactory.register(ConstantPolySetContainer);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantPolySetContainer-1.0.0');\n\n expect(instance.get('set').getAsArray().length).to.equal(3);\n expect(instance.get('set').getAsArray()[0].get('num').getValue()).to.equal(222);\n expect(instance.get('set').getAsArray()[0].get('str').getValue()).to.equal('Sub');\n expect(instance.get('set').getAsArray()[1].get('num').getValue()).to.equal(222);\n expect(instance.get('set').getAsArray()[1].get('str').getValue()).to.equal('ArrSub');\n expect(instance.get('set').getAsArray()[2].get('num').getValue()).to.equal(333);\n expect(instance.get('set').getAsArray()[2].get('str').getValue()).to.equal('ArrSubSub');\n expect(instance.get('set').getAsArray()[2].get('num2').getValue()).to.equal(111);\n });\n\n it('should set a constant polymorphic value for a non-primitive map', function () {\n var ConstantPolyMapContainer = {\n typeid: 'SimpleTest:ConstantPolyMapContainer-1.0.0',\n constants: [\n {\n id: 'map', typeid: 'SimpleTest:ConstantPolyBase-1.0.0', context: 'map', typedValue: {\n key1: { typeid: 'SimpleTest:ConstantPolySub-1.0.0' },\n key2: { typeid: 'SimpleTest:ConstantPolySub-1.0.0', value: { str: 'ArrSub' } },\n key3: { typeid: 'SimpleTest:ConstantPolySubSub-1.0.0', value: { str: 'ArrSubSub' } }\n }\n }\n ]\n };\n\n PropertyFactory.register(ConstantPolyMapContainer);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantPolyMapContainer-1.0.0');\n\n expect(instance.get('map').getEntriesReadOnly().key1.get('num').getValue()).to.equal(222);\n expect(instance.get('map').getEntriesReadOnly().key1.get('str').getValue()).to.equal('Sub');\n expect(instance.get('map').getEntriesReadOnly().key2.get('num').getValue()).to.equal(222);\n expect(instance.get('map').getEntriesReadOnly().key2.get('str').getValue()).to.equal('ArrSub');\n expect(instance.get('map').getEntriesReadOnly().key3.get('num').getValue()).to.equal(333);\n expect(instance.get('map').getEntriesReadOnly().key3.get('str').getValue()).to.equal('ArrSubSub');\n expect(instance.get('map').getEntriesReadOnly().key3.get('num2').getValue()).to.equal(111);\n });\n\n it('should fail when setting constant polymorphic values not derived from base type', function () {\n var ConstantPoly = {\n typeid: 'SimpleTest:ConstantPoly-1.0.0',\n constants: [\n { id: 'num', typeid: 'Uint32', value: 111 }\n ]\n };\n\n var ConstantPolyUnderivedContainer = {\n typeid: 'SimpleTest:ConstantPolyUnderivedContainer-1.0.0',\n constants: [\n {\n id: 'poly', typeid: 'SimpleTest:ConstantPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:ConstantPoly-1.0.0', value: { num: 333 } }\n }\n ]\n };\n\n PropertyFactory.register(ConstantPoly);\n PropertyFactory.register(ConstantPolyUnderivedContainer);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:ConstantPolyUnderivedContainer-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_MUST_DERIVE_FROM_BASE_TYPE + 'SimpleTest:ConstantPoly-1.0.0');\n });\n\n it('should fail when setting a typedValue to a primitive.', function () {\n var DefaultPrimitiveArrayPoly = {\n typeid: 'SimpleTest:DefaultPrimitivePoly-1.0.0',\n constants: [{\n id: 'int', typeid: 'Int32', typedValue: { typeid: 'Int32', value: 123 }\n }]\n };\n\n PropertyFactory.register(DefaultPrimitiveArrayPoly);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPrimitivePoly-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_FOR_PRIMITIVES_NOT_SUPPORTED + 'int');\n });\n\n it('should fail when setting a typedValue to a primitive array.', function () {\n var DefaultPrimitiveArrayPoly = {\n typeid: 'SimpleTest:DefaultPrimitiveArrayPoly-1.0.0',\n constants: [{\n id: 'array', context: 'array', typeid: 'Int32', typedValue: [{ typeid: 'Int32', value: 123 }]\n }]\n };\n\n PropertyFactory.register(DefaultPrimitiveArrayPoly);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPrimitiveArrayPoly-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_FOR_PRIMITIVES_NOT_SUPPORTED + 'array');\n });\n\n it('should fail when setting a typedValue to a primitive map.', function () {\n var DefaultPrimitiveMapPoly = {\n typeid: 'SimpleTest:DefaultPrimitiveMapPoly-1.0.0',\n constants: [{\n id: 'map', context: 'map', typeid: 'Int32', typedValue: {\n key1: { typeid: 'Int32', value: 1 },\n key2: { typeid: 'Int32', value: 2 }\n }\n }]\n };\n\n PropertyFactory.register(DefaultPrimitiveMapPoly);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPrimitiveMapPoly-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_FOR_PRIMITIVES_NOT_SUPPORTED + 'map');\n });\n });\n });\n\n describe('InstanceOf Type Checking', function () {\n it('Native types pass instanceOf check', function () {\n var contextSingleTypes = ['NodeProperty', 'Enum'];\n var propTypes = ['String', 'Bool', 'Int8', 'Uint8', 'Int16', 'Uint16', 'Int32', 'Int64', 'Uint64', 'Uint32',\n 'Float32', 'Float64', 'Reference'];\n\n var contextSingleTypes = propTypes.concat(['NodeProperty', 'Enum']);\n for (var i = 0; i < contextSingleTypes.length; ++i) {\n var propType = contextSingleTypes[i];\n expect(PropertyFactory.instanceOf(PropertyFactory.create(propType), propType)).to.be.true;\n }\n\n for (var j = 0; j < propTypes.length; ++j) {\n var propType = propTypes[j];\n expect(PropertyFactory.instanceOf(PropertyFactory.create(propType, 'map'), propType, 'map')).to.be.true;\n }\n\n var contextArrayTypes = propTypes.concat(['Enum']);\n for (var k = 0; k < contextArrayTypes.length; ++k) {\n var propType = contextArrayTypes[k];\n expect(PropertyFactory.instanceOf(PropertyFactory.create(propType, 'array'), propType, 'array')).to.be.true;\n }\n });\n\n it('instanceOf check succeeds for schema based properties and native typeids', function () {\n PropertyFactory.register(SimplePoint);\n expect(PropertyFactory.instanceOf(PropertyFactory.create(SimplePoint.typeid), 'BaseProperty')).to.be.true;\n\n const testEnum = {\n inherits: 'Enum',\n typeid: 'test:testEnum-1.0.0',\n properties: [{ id: 'test', value: 1 }]\n };\n PropertyFactory.register(testEnum);\n expect(PropertyFactory.instanceOf(\n PropertyFactory.create(testEnum.typeid, 'array'), 'Enum', 'array')).to.be.true;\n });\n\n it('instanceOf check fails for non native typeids', function () {\n PropertyFactory.register(SimplePoint);\n expect(PropertyFactory.instanceOf(PropertyFactory.create(SimplePoint.typeid), SimplePoint.typeid)).to.be.false;\n });\n });\n});\n\ndescribe('Template registration', function () {\n var ColorID, myPropertyFactory;\n\n before(function () {\n ColorID = require('./validation/goodColorId');\n });\n\n beforeEach(function () {\n this.sinon = sinon.createSandbox();\n this.sinon.stub(console, 'warn');\n myPropertyFactory = new PropertyFactory.constructor();\n });\n\n afterEach(function () {\n this.sinon.restore();\n });\n\n it('should register a versioned template', function () {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n });\n\n it(\n 'should print a warning when registering an existing template that is not different from what is in the registry',\n function () {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-0-0'].original);\n expect(console.warn.callCount).to.equal(1);\n }\n );\n\n it(\n 'should accept registering a different template from what is in the registry if it is semantically equivalent',\n function () {\n\n var testPropertyTypeId = 'TEST:array.Float32-0.0.1';\n var ValuesTemplate1 = {\n typeid: testPropertyTypeId,\n inherits: 'NamedProperty',\n properties: [{\n id: 'values',\n context: 'array',\n typeid: 'Float32'\n }]\n };\n\n var ValuesTemplate2 = {\n typeid: testPropertyTypeId,\n inherits: ['NamedProperty'],\n properties: [{\n id: 'values',\n context: 'array',\n typeid: 'Float32',\n length: 0\n }]\n };\n\n myPropertyFactory.register(ValuesTemplate1);\n expect(myPropertyFactory.register.bind(myPropertyFactory, ValuesTemplate2)).to.not.throw();\n\n }\n );\n\n it(\n 'should throw when registering an existing template version that is different from what is in the registry',\n function () {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n expect(myPropertyFactory.register.bind(\n myPropertyFactory,\n ColorID['1-0-0'].modified)\n ).to.throw(Error);\n }\n );\n\n it('should throw when registering an unversioned template', function () {\n expect(myPropertyFactory.register.bind(\n myPropertyFactory,\n require('./validation/badMissingSemverInTypeid')\n )).to.throw(Error);\n });\n\n it('should throw when registering an invalid versioned template', function () {\n expect(myPropertyFactory.register.bind(\n myPropertyFactory,\n require('./validation/badPrimitiveTypeid')\n )).to.throw(Error);\n });\n\n it('should throw when registering a primitive property through the public API', function () {\n expect(myPropertyFactory.register.bind(\n myPropertyFactory,\n 'String',\n StringProperty)\n ).to.throw(Error);\n });\n\n it('should register templates out of order without any warnings or errors', function () {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-1-0'].goodSemver);\n myPropertyFactory.register(ColorID['1-0-1'].goodSemver);\n\n myPropertyFactory = new PropertyFactory.constructor();\n\n myPropertyFactory.register(ColorID['1-1-0'].goodSemver);\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-0-1'].goodSemver);\n\n expect(console.warn.callCount).to.equal(0);\n });\n\n it('should register a new template with the PATCH version updated', function () {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-0-1'].goodSemver);\n expect(console.warn.callCount).to.equal(0);\n });\n\n it('should register a new template with the MINOR version updated', function () {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-1-0'].goodSemver);\n expect(console.warn.callCount).to.equal(0);\n });\n\n it('should print a warning when registering a new template with the wrong version updated', function () {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-1-0'].badSemver1);\n\n myPropertyFactory = new PropertyFactory.constructor();\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-1-0'].badSemver2);\n\n myPropertyFactory = new PropertyFactory.constructor();\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory._registerRemoteTemplate(ColorID['1-1-0'].badSemver1, generateGUID());\n\n myPropertyFactory = new PropertyFactory.constructor();\n myPropertyFactory.register(ColorID['1-1-0'].badSemver2);\n myPropertyFactory._registerRemoteTemplate(ColorID['1-0-0'].original, generateGUID());\n\n expect(console.warn.callCount).to.equal(4);\n });\n\n it('should register a new template with the MAJOR version updated', function () {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['2-0-0']);\n expect(console.warn.callCount).to.equal(0);\n });\n\n it('should register a versioned remote template', function () {\n myPropertyFactory._registerRemoteTemplate(ColorID['1-0-0'].original, generateGUID());\n });\n\n it(\n 'should pass when registering a versioned remote template that exists' +\n ' in the local registry but is the same from what is locally registered',\n function () {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory._registerRemoteTemplate(ColorID['1-0-0'].original, generateGUID());\n\n myPropertyFactory = new PropertyFactory.constructor();\n\n myPropertyFactory._registerRemoteTemplate(ColorID['1-0-0'].original, generateGUID());\n myPropertyFactory.register(ColorID['1-0-0'].original);\n expect(console.warn.callCount).to.equal(0);\n }\n );\n\n it(\n 'should fail when registering a versioned remote template that exists' +\n ' in the local registry but differs from what is locally registered',\n function () {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n expect(myPropertyFactory._registerRemoteTemplate.bind(\n myPropertyFactory,\n ColorID['1-0-0'].modified,\n generateGUID())\n ).to.throw(Error);\n }\n );\n\n it('should throw when registering an unversioned remote template', function () {\n expect(myPropertyFactory._registerRemoteTemplate.bind(\n myPropertyFactory,\n require('./validation/badMissingSemverInTypeid'),\n generateGUID()\n )).to.throw(Error);\n });\n\n it(\n 'should register a remote template even when there are other versions of the same template in the local registry',\n function () {\n var scope = generateGUID();\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['2-0-0']);\n\n myPropertyFactory._registerRemoteTemplate(ColorID['1-1-0'].goodSemver, scope);\n myPropertyFactory._registerRemoteTemplate(ColorID['1-0-1'].goodSemver, scope);\n expect(console.warn.callCount).to.equal(0);\n }\n );\n\n it(\n 'should register a local template even when there are other versions of the same template in the remote registry',\n function () {\n var scope = generateGUID();\n var scope2 = generateGUID();\n myPropertyFactory._registerRemoteTemplate(ColorID['1-1-0'].goodSemver, scope);\n myPropertyFactory._registerRemoteTemplate(ColorID['1-0-1'].goodSemver, scope);\n myPropertyFactory._registerRemoteTemplate(require('./validation/goodPointId'), scope2);\n myPropertyFactory._registerRemoteTemplate(require('./validation/goodColorPalette'), scope2);\n\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['2-0-0']);\n\n expect(console.warn.callCount).to.equal(0);\n }\n );\n\n it('`registered` event is triggered when registering a template', function (done) {\n var typeid = 'test:schemaReg-1.0.0';\n var registeredEventListener = function (template) {\n expect(template).to.exist;\n expect(template.typeid).to.equal(typeid);\n done();\n };\n\n PropertyFactory.addListener('registered', registeredEventListener);\n\n PropertyFactory.register({\n typeid: typeid\n });\n // We remove the listener to avoid unnecessary calls for later templates registration.\n PropertyFactory.removeListener('registered', registeredEventListener);\n });\n});\n\ndescribe('Only properties and constants that inherit from NamedProperty can have the \"set\" context', function () {\n beforeEach(() => PropertyFactory._clear());\n afterEach(() => PropertyFactory._clear());\n\n describe('Properties', () => {\n describe('should throw when trying to register a set not inheriting from a namedProperty', () => {\n it('declared in a template', () => {\n var templateChild = {\n typeid: 'adsk.test:anotherTestSchema-1.0.0'\n };\n\n var template = {\n typeid: 'adsk.test:testSchema-1.0.0',\n properties: [\n {\n id: 'something',\n context: 'set',\n typeid: 'adsk.test:anotherTestSchema-1.0.0'\n }\n ]\n };\n\n PropertyFactory.register(template);\n PropertyFactory.register(templateChild);\n\n expect(() => {\n PropertyFactory.create(template.typeid);\n }).to.throw(MSG.SET_ONLY_NAMED_PROPS + templateChild.typeid);\n });\n\n it('declared in a template with two level of inheritance', () => {\n var itemParentTemplate = {\n typeid: 'adsk.test:itemParent-1.0.0'\n };\n\n var itemTemplate = {\n typeid: 'adsk.test:item-1.0.0',\n inherits: 'adsk.test:itemParent-1.0.0'\n };\n\n var template = {\n typeid: 'adsk.test:set-1.0.0',\n properties: [\n {\n id: 'something',\n context: 'set',\n typeid: 'adsk.test:item-1.0.0'\n }\n ]\n };\n\n PropertyFactory.register(itemParentTemplate);\n PropertyFactory.register(itemTemplate);\n PropertyFactory.register(template);\n\n expect(() => {\n PropertyFactory.create(template.typeid);\n }).to.throw(MSG.SET_ONLY_NAMED_PROPS + itemTemplate.typeid);\n });\n\n it('when passed as a parameter of the create method', () => {\n var template = {\n typeid: 'adsk.test:test-1.0.0'\n };\n\n PropertyFactory.register(template);\n\n expect(() => {\n PropertyFactory.create(template.typeid, 'set');\n }).to.throw(MSG.SET_ONLY_NAMED_PROPS + template.typeid);\n });\n });\n });\n\n describe('Constants', () => {\n describe('should throw when trying to register a set not inheriting from a namedProperty', () => {\n it('declared in a template', () => {\n var templateChild = {\n typeid: 'adsk.test:anotherTestSchema-1.0.0'\n };\n\n var template = {\n typeid: 'adsk.test:testSchema-1.0.0',\n constants: [\n {\n id: 'something',\n context: 'set',\n typeid: 'adsk.test:anotherTestSchema-1.0.0',\n value: 'hello'\n }\n ]\n };\n\n PropertyFactory.register(template);\n PropertyFactory.register(templateChild);\n\n expect(() => {\n PropertyFactory.create(template.typeid);\n }).to.throw(MSG.SET_ONLY_NAMED_PROPS + templateChild.typeid);\n });\n\n it('declared in a template with two level of inheritance', () => {\n var itemParentTemplate = {\n typeid: 'adsk.test:itemParent-1.0.0'\n };\n\n var itemTemplate = {\n typeid: 'adsk.test:item-1.0.0',\n inherits: 'adsk.test:itemParent-1.0.0'\n };\n\n var template = {\n typeid: 'adsk.test:set-1.0.0',\n constants: [\n {\n id: 'something',\n context: 'set',\n typeid: 'adsk.test:item-1.0.0',\n value: 'hello'\n }\n ]\n };\n\n PropertyFactory.register(itemParentTemplate);\n PropertyFactory.register(itemTemplate);\n PropertyFactory.register(template);\n\n expect(() => {\n PropertyFactory.create(template.typeid);\n }).to.throw(MSG.SET_ONLY_NAMED_PROPS + itemTemplate.typeid);\n });\n var unit = {\n 'annotation': {\n 'description': 'A definite magnitude used as a standard of measurement.',\n 'doc': 'http://docs.adskunits.apiary.io/#introduction/definitions/measurement-units'\n },\n 'typeid': 'autodesk.unit:unit-1.0.0',\n 'constants': [\n {\n 'id': 'name',\n 'typeid': 'String'\n }\n ]\n };\n var quantity = {\n 'annotation': { 'description': 'A quantity typically measured in a particular set of compatible units.' },\n 'typeid': 'autodesk.unit:quantity-1.0.0',\n 'constants': [\n {\n 'id': 'name',\n 'typeid': 'String'\n },\n {\n 'id': 'units',\n 'typeid': 'autodesk.unit:unit-1.0.0',\n 'context': 'array',\n 'typedValue': [],\n 'annotation': { 'description': 'List of all measurement units applicable to the measurable quantity.' }\n }\n ]\n };\n var area = {\n 'annotation': { 'description': 'Area.' },\n 'typeid': 'autodesk.unit.quantity:area-1.0.0',\n 'inherits': ['autodesk.unit:quantity-1.0.0'],\n 'constants': [\n { 'id': 'name', 'value': 'Area' },\n {\n 'id': 'units',\n 'typedValue': [\n { 'typeid': 'autodesk.unit.unit:squareCentimeters-1.0.0' }\n ]\n }\n ]\n };\n var centimeter = {\n 'annotation': { 'description': 'Square centimeters.' },\n 'typeid': 'autodesk.unit.unit:squareCentimeters-1.0.0',\n 'inherits': ['autodesk.unit:unit-1.0.0'],\n 'constants': [\n { 'id': 'name', 'value': 'Square centimeters' }\n ]\n };\n it('@bugfix should support constant which inhirets from a polymorphic array', () => {\n PropertyFactory.register(unit);\n PropertyFactory.register(quantity);\n PropertyFactory.register(area);\n PropertyFactory.register(centimeter);\n var centimeterProp = PropertyFactory.create(centimeter.typeid);\n\n var areaProp = PropertyFactory.create(area.typeid);\n\n expect(areaProp.get('units').get(0).get('name').value).to.equal(centimeterProp.get('name').value);\n });\n });\n });\n});\n\ndescribe('Async validation', function () {\n var TemplateValidator;\n var inheritsFromAsync = function (child, ancestor) {\n return new Promise(function (resolve, reject) {\n setTimeout(function () {\n try {\n resolve(PropertyFactory.inheritsFrom(child, ancestor));\n } catch (error) {\n reject(error);\n }\n }, 0);\n });\n };\n\n var hasSchemaAsync = function (typeid) {\n return new Promise(function (resolve, reject) {\n setTimeout(function () {\n resolve(PropertyFactory._has(typeid));\n }, 0);\n });\n };\n\n before(function () {\n TemplateValidator = require('@fluid-experimental/property-changeset').TemplateValidator;\n });\n\n it('can validate asynchronously', function () {\n var templateValidator = new TemplateValidator({\n inheritsFromAsync: inheritsFromAsync,\n hasSchemaAsync: hasSchemaAsync\n });\n\n var templatePrevious = JSON.parse(JSON.stringify(require('./validation/goodPointId')));\n var template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-0.9.9';\n return templateValidator.validateAsync(template, templatePrevious).then(function (result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.VERSION_REGRESSION_1);\n });\n });\n\n it('can perform context validation asynchronously', function (done) {\n var templateValidator = new TemplateValidator({\n inheritsFromAsync: inheritsFromAsync,\n hasSchemaAsync: hasSchemaAsync\n });\n\n // Doesn't inherit from 'NamedProperty'. Will cause an error\n var grandParentSchema = {\n 'typeid': 'test:grandparentschema-1.0.0'\n };\n\n var parentSchema = {\n 'typeid': 'test:parentschema-1.0.0',\n 'inherits': ['test:grandparentschema-1.0.0']\n };\n\n var childSchema = {\n 'typeid': 'test:childchema-1.0.0',\n properties: [\n {\n id: 'set',\n typeid: 'test:parentschema-1.0.0',\n context: 'set'\n }\n ]\n };\n\n PropertyFactory.register(grandParentSchema);\n PropertyFactory.register(parentSchema);\n\n templateValidator.validateAsync(childSchema).then(function (result) {\n done(new Error('Should not be valid!'));\n }).catch(function (error) {\n expect(error).to.exist;\n done();\n });\n });\n});\n\ndescribe('inheritsFrom() method', () => {\n beforeEach(() => {\n PropertyFactory._clear();\n PropertyFactory.register([\n {\n typeid: 'autodesk.examples:test.set-1.0.0',\n inherits: 'NamedProperty'\n }\n ]);\n });\n\n it('should recognize that the Int8 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Int8', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Uint8 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Uint8', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Int16 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Int16', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Uint16 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Uint16', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Int32 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Int32', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Uint32 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Uint32', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Float32 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Float32', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Int64 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Int64', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Uint64 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Uint64', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Float64 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Float64', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Bool only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Bool', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Reference only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Reference', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Enum only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Enum', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the String inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('String', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the NodeProperty inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('NodeProperty', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the ContainerProperty inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('ContainerProperty', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the NamedProperty inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('NamedProperty', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n\n it('should recognize that the NamedNodeProperty inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('NamedNodeProperty', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n\n it('should recognize that the NodeProperty inherits from ContainerProperty', () => {\n const result = PropertyFactory.inheritsFrom('NodeProperty', 'ContainerProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the NamedProperty inherits from ContainerProperty', () => {\n const result = PropertyFactory.inheritsFrom('NamedProperty', 'ContainerProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the String inherits from ContainerProperty', () => {\n const result = PropertyFactory.inheritsFrom('String', 'ContainerProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the NamedNodeProperty inherits from NamedProperty', () => {\n const result = PropertyFactory.inheritsFrom('NamedNodeProperty', 'NamedProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the NamedNodeProperty inherits from NodeProperty', () => {\n const result = PropertyFactory.inheritsFrom('NamedNodeProperty', 'NodeProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the test set that inherits from NamedNodeProperty also inherits from BaseProperty',\n () => {\n PropertyFactory._reregister({ typeid: 'autodesk.examples:test.set-1.0.0', inherits: 'NamedNodeProperty' });\n const result = PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the test set that inherits from NamedNodeProperty' +\n ' also inherits from AbstractStaticCollectionProperty',\n () => {\n PropertyFactory._reregister({ typeid: 'autodesk.examples:test.set-1.0.0', inherits: 'NamedNodeProperty' });\n const result = PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0',\n 'AbstractStaticCollectionProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the test set that inherits from NamedNodeProperty also inherits from NodeProperty',\n () => {\n PropertyFactory._reregister({ typeid: 'autodesk.examples:test.set-1.0.0', inherits: 'NamedNodeProperty' });\n const result = PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'NodeProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the test set that inherits from NamedNodeProperty also inherits from NamedProperty',\n () => {\n PropertyFactory._reregister({ typeid: 'autodesk.examples:test.set-1.0.0', inherits: 'NamedNodeProperty' });\n const result = PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'NamedProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the testSet doesn\\'t inherits from foe', () => {\n const result = PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'foe');\n\n expect(result).to.be.false;\n });\n\n it('should return true if in_templateTypeid = in_baseTypeid', () => {\n const result = PropertyFactory.inheritsFrom(\n 'autodesk.examples:test.set-1.0.0',\n 'autodesk.examples:test.set-1.0.0'\n );\n\n expect(result).to.be.true;\n });\n\n it('should return false if in_templateTypeid = in_baseTypeid but in_options.includeSelf is false', () => {\n const result = PropertyFactory.inheritsFrom(\n 'autodesk.examples:test.set-1.0.0',\n 'autodesk.examples:test.set-1.0.0',\n { includeSelf: false }\n );\n\n expect(result).to.be.false;\n });\n\n describe('Caching', () => {\n beforeEach(() => {\n // add a second schema for the cache tests\n PropertyFactory.register({\n typeid: 'autodesk.examples:test.set-2.0.0',\n inherits: 'NamedProperty'\n });\n });\n\n it('should cache results', () => {\n PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'NamedProperty');\n PropertyFactory.inheritsFrom('autodesk.examples:test.set-2.0.0', 'NamedProperty');\n\n const expectedResults = {\n 'autodesk.examples:test.set-1.0.0': {\n BaseProperty: true,\n AbstractStaticCollectionProperty: true,\n NamedProperty: true\n },\n 'autodesk.examples:test.set-2.0.0': {\n BaseProperty: true,\n AbstractStaticCollectionProperty: true,\n NamedProperty: true\n }\n };\n\n expect(PropertyFactory._inheritanceCache).to.deep.equal(expectedResults);\n });\n\n it('should refresh the cache when _reregister() is called', () => {\n PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'NamedProperty');\n\n PropertyFactory._reregister({ typeid: 'autodesk.examples:test.set-1.0.0', inherits: 'NodeProperty' });\n expect(PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'NodeProperty')).to.be.true;\n\n PropertyFactory._reregister({ typeid: 'autodesk.examples:test.set-2.0.0', inherits: 'NodeProperty' });\n expect(PropertyFactory.inheritsFrom('autodesk.examples:test.set-2.0.0', 'NodeProperty')).to.be.true;\n\n const expectedResults = {\n 'autodesk.examples:test.set-1.0.0': {\n BaseProperty: true,\n AbstractStaticCollectionProperty: true,\n NodeProperty: true\n },\n 'autodesk.examples:test.set-2.0.0': {\n BaseProperty: true,\n AbstractStaticCollectionProperty: true,\n NodeProperty: true\n }\n };\n\n expect(PropertyFactory._inheritanceCache).to.deep.equal(expectedResults);\n });\n\n it('should flush the cache when _clear() is called', () => {\n expect(PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'NamedProperty')).to.be.true;\n expect(PropertyFactory.inheritsFrom('autodesk.examples:test.set-2.0.0', 'NamedProperty')).to.be.true;\n\n PropertyFactory._clear();\n expect(PropertyFactory._inheritanceCache).to.be.empty;\n });\n });\n});\n\ndescribe('Remote template scope collection', () => {\n var ColorID;\n var scope = () => PropertyFactory._remoteScopedAndVersionedTemplates;\n\n before(() => {\n ColorID = require('./validation/goodColorId');\n });\n\n beforeEach(() => {\n PropertyFactory._clear();\n });\n\n it('should collect registered remote templates in the scope.', () => {\n const scopeGuid = generateGUID();\n const templateA = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'testA:ColorID-1.0.0' });\n const templateB = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'testB:ColorID-1.0.0' });\n\n PropertyFactory._registerRemoteTemplate(templateA, scopeGuid);\n PropertyFactory._registerRemoteTemplate(templateB, scopeGuid);\n\n expect(scope().getCount()).to.be.equal(1);\n expect(scope().has(scopeGuid)).to.be.true;\n expect(scope().item(scopeGuid).getCount()).to.be.equal(2);\n\n expect(scope().item(scopeGuid).has('testA:ColorID')).to.be.true;\n expect(scope().item(scopeGuid).item('testA:ColorID').getKeys())\n .to.have.members(['1.0.0']);\n\n expect(scope().item(scopeGuid).has('testB:ColorID')).to.be.true;\n expect(scope().item(scopeGuid).item('testB:ColorID').getKeys())\n .to.have.members(['1.0.0']);\n });\n\n it('should remove a specific scope from the scope collection when _removeScope is called.', () => {\n const scopeGuidA = generateGUID();\n const scopeGuidB = generateGUID();\n const templateA = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'testA:ColorID-1.0.0' });\n const templateB = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'testB:ColorID-1.0.0' });\n\n PropertyFactory._registerRemoteTemplate(templateA, scopeGuidA);\n PropertyFactory._registerRemoteTemplate(templateB, scopeGuidB);\n\n expect(scope().getCount()).to.be.equal(2);\n expect(scope().has(scopeGuidA)).to.be.true;\n expect(scope().has(scopeGuidB)).to.be.true;\n\n PropertyFactory._removeScope(scopeGuidA);\n\n expect(scope().getCount()).to.be.equal(1);\n expect(scope().has(scopeGuidA)).to.be.false;\n expect(scope().has(scopeGuidB)).to.be.true;\n });\n\n it('should be able to get a specific template from the scope collection.', () => {\n const scopeGuidA = generateGUID();\n const scopeGuidB = generateGUID();\n const templateA = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'testA:ColorID-1.0.0' });\n const templateB = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'testB:ColorID-1.0.0' });\n\n PropertyFactory._registerRemoteTemplate(templateA, scopeGuidA);\n PropertyFactory._registerRemoteTemplate(templateB, scopeGuidB);\n\n expect(PropertyFactory._get('testA:ColorID-1.0.0', undefined, scopeGuidA).typeid)\n .to.be.equal('testA:ColorID-1.0.0');\n\n expect(PropertyFactory._get('testB:ColorID-1.0.0', undefined, scopeGuidB).typeid)\n .to.be.equal('testB:ColorID-1.0.0');\n });\n\n it('should be cleared when the PropertyFactory is.', () => {\n const scopeGuid = generateGUID();\n const template = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'test:ColorID-1.0.0' });\n\n PropertyFactory._registerRemoteTemplate(template, scopeGuid);\n PropertyFactory._clear();\n\n expect(scope().getCount()).to.be.equal(0);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"propertyFactory.spec.js","sourceRoot":"","sources":["../../src/test/propertyFactory.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 sinon */\n/* eslint-disable no-unused-expressions */\n\nconst { MSG } = require('@fluid-experimental/property-common').constants;\nconst { generateGUID } = require('@fluid-experimental/property-common').GuidUtils;\nconst { PropertyFactory } = require('..');\nconst { StringProperty } = require('../properties/stringProperty');\n\ndescribe('PropertyFactory', function() {\n beforeEach(() => {\n PropertyFactory._clear();\n });\n\n let SimplePoint = {\n typeid: 'SimpleTest:PointID-1.0.0',\n properties: [\n {\n id: 'position',\n properties: [\n {\n id: 'x',\n typeid: 'Float32',\n },\n {\n id: 'y',\n typeid: 'Float32',\n },\n {\n id: 'z',\n typeid: 'Float32',\n },\n ],\n },\n {\n id: 'normal',\n typeid: 'Float32',\n context: 'array',\n size: 3,\n },\n ],\n };\n\n it('is not a function.', function(done) {\n expect(PropertyFactory).to.not.be.a('function');\n expect(PropertyFactory).to.be.an('object');\n done();\n });\n\n it('should validate a simple file', function() {\n var testFile1 = require('./validation/goodPointId');\n var result = PropertyFactory.validate(testFile1);\n expect(result.isValid).to.equal(true);\n });\n\n it('should fail an invalid file', function() {\n var testFile1 = require('./validation/badPrimitiveTypeid');\n var result = PropertyFactory.validate(testFile1);\n expect(result.isValid).to.equal(false);\n expect(result.errors.length).to.be.greaterThan(0);\n expect(result.unresolvedTypes.length).to.equal(1);\n });\n\n it('should create and initialize a property set', function() {\n PropertyFactory.register(SimplePoint);\n var goodPointTest = PropertyFactory.create('SimpleTest:PointID-1.0.0');\n expect(goodPointTest.resolvePath('normal')._dataArrayRef._buffer.length).to.equal(3);\n\n var goodPoint = PropertyFactory.create('SimpleTest:PointID-1.0.0', null, {\n position: {\n x: 0.0,\n y: 1.0,\n z: 2.0,\n },\n normal: [1.23, 2.3399999141693115, 3.45],\n });\n\n expect(goodPoint.resolvePath('normal').get(1)).to.equal(2.3399999141693115);\n });\n\n it('should throw on unknown Template', function() {\n var insertUnknownPropertyChangeSet = {\n insert: {\n 'UnknownProperty': {\n 'test': {\n String: {\n 'unknownStringProperty': 'Hi There!',\n },\n },\n },\n },\n };\n var root = PropertyFactory.create('NodeProperty');\n expect(\n function() {\n root.deserialize(insertUnknownPropertyChangeSet);\n }).to.throw();\n });\n\n it('should throw when trying to create with undefined as typeid', function() {\n var creationFunction = function() {\n PropertyFactory.create(undefined);\n };\n expect(creationFunction).to.throw(MSG.UNKNOWN_TYPEID_SPECIFIED + 'undefined');\n });\n\n it('should throw when trying to create with a number as typeid', function() {\n var creationFunction = function() {\n PropertyFactory.create(1);\n };\n expect(creationFunction).to.throw(MSG.UNKNOWN_TYPEID_SPECIFIED + '1');\n });\n\n it('should support the creation of a polymorphic collection', function() {\n var testSet = {\n typeid: 'autodesk.examples:test.set-1.0.0',\n inherits: 'NamedProperty',\n };\n PropertyFactory.register(testSet);\n\n var testTemplate = {\n typeid: 'autodesk.examples:polymorphic.collection.test-1.0.0',\n properties: [\n { id: 'testMap', context: 'map' },\n { id: 'testSet', typeid: 'autodesk.examples:test.set-1.0.0', context: 'set' },\n // TODO: add array as soon as polymorphic arrays are supported: {id: 'testArray', context:'array' }\n ],\n };\n\n PropertyFactory._reregister(testTemplate);\n var instance = PropertyFactory.create('autodesk.examples:polymorphic.collection.test-1.0.0');\n\n expect(instance._properties.testMap).to.exist;\n expect(instance._properties.testMap.getContext()).to.equal('map');\n expect(instance._properties.testMap.getTypeid()).to.equal('BaseProperty');\n\n expect(instance._properties.testSet).to.exist;\n expect(instance._properties.testSet.getContext()).to.equal('set');\n expect(PropertyFactory.inheritsFrom(instance._properties.testSet.getTypeid(), 'NamedProperty')).to.equal(true);\n });\n\n it('should return correct template based on typeid', function() {\n PropertyFactory.register(SimplePoint);\n var returnedTemplate = JSON.parse(JSON.stringify(PropertyFactory.getTemplate(SimplePoint.typeid)));\n if (!SimplePoint.annotation) {\n delete returnedTemplate.annotation;\n }\n if (!SimplePoint.length) {\n delete returnedTemplate.length;\n }\n delete returnedTemplate._serializedParams;\n\n expect(returnedTemplate).to.deep.equal(SimplePoint);\n expect(PropertyFactory.getTemplate('Adsk.Library:Colors.ColorPalette-1.0.0')).to.be.undefined;\n });\n\n describe('Inheritance', function() {\n beforeEach(function() {\n PropertyFactory._clear();\n\n var Shape = {\n typeid: 'SimpleTest:Shape-1.0.0',\n properties: [{\n id: 'props', properties: [\n { id: 'x', typeid: 'Float32' },\n { id: 'y', typeid: 'Float32' },\n {\n id: 'size', properties: [\n { id: 'width', typeid: 'Float32' },\n { id: 'height', typeid: 'Float32' },\n {\n id: 'border', properties: [\n { id: 'weight', typeid: 'Int32' }],\n }],\n }],\n }],\n };\n PropertyFactory.register(Shape);\n\n var Color = {\n typeid: 'SimpleTest:Color-1.0.0',\n properties: [\n { id: 'stroke', typeid: 'String' },\n {\n id: 'fill', properties: [\n { id: 'rgb', typeid: 'String' }],\n }],\n };\n PropertyFactory.register(Color);\n\n var EntryWithOverriddenDefaults = {\n typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'string', typeid: 'String', value: 'entry_string' },\n ],\n };\n PropertyFactory.register(EntryWithOverriddenDefaults);\n\n var EntryWithOverriddenPolyDefaults = {\n typeid: 'SimpleTest:EntryWithOverriddenPolyDefaults-1.0.0',\n inherits: ['SimpleTest:EntryWithOverriddenDefaults-1.0.0'],\n properties: [\n { id: 'string', typeid: 'String', value: 'entry_string' },\n ],\n };\n PropertyFactory.register(EntryWithOverriddenPolyDefaults);\n\n var DynamicWithOverriddenDefaults = {\n typeid: 'SimpleTest:DynamicWithOverriddenDefaults-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32' },\n {\n id: 'dynamic', properties: [\n { id: 'dynamic_string', typeid: 'String' },\n ],\n },\n ],\n };\n PropertyFactory.register(DynamicWithOverriddenDefaults);\n });\n\n it('should allow the creation of an inherited type', function() {\n var Square = {\n typeid: 'SimpleTest:Square-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0'],\n properties: [\n { id: 'area', typeid: 'Float32' },\n ],\n };\n\n PropertyFactory.register(Square);\n\n var square = PropertyFactory.create('SimpleTest:Square-1.0.0');\n\n expect(square._getChildrenCount()).to.equal(2);\n expect(square.get('props')).to.exist;\n expect(square.get('area')).to.exist;\n });\n\n it('should inherit constants', function() {\n var ShapeWithConstant = {\n typeid: 'SimpleTest:ShapeWithConstant-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0'],\n constants: [\n { id: 'originX', typeid: 'Int8', value: 10 },\n ],\n };\n\n var SquareWithConstant = {\n typeid: 'SimpleTest:SquareWithConstant-1.0.0',\n inherits: ['SimpleTest:ShapeWithConstant-1.0.0'],\n constants: [\n { id: 'originY', typeid: 'Int8', value: 20 },\n ],\n };\n\n PropertyFactory.register(ShapeWithConstant);\n PropertyFactory.register(SquareWithConstant);\n\n var square = PropertyFactory.create('SimpleTest:ShapeWithConstant-1.0.0');\n var square = PropertyFactory.create('SimpleTest:SquareWithConstant-1.0.0');\n\n expect(square._getChildrenCount()).to.equal(3);\n expect(square.get('props')).to.exist;\n expect(square.get('originX')).to.exist;\n expect(square.get('originY')).to.exist;\n\n expect(square.get('originX').getValue()).to.equal(10);\n expect(square.get('originY').getValue()).to.equal(20);\n });\n\n it('Will complete constants definition from inherited template', function() {\n var template1 = {\n typeid: 'consttest:template-1.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'hello',\n annotation: { description: 'The first constant.' },\n },\n {\n id: 'const2',\n typeid: 'String',\n value: ['hello'],\n context: 'array',\n annotation: { description: 'The second constant.' },\n },\n ],\n };\n\n var testedTemplate = {\n typeid: 'consttest:template-2.0.0',\n inherits: 'consttest:template-1.0.0',\n constants: [\n {\n id: 'const1',\n value: 'hello2',\n },\n {\n id: 'const2',\n value: ['hello2'],\n },\n ],\n };\n\n PropertyFactory.register(testedTemplate);\n PropertyFactory.register(template1);\n\n var tested = PropertyFactory.create('consttest:template-2.0.0');\n expect(tested._getChildrenCount()).to.equal(2);\n expect(tested.get('const1')).to.exist;\n expect(tested.get('const2')).to.exist;\n expect(tested.get('const1').getValue()).to.equal('hello2');\n expect(tested.get('const2').getValues()).to.deep.equal(['hello2']);\n });\n\n it('Will throw because typeid is still missing at creation', function() {\n var template1 = {\n typeid: 'consttest2:template-1.0.0',\n constants: [\n {\n id: 'const2',\n typeid: 'String',\n value: 'hello',\n annotation: { description: 'The first constant.' },\n },\n ],\n };\n\n var testedTemplate = {\n typeid: 'consttest2:template-2.0.0',\n inherits: 'consttest2:template-1.0.0',\n constants: [\n {\n id: 'const1',\n value: 'hello2',\n },\n ],\n };\n\n PropertyFactory.register(template1);\n PropertyFactory.register(testedTemplate);\n\n try {\n PropertyFactory.create('consttest2:template-2.0.0');\n } catch (error) {\n expect(error.message).to.include(\n 'PF-043: Field \"typeid\" is required.' +\n ' It is the \"typeid\" of the resulting PropertySets Template.const1.typeid',\n );\n }\n });\n\n it('Will throw because of a type mismatch when creating template', function() {\n var template1 = {\n typeid: 'consttest3:template-1.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'hello',\n annotation: { description: 'The first constant.' },\n },\n ],\n };\n\n var template2 = {\n typeid: 'consttest3:template-2.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'Uint8',\n value: 3,\n },\n ],\n };\n\n var testedTemplate = {\n typeid: 'consttest3:template-3.0.0',\n inherits: ['consttest3:template-2.0.0', 'consttest3:template-1.0.0'],\n constants: [\n {\n id: 'const1',\n value: 'hello2',\n },\n ],\n };\n\n PropertyFactory.register(template2);\n PropertyFactory.register(template1);\n PropertyFactory.register(testedTemplate);\n\n try {\n PropertyFactory.create('consttest3:template-3.0.0');\n } catch (error) {\n expect(error.message).to.include(\n 'PF-001: Id already exists: const1',\n );\n }\n });\n\n it('Will fail if inheriting constants with the same id from multiple templates', function() {\n var template1 = {\n typeid: 'consttest4:template-1.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'hello',\n },\n {\n id: 'const2',\n typeid: 'Uint8',\n value: 5,\n },\n ],\n };\n\n var template2 = {\n typeid: 'consttest4:template-2.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'bye',\n annotation: { description: 'The first constant.' },\n },\n ],\n };\n\n var testedTemplate = {\n typeid: 'consttest4:template-3.0.0',\n inherits: ['consttest4:template-1.0.0', 'consttest4:template-2.0.0'],\n constants: [\n {\n id: 'const1',\n value: 'hello2',\n },\n {\n id: 'const2',\n value: 14,\n },\n ],\n };\n\n PropertyFactory.register(testedTemplate);\n PropertyFactory.register(template1);\n PropertyFactory.register(template2);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'consttest4:template-3.0.0'))\n .to.throw(MSG.OVERWRITING_ID + 'const1');\n });\n\n it('Will allow to register the same inherited template again', function() {\n var template1 = {\n typeid: 'consttest5:template-1.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'hello',\n annotation: { description: 'The first constant.' },\n },\n ],\n };\n\n var testedTemplate = {\n typeid: 'consttest5:template-2.0.0',\n inherits: 'consttest5:template-1.0.0',\n constants: [\n {\n id: 'const1',\n value: 'hello2',\n },\n ],\n };\n\n PropertyFactory.register(template1);\n PropertyFactory.register(testedTemplate);\n PropertyFactory.register(testedTemplate);\n });\n\n it('Will not allow to register a different template under the same id', function() {\n var template1 = {\n typeid: 'consttest6:template-1.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'hello',\n annotation: { description: 'The first constant.' },\n },\n ],\n };\n\n var testedTemplate = {\n typeid: 'consttest6:template-2.0.0',\n inherits: 'consttest6:template-1.0.0',\n constants: [\n {\n id: 'const1',\n value: 'hello2',\n },\n ],\n };\n\n var testedTemplate2 = {\n typeid: 'consttest6:template-2.0.0',\n inherits: 'consttest6:template-1.0.0',\n constants: [\n {\n id: 'const1',\n value: 'hello3',\n },\n ],\n };\n\n try {\n PropertyFactory.register(template1);\n PropertyFactory.register(testedTemplate);\n PropertyFactory.register(testedTemplate2);\n throw new Error('Should have failed');\n } catch (error) {\n expect(error.message).to.include(\n 'PF-004: Template structures do not match for typeid: consttest6:template-2.0.0',\n );\n }\n });\n\n it('Wont register if constant id is missing', function() {\n var template1 = {\n typeid: 'consttest7:template-1.0.0',\n constants: [\n {\n id: 'const1',\n typeid: 'String',\n value: 'hello',\n annotation: { description: 'The first constant.' },\n },\n ],\n };\n\n var testedTemplate = {\n typeid: 'consttest7:template-2.0.0',\n inherits: 'consttest7:template-1.0.0',\n constants: [\n {\n value: 'hello2',\n },\n ],\n };\n\n try {\n PropertyFactory.register(template1);\n PropertyFactory.register(testedTemplate);\n throw new Error('Should have failed');\n } catch (error) {\n expect(error.message).to.include(\n 'PF-050: Failed to register typeid = consttest7:template-2.0.0',\n );\n }\n });\n\n it('should allow inheriting from schemas with no properties defined', function() {\n var ShapeAbstract1 = {\n typeid: 'SimpleTest:ShapeAbstract1-1.0.0',\n };\n\n var ShapeAbstract2 = {\n typeid: 'SimpleTest:ShapeAbstract2-1.0.0',\n properties: [\n { id: 'area', properties: [] },\n { id: 'color' },\n ],\n };\n\n var SquareAbstract = {\n typeid: 'SimpleTest:SquareAbstract-1.0.0',\n inherits: ['SimpleTest:ShapeAbstract1-1.0.0', 'SimpleTest:ShapeAbstract2-1.0.0'],\n properties: [\n { id: 'originX', properties: [] },\n { id: 'originY' },\n {\n id: 'color', properties: [\n { id: 'rgb', typeid: 'Int64' },\n ],\n },\n ],\n };\n\n PropertyFactory.register(ShapeAbstract1);\n PropertyFactory.register(ShapeAbstract2);\n PropertyFactory.register(SquareAbstract);\n\n var square = PropertyFactory.create('SimpleTest:SquareAbstract-1.0.0');\n\n expect(square._getChildrenCount()).to.equal(4);\n expect(square.get('area')).to.exist;\n expect(square.get('color')).to.exist;\n expect(square.get('originX')).to.exist;\n expect(square.get('originY')).to.exist;\n expect(square.get(['color', 'rgb'])).to.exist;\n });\n\n it('should allow multiple inheritance', function() {\n var SquareWithColor = {\n typeid: 'SimpleTest:SquareWithColor-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0', 'SimpleTest:Color-1.0.0'],\n properties: [\n { id: 'area', typeid: 'Float32' },\n ],\n };\n\n PropertyFactory.register(SquareWithColor);\n\n var square = PropertyFactory.create('SimpleTest:SquareWithColor-1.0.0');\n\n expect(square._getChildrenCount()).to.equal(4);\n expect(square.get('area')).to.exist;\n expect(square.get('props')).to.exist;\n expect(square.get('stroke')).to.exist;\n expect(square.get('fill')).to.exist;\n });\n\n it('should fail when inheriting from multiple types that have the same property name', function() {\n var Point = {\n typeid: 'SimpleTest:Point-1.0.0',\n properties: [{\n id: 'props', properties: [\n { id: 'x', typeid: 'Float32' },\n { id: 'y', typeid: 'Float32' }],\n }],\n };\n\n var ShapeWithInheritanceError = {\n typeid: 'SimpleTest:ShapeWithInheritanceError-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0', 'SimpleTest:Point-1.0.0'],\n properties: [\n { id: 'weight', typeid: 'Float32' },\n ],\n };\n\n PropertyFactory.register(Point);\n PropertyFactory.register(ShapeWithInheritanceError);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:ShapeWithInheritanceError-1.0.0'))\n .to.throw(MSG.OVERWRITING_ID + 'props');\n });\n\n it('should fail when overriding an inherited typed property', function() {\n var ShapeWithOverridesError = {\n typeid: 'SimpleTest:ShapeWithOverridesError-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0'],\n properties: [{ id: 'props', typeid: 'Float32' }],\n };\n\n PropertyFactory.register(ShapeWithOverridesError);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:ShapeWithOverridesError-1.0.0'))\n .to.throw(MSG.OVERRIDEN_PROP_MUST_HAVE_SAME_FIELD_VALUES_AS_BASE_TYPE);\n });\n\n it('should allow extending inherited nested untyped properties', function() {\n var SquareWithOverrides = {\n typeid: 'SimpleTest:SquareWithOverrides-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0', 'SimpleTest:Color-1.0.0'],\n properties: [\n { id: 'normal', typeid: 'Float32', context: 'array', size: 3 },\n {\n id: 'props', properties: [\n { id: 'z', typeid: 'Float32' },\n {\n id: 'size', properties: [\n { id: 'unit', typeid: 'Int32' },\n {\n id: 'border', properties: [\n { id: 'color', typeid: 'String' }],\n }],\n }],\n },\n {\n id: 'fill', properties: [\n { id: 'unit', typeid: 'Int32' }],\n }],\n };\n\n PropertyFactory.register(SquareWithOverrides);\n\n var square = PropertyFactory.create('SimpleTest:SquareWithOverrides-1.0.0');\n\n expect(square._getChildrenCount()).to.equal(4);\n expect(square.get('normal')).to.exist;\n expect(square.get('props')).to.exist;\n expect(square.get('stroke')).to.exist;\n expect(square.get('fill')).to.exist;\n\n expect(square.get('props')._getChildrenCount()).to.equal(4);\n expect(square.get(['props', 'x'])).to.exist;\n expect(square.get(['props', 'y'])).to.exist;\n expect(square.get(['props', 'z'])).to.exist;\n expect(square.get(['props', 'size'])).to.exist;\n\n expect(square.get(['props', 'size'])._getChildrenCount()).to.equal(4);\n expect(square.get(['props', 'size', 'unit'])).to.exist;\n expect(square.get(['props', 'size', 'border'])).to.exist;\n expect(square.get(['props', 'size', 'width'])).to.exist;\n expect(square.get(['props', 'size', 'height'])).to.exist;\n\n expect(square.get(['props', 'size', 'border'])._getChildrenCount()).to.equal(2);\n expect(square.get(['props', 'size', 'border', 'color'])).to.exist;\n expect(square.get(['props', 'size', 'border', 'weight'])).to.exist;\n\n expect(square.get('fill')._getChildrenCount()).to.equal(2);\n expect(square.get(['fill', 'rgb'])).to.exist;\n expect(square.get(['fill', 'unit'])).to.exist;\n });\n\n it('should support more than one level of inheritance', function() {\n var ShapeWithArea = {\n typeid: 'SimpleTest:ShapeWithArea-1.0.0',\n inherits: ['SimpleTest:Shape-1.0.0'],\n properties: [\n {\n id: 'props', properties: [\n {\n id: 'area', properties: [\n { id: 'length', typeid: 'Float32' }],\n }],\n }],\n };\n\n var SquareWithArea = {\n typeid: 'SimpleTest:SquareWithArea-1.0.0',\n inherits: ['SimpleTest:ShapeWithArea-1.0.0'],\n properties: [\n { id: 'normal', typeid: 'String' },\n {\n id: 'props', properties: [\n { id: 'color', typeid: 'String' },\n {\n id: 'area', properties: [\n { id: 'unit', typeid: 'String' }],\n }],\n }],\n };\n\n PropertyFactory.register(ShapeWithArea);\n PropertyFactory.register(SquareWithArea);\n\n var square = PropertyFactory.create('SimpleTest:SquareWithArea-1.0.0');\n\n expect(square._getChildrenCount()).to.equal(2);\n expect(square.get('normal')).to.exist;\n expect(square.get('props')).to.exist;\n\n expect(square.get('props')._getChildrenCount()).to.equal(5);\n expect(square.get(['props', 'x'])).to.exist;\n expect(square.get(['props', 'y'])).to.exist;\n expect(square.get(['props', 'size'])).to.exist;\n expect(square.get(['props', 'color'])).to.exist;\n expect(square.get(['props', 'area'])).to.exist;\n\n expect(square.get(['props', 'area'])._getChildrenCount()).to.equal(2);\n expect(square.get(['props', 'area', 'unit'])).to.exist;\n expect(square.get(['props', 'area', 'length'])).to.exist;\n });\n\n it('should work with properties named \"length\"', function() {\n var DefaultInitialValue = {\n 'typeid': 'autodesk.product:components.physicalProperties-0.0.0',\n 'properties': [\n {\n 'id': 'mass',\n 'properties': [\n {\n 'id': 'value',\n 'typeid': 'Float64',\n },\n {\n 'id': 'unit',\n 'typeid': 'String',\n },\n ],\n },\n {\n 'id': 'boundingBox',\n 'properties': [\n {\n 'id': 'length',\n 'typeid': 'Float64',\n },\n {\n 'id': 'width',\n 'typeid': 'Float64',\n },\n {\n 'id': 'height',\n 'typeid': 'Float64',\n },\n {\n 'id': 'unit',\n 'typeid': 'String',\n },\n ],\n },\n {\n 'id': 'material',\n 'typeid': 'String',\n },\n ],\n 'annotation': {\n 'description': 'Specialized component storing physical properties computed from a model.',\n },\n };\n\n PropertyFactory.register(DefaultInitialValue);\n\n var prop = PropertyFactory.create('autodesk.product:components.physicalProperties-0.0.0', null, {\n mass: {\n value: 1.2,\n unit: 'units',\n },\n boundingBox: {\n length: 1.2,\n width: 1.4,\n height: 34.2,\n unit: 'units',\n },\n material: 'ABS Plastic',\n });\n\n expect(prop.get('boundingBox').get('length').value).to.equal(1.2);\n });\n\n describe('Overriding default values', function() {\n it('should allow overriding default values', function() {\n var MapNestedWithOverriddenDefaults = {\n typeid: 'SimpleTest:MapNestedWithOverriddenDefaults-1.0.0',\n inherits: ['NamedProperty'],\n properties: [{\n id: 'map_nested', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'map',\n }],\n };\n\n var SetNestedWithOverriddenDefaults = {\n typeid: 'SimpleTest:SetNestedWithOverriddenDefaults-1.0.0',\n inherits: ['NamedProperty'],\n properties: [{\n id: 'set_nested', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'set',\n }],\n };\n\n var ShapeWithOverriddenDefaults = {\n typeid: 'SimpleTest:ShapeWithOverriddenDefaults-1.0.0',\n properties: [\n { id: 'num', typeid: 'Int8', value: 1 },\n { id: 'array', typeid: 'String', value: ['array_string_1', 'array_string_2'], context: 'array' },\n {\n id: 'array_poly', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'array', value: [\n { string: 'entry_string_poly' }],\n },\n {\n id: 'enum', typeid: 'Enum', properties: [{ id: 'solid', value: 1 }, { id: 'dashed', value: 2 }],\n value: 'solid',\n },\n {\n id: 'untyped', properties: [\n { id: 'num', typeid: 'Uint32' },\n { id: 'string', typeid: 'String' },\n ], value: { string: 'untyped_string', num: 1 },\n },\n {\n id: 'template', typeid: 'SimpleTest:DynamicWithOverriddenDefaults-1.0.0', value: {\n num: 1, dynamic: { dynamic_string: 'dynamic_string' },\n },\n },\n {\n id: 'map_primitive', typeid: 'Int32', context: 'map', value: {\n key1: 1,\n key3: 3,\n },\n },\n {\n id: 'map', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'map', value: {\n key1: { string: 'map_string_1' },\n key3: { string: 'map_string_3' },\n },\n },\n {\n id: 'map_poly', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'map', value: {\n key1: { string: 'map_poly_string_1' },\n key3: { string: 'map_poly_string_3' },\n },\n },\n {\n id: 'map_nest', typeid: 'SimpleTest:MapNestedWithOverriddenDefaults-1.0.0', context: 'map', value: {\n key1: {\n map_nested: {\n key1_1: { string: 'map_nested_1_string_1' },\n key1_3: { string: 'map_nested_1_string_3' },\n },\n },\n key3: {\n map_nested: {\n key3_1: { string: 'map_nested_3_string_1' },\n },\n },\n },\n },\n {\n id: 'set', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'set', value: [\n { string: 'set_string_1' },\n { string: 'set_string_2' },\n ],\n },\n {\n id: 'set_poly', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'set', value: [\n { string: 'set_poly_string_1' },\n { string: 'set_poly_string_1' },\n ],\n },\n {\n id: 'set_nest', typeid: 'SimpleTest:SetNestedWithOverriddenDefaults-1.0.0', context: 'set', value: [{\n set_nested: [\n { string: 'set_nested_1_string_1' },\n { string: 'set_nested_1_string_2' },\n ],\n }, {\n set_nested: [\n { string: 'set_nested_3_string_1' },\n { string: 'set_nested_3_string_2' },\n ],\n }],\n },\n ],\n };\n\n var SquareWithOverriddenDefaults = {\n typeid: 'SimpleTest:SquareWithOverriddenDefaults-1.0.0',\n inherits: ['SimpleTest:ShapeWithOverriddenDefaults-1.0.0'],\n properties: [\n { id: 'num', typeid: 'Int8', value: 2 },\n {\n id: 'array', typeid: 'String', value: ['array_string_1_inherited', 'array_string_2_inherited'],\n context: 'array',\n },\n {\n id: 'array_poly', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'array', typedValue:\n [{\n typeid: 'SimpleTest:EntryWithOverriddenPolyDefaults-1.0.0',\n value: { string: 'entry_string_poly_1_inherited' },\n },\n {\n typeid: 'SimpleTest:EntryWithOverriddenPolyDefaults-1.0.0',\n value: { string: 'entry_string_poly_2_inherited' },\n },\n ],\n },\n {\n id: 'enum', typeid: 'Enum', properties: [{ id: 'solid', value: 1 }, { id: 'dashed', value: 2 }],\n value: 'dashed',\n },\n {\n id: 'untyped', properties: [\n { id: 'num', typeid: 'Uint32' },\n { id: 'string', typeid: 'String' },\n ], value: { string: 'untyped_string_inherited', num: 2 },\n },\n {\n id: 'template', typeid: 'SimpleTest:DynamicWithOverriddenDefaults-1.0.0', value: {\n num: 2, dynamic: { dynamic_string: 'dynamic_string_inherited' },\n },\n },\n {\n id: 'map_primitive', typeid: 'Int32', context: 'map', value: {\n key2: 2,\n key3: 3,\n },\n },\n {\n id: 'map', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'map', value: {\n key2: { string: 'map_string_2_inherited' },\n key3: { string: 'map_string_3_inherited' },\n },\n },\n {\n id: 'map_poly', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'map', typedValue: {\n key2: {\n typeid: 'SimpleTest:EntryWithOverriddenPolyDefaults-1.0.0',\n value: { string: 'map_poly_string_2_inherited' },\n },\n key3: {\n typeid: 'SimpleTest:EntryWithOverriddenPolyDefaults-1.0.0',\n value: { string: 'map_poly_string_3_inherited' },\n },\n },\n },\n {\n id: 'map_nest', typeid: 'SimpleTest:MapNestedWithOverriddenDefaults-1.0.0', context: 'map', value: {\n key2: {\n map_nested: {\n key2_2: { string: 'map_nested_2_string_2_inherited' },\n key2_3: { string: 'map_nested_2_string_3_inherited' },\n },\n },\n key3: {\n map_nested: {\n key3_1: { string: 'map_nested_3_string_1_inherited' },\n },\n },\n },\n },\n {\n id: 'set', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'set', value: [\n { string: 'set_string_2_inherited' },\n { string: 'set_string_3_inherited' },\n ],\n },\n {\n id: 'set_poly', typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0', context: 'set', typedValue: [\n {\n typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0',\n value: { string: 'set_poly_string_2_inherited' },\n },\n {\n typeid: 'SimpleTest:EntryWithOverriddenDefaults-1.0.0',\n value: { string: 'set_poly_string_3_inherited' },\n },\n ],\n },\n {\n id: 'set_nest', typeid: 'SimpleTest:SetNestedWithOverriddenDefaults-1.0.0', context: 'set', value: [{\n set_nested: [\n { string: 'set_nested_2_string_1_inherited' },\n { string: 'set_nested_2_string_2_inherited' },\n ],\n }],\n },\n ],\n };\n\n PropertyFactory.register(MapNestedWithOverriddenDefaults);\n PropertyFactory.register(SetNestedWithOverriddenDefaults);\n PropertyFactory.register(ShapeWithOverriddenDefaults);\n PropertyFactory.register(SquareWithOverriddenDefaults);\n\n var instance = PropertyFactory.create('SimpleTest:SquareWithOverriddenDefaults-1.0.0');\n\n expect(instance._getChildrenCount()).to.equal(13);\n expect(instance.resolvePath('num').getValue()).and.eql(2);\n expect(instance.resolvePath('array').getValues()).and.eql([\n 'array_string_1_inherited', 'array_string_2_inherited',\n ]);\n expect(instance.resolvePath('array_poly').getValues().length).to.eql(2);\n expect(instance.resolvePath('array_poly').getValues()[0].string).to.eql('entry_string_poly_1_inherited');\n expect(instance.resolvePath('array_poly').getValues()[1].string).to.eql('entry_string_poly_2_inherited');\n expect(instance.resolvePath('enum').getValue()).and.eql(2);\n expect(instance.resolvePath('untyped.num').getValue()).and.eql(2);\n expect(instance.resolvePath('untyped.string').getValue()).and.eql('untyped_string_inherited');\n expect(instance.resolvePath('template.num').getValue()).and.eql(2);\n expect(instance.resolvePath('template.dynamic.dynamic_string')\n .getValue()).and.eql('dynamic_string_inherited');\n expect(instance.resolvePath('map_primitive').getIds().length).to.equal(2);\n expect(instance.resolvePath('map_primitive').getEntriesReadOnly().key2).to.equal(2);\n expect(instance.resolvePath('map_primitive').getEntriesReadOnly().key3).to.equal(3);\n expect(instance.resolvePath('map').getIds().length).to.equal(2);\n expect(instance.resolvePath('map').getEntriesReadOnly().key2.get('string').getValue())\n .to.equal('map_string_2_inherited');\n expect(instance.resolvePath('map').getEntriesReadOnly().key3.get('string').getValue())\n .to.equal('map_string_3_inherited');\n expect(instance.resolvePath('map_poly').getIds().length).to.equal(2);\n expect(instance.resolvePath('map_poly').getEntriesReadOnly().key2.get('string').getValue())\n .to.equal('map_poly_string_2_inherited');\n expect(instance.resolvePath('map_poly').getEntriesReadOnly().key3.get('string').getValue())\n .to.equal('map_poly_string_3_inherited');\n expect(instance.resolvePath('map_nest').getIds().length).to.equal(2);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getIds().length).to.equal(2);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getAsArray().length).to.equal(2);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getAsArray()[0].get('string').getValue()).to.equal('map_nested_2_string_2_inherited');\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getAsArray()[1].get('string').getValue()).to.equal('map_nested_2_string_3_inherited');\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key3.get('map_nested')\n .getIds().length).to.equal(1);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key3.get('map_nested')\n .getAsArray()[0].get('string').getValue()).to.equal('map_nested_3_string_1_inherited');\n expect(instance.resolvePath('set').getIds().length).to.equal(2);\n expect(instance.resolvePath('set').getAsArray()[0].get('string')\n .getValue()).to.equal('set_string_2_inherited');\n expect(instance.resolvePath('set').getAsArray()[1].get('string')\n .getValue()).to.equal('set_string_3_inherited');\n expect(instance.resolvePath('set_poly').getIds().length).to.equal(2);\n expect(instance.resolvePath('set_poly').getAsArray()[0].get('string')\n .getValue()).to.equal('set_poly_string_2_inherited');\n expect(instance.resolvePath('set_poly').getAsArray()[1].get('string')\n .getValue()).to.equal('set_poly_string_3_inherited');\n expect(instance.resolvePath('set_nest').getIds().length).to.equal(1);\n expect(instance.resolvePath('set_nest').getAsArray()[0].get('set_nested').getIds().length).to.equal(2);\n expect(instance.resolvePath('set_nest').getAsArray()[0].get('set_nested')\n .getAsArray()[0].get('string').getValue()).to.equal('set_nested_2_string_1_inherited');\n expect(instance.resolvePath('set_nest').getAsArray()[0].get('set_nested')\n .getAsArray()[1].get('string').getValue()).to.equal('set_nested_2_string_2_inherited');\n });\n\n it('should not allow overriding default values when typeid is different', function() {\n var ShapeWithDiffTypeidDefaults = {\n typeid: 'SimpleTest:ShapeWithDiffTypeidDefaults-1.0.0',\n properties: [{ id: 'num', typeid: 'Int8', value: 1 }],\n };\n\n var SquareWithDiffTypeidDefaults = {\n typeid: 'SimpleTest:SquareWithDiffTypeidDefaults-1.0.0',\n inherits: ['SimpleTest:ShapeWithDiffTypeidDefaults-1.0.0'],\n properties: [{ id: 'num', typeid: 'Int32', value: 2 }],\n };\n\n PropertyFactory.register(ShapeWithDiffTypeidDefaults);\n PropertyFactory.register(SquareWithDiffTypeidDefaults);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:SquareWithDiffTypeidDefaults-1.0.0'))\n .to.throw(MSG.OVERRIDEN_PROP_MUST_HAVE_SAME_FIELD_VALUES_AS_BASE_TYPE);\n });\n\n it('should not allow overriding default values when context is different', function() {\n var ShapeWithDiffContextDefaults = {\n typeid: 'SimpleTest:ShapeWithDiffContextDefaults-1.0.0',\n properties: [{ id: 'num', typeid: 'Int8', value: 1 }],\n };\n\n var SquareWithDiffContextDefaults = {\n typeid: 'SimpleTest:SquareWithDiffContextDefaults-1.0.0',\n inherits: ['SimpleTest:ShapeWithDiffContextDefaults-1.0.0'],\n properties: [{ id: 'num', typeid: 'Int8', value: [1, 2], context: 'array' }],\n };\n\n PropertyFactory.register(ShapeWithDiffContextDefaults);\n PropertyFactory.register(SquareWithDiffContextDefaults);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:SquareWithDiffContextDefaults-1.0.0'))\n .to.throw(MSG.OVERRIDEN_PROP_MUST_HAVE_SAME_FIELD_VALUES_AS_BASE_TYPE);\n });\n });\n\n describe('Overriding constants', function() {\n it('should allow overriding constants', function() {\n var EntryWithOverriddenConstants = {\n typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0',\n inherits: ['NamedProperty'],\n constants: [\n { id: 'string', typeid: 'String', value: 'entry_string' },\n ],\n };\n\n var EntryWithOverriddenPolyConstants = {\n typeid: 'SimpleTest:EntryWithOverriddenPolyConstants-1.0.0',\n inherits: ['SimpleTest:EntryWithOverriddenConstants-1.0.0'],\n constants: [\n { id: 'string', typeid: 'String', value: 'entry_string' },\n ],\n };\n\n var DynamicWithOverriddenConstants = {\n typeid: 'SimpleTest:DynamicWithOverriddenConstants-1.0.0',\n constants: [{ id: 'num', typeid: 'Uint32', value: 1 }],\n properties: [\n {\n id: 'dynamic', properties: [\n { id: 'dynamic_string', typeid: 'String' },\n ],\n },\n ],\n };\n\n var MapNestedWithOverriddenConstants = {\n typeid: 'SimpleTest:MapNestedWithOverriddenConstants-1.0.0',\n inherits: ['NamedProperty'],\n constants: [{\n id: 'map_nested', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'map', value: {},\n }],\n };\n\n var SetNestedWithOverriddenConstants = {\n typeid: 'SimpleTest:SetNestedWithOverriddenConstants-1.0.0',\n inherits: ['NamedProperty'],\n constants: [{\n id: 'set_nested', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'set', value: [],\n }],\n };\n\n var ShapeWithOverriddenConstants = {\n typeid: 'SimpleTest:ShapeWithOverriddenConstants-1.0.0',\n constants: [\n { id: 'num', typeid: 'Int8', value: 1 },\n { id: 'array', typeid: 'String', value: ['array_string_1', 'array_string_2'], context: 'array' },\n {\n id: 'array_poly', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'array', value: [\n { string: 'entry_string_poly' }],\n },\n {\n id: 'template', typeid: 'SimpleTest:DynamicWithOverriddenConstants-1.0.0', value: {\n num: 1, dynamic: { dynamic_string: 'dynamic_string' },\n },\n },\n {\n id: 'map_primitive', typeid: 'Int32', context: 'map', value: {\n key1: 1,\n key3: 3,\n },\n },\n {\n id: 'map', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'map', value: {\n key1: { string: 'map_string_1' },\n key3: { string: 'map_string_3' },\n },\n },\n {\n id: 'map_poly', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'map', value: {\n key1: { string: 'map_poly_string_1' },\n key3: { string: 'map_poly_string_3' },\n },\n },\n {\n id: 'map_nest', typeid: 'SimpleTest:MapNestedWithOverriddenConstants-1.0.0', context: 'map', value: {\n key1: {\n map_nested: {\n key1_1: { string: 'map_nested_1_string_1' },\n key1_3: { string: 'map_nested_1_string_3' },\n },\n },\n key3: {\n map_nested: {\n key3_1: { string: 'map_nested_3_string_1' },\n },\n },\n },\n },\n {\n id: 'set', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'set', value: [\n { string: 'set_string_1' },\n { string: 'set_string_2' },\n ],\n },\n {\n id: 'set_poly', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'set', value: [\n { string: 'set_poly_string_1' },\n { string: 'set_poly_string_1' },\n ],\n },\n {\n id: 'set_nest', typeid: 'SimpleTest:SetNestedWithOverriddenConstants-1.0.0', context: 'set', value: [{\n set_nested: [\n { string: 'set_nested_1_string_1' },\n { string: 'set_nested_1_string_2' },\n ],\n }, {\n set_nested: [\n { string: 'set_nested_3_string_1' },\n { string: 'set_nested_3_string_2' },\n ],\n }],\n },\n ],\n };\n\n var SquareWithOverriddenConstants = {\n typeid: 'SimpleTest:SquareWithOverriddenConstants-1.0.0',\n inherits: ['SimpleTest:ShapeWithOverriddenConstants-1.0.0'],\n constants: [\n { id: 'num', typeid: 'Int8', value: 2 },\n {\n id: 'array', typeid: 'String', value: ['array_string_1_inherited', 'array_string_2_inherited'],\n context: 'array',\n },\n {\n id: 'array_poly', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'array', typedValue:\n [{\n typeid: 'SimpleTest:EntryWithOverriddenPolyConstants-1.0.0',\n value: { string: 'entry_string_poly_1_inherited' },\n },\n {\n typeid: 'SimpleTest:EntryWithOverriddenPolyConstants-1.0.0',\n value: { string: 'entry_string_poly_2_inherited' },\n },\n ],\n },\n {\n id: 'template', typeid: 'SimpleTest:DynamicWithOverriddenConstants-1.0.0', value: {\n num: 2, dynamic: { dynamic_string: 'dynamic_string_inherited' },\n },\n },\n {\n id: 'map_primitive', typeid: 'Int32', context: 'map', value: {\n key2: 2,\n key3: 3,\n },\n },\n {\n id: 'map', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'map', value: {\n key2: { string: 'map_string_2_inherited' },\n key3: { string: 'map_string_3_inherited' },\n },\n },\n {\n id: 'map_poly', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'map', typedValue: {\n key2: {\n typeid: 'SimpleTest:EntryWithOverriddenPolyConstants-1.0.0',\n value: { string: 'map_poly_string_2_inherited' },\n },\n key3: {\n typeid: 'SimpleTest:EntryWithOverriddenPolyConstants-1.0.0',\n value: { string: 'map_poly_string_3_inherited' },\n },\n },\n },\n {\n id: 'map_nest', typeid: 'SimpleTest:MapNestedWithOverriddenConstants-1.0.0', context: 'map', value: {\n key2: {\n map_nested: {\n key2_2: { string: 'map_nested_2_string_2_inherited' },\n key2_3: { string: 'map_nested_2_string_3_inherited' },\n },\n },\n key3: {\n map_nested: {\n key3_1: { string: 'map_nested_3_string_1_inherited' },\n },\n },\n },\n },\n {\n id: 'set', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'set', value: [\n { string: 'set_string_2_inherited' },\n { string: 'set_string_3_inherited' },\n ],\n },\n {\n id: 'set_poly', typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0', context: 'set', typedValue: [\n {\n typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0',\n value: { string: 'set_poly_string_2_inherited' },\n },\n {\n typeid: 'SimpleTest:EntryWithOverriddenConstants-1.0.0',\n value: { string: 'set_poly_string_3_inherited' },\n },\n ],\n },\n {\n id: 'set_nest', typeid: 'SimpleTest:SetNestedWithOverriddenConstants-1.0.0', context: 'set', value: [{\n set_nested: [\n { string: 'set_nested_2_string_1_inherited' },\n { string: 'set_nested_2_string_2_inherited' },\n ],\n }],\n },\n ],\n };\n\n PropertyFactory.register(EntryWithOverriddenConstants);\n PropertyFactory.register(EntryWithOverriddenPolyConstants);\n PropertyFactory.register(DynamicWithOverriddenConstants);\n PropertyFactory.register(MapNestedWithOverriddenConstants);\n PropertyFactory.register(SetNestedWithOverriddenConstants);\n PropertyFactory.register(ShapeWithOverriddenConstants);\n PropertyFactory.register(SquareWithOverriddenConstants);\n\n var instance = PropertyFactory.create('SimpleTest:SquareWithOverriddenConstants-1.0.0');\n\n expect(instance._getChildrenCount()).to.equal(11);\n expect(instance.resolvePath('num').getValue()).and.eql(2);\n expect(instance.resolvePath('array').getValues()).and.eql([\n 'array_string_1_inherited', 'array_string_2_inherited',\n ]);\n expect(instance.resolvePath('array_poly').getValues().length).to.eql(2);\n expect(instance.resolvePath('array_poly').getValues()[0].string).to.eql('entry_string_poly_1_inherited');\n expect(instance.resolvePath('array_poly').getValues()[1].string).to.eql('entry_string_poly_2_inherited');\n expect(instance.resolvePath('template.num').getValue()).and.eql(2);\n expect(instance.resolvePath('template.dynamic.dynamic_string')\n .getValue()).and.eql('dynamic_string_inherited');\n expect(instance.resolvePath('map_primitive').getIds().length).to.equal(2);\n expect(instance.resolvePath('map_primitive').getEntriesReadOnly().key2).to.equal(2);\n expect(instance.resolvePath('map_primitive').getEntriesReadOnly().key3).to.equal(3);\n expect(instance.resolvePath('map').getIds().length).to.equal(2);\n expect(instance.resolvePath('map').getEntriesReadOnly().key2.get('string').getValue())\n .to.equal('map_string_2_inherited');\n expect(instance.resolvePath('map').getEntriesReadOnly().key3.get('string').getValue())\n .to.equal('map_string_3_inherited');\n expect(instance.resolvePath('map_poly').getIds().length).to.equal(2);\n expect(instance.resolvePath('map_poly').getEntriesReadOnly().key2.get('string').getValue())\n .to.equal('map_poly_string_2_inherited');\n expect(instance.resolvePath('map_poly').getEntriesReadOnly().key3.get('string').getValue())\n .to.equal('map_poly_string_3_inherited');\n expect(instance.resolvePath('map_nest').getIds().length).to.equal(2);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getIds().length).to.equal(2);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getAsArray().length).to.equal(2);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getAsArray()[0].get('string').getValue()).to.equal('map_nested_2_string_2_inherited');\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key2.get('map_nested')\n .getAsArray()[1].get('string').getValue()).to.equal('map_nested_2_string_3_inherited');\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key3.get('map_nested')\n .getIds().length).to.equal(1);\n expect(instance.resolvePath('map_nest').getEntriesReadOnly().key3.get('map_nested')\n .getAsArray()[0].get('string').getValue()).to.equal('map_nested_3_string_1_inherited');\n expect(instance.resolvePath('set').getIds().length).to.equal(2);\n expect(instance.resolvePath('set').getAsArray()[0].get('string')\n .getValue()).to.equal('set_string_2_inherited');\n expect(instance.resolvePath('set').getAsArray()[1].get('string')\n .getValue()).to.equal('set_string_3_inherited');\n expect(instance.resolvePath('set_poly').getIds().length).to.equal(2);\n expect(instance.resolvePath('set_poly').getAsArray()[0].get('string')\n .getValue()).to.equal('set_poly_string_2_inherited');\n expect(instance.resolvePath('set_poly').getAsArray()[1].get('string')\n .getValue()).to.equal('set_poly_string_3_inherited');\n expect(instance.resolvePath('set_nest').getIds().length).to.equal(1);\n expect(instance.resolvePath('set_nest').getAsArray()[0].get('set_nested').getIds().length).to.equal(2);\n expect(instance.resolvePath('set_nest').getAsArray()[0].get('set_nested')\n .getAsArray()[0].get('string').getValue()).to.equal('set_nested_2_string_1_inherited');\n expect(instance.resolvePath('set_nest').getAsArray()[0].get('set_nested')\n .getAsArray()[1].get('string').getValue()).to.equal('set_nested_2_string_2_inherited');\n });\n\n it('should allow overriding constants with typed values', function() {\n var EntryWithTypedOverriddenConstants = {\n typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0',\n inherits: ['NamedProperty'],\n constants: [\n { id: 'string', typeid: 'String', value: 'entry_string' },\n ],\n };\n\n var EntryWithTypedOverriddenPolyConstants = {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n inherits: ['SimpleTest:EntryWithTypedOverriddenConstants-1.0.0'],\n constants: [\n { id: 'string', typeid: 'String', value: 'entry_string' },\n { id: 'name', typeid: 'String', value: 'entry2' },\n ],\n };\n\n var ShapeWithTypedOverriddenConstants = {\n typeid: 'SimpleTest:ShapeWithTypedOverriddenConstants-1.0.0',\n constants: [\n { id: 'entry1', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0' },\n { id: 'entry2', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0' },\n {\n id: 'array', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0', context: 'array',\n value: [{ string: 'entry_string' }],\n },\n {\n id: 'map', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0', context: 'map', value: {\n key1: { string: 'map_string_1' },\n key3: { string: 'map_string_3' },\n },\n },\n {\n id: 'set', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0', context: 'set', value: [\n { string: 'set_string_1' },\n { string: 'set_string_1' },\n ],\n },\n ],\n };\n\n var SquareWithTypedOverriddenConstants = {\n typeid: 'SimpleTest:SquareWithTypedOverriddenConstants-1.0.0',\n inherits: ['SimpleTest:ShapeWithTypedOverriddenConstants-1.0.0'],\n constants: [\n {\n id: 'entry1', typedValue: {\n typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0',\n value: { string: 'entry_string_1' },\n },\n },\n {\n id: 'entry2', typedValue: {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'entry_string_2', name: 'entry2' },\n },\n },\n {\n id: 'array', context: 'array', typedValue:\n [{\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'entry_string_1_inherited', name: 'entry_string_1' },\n },\n {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'entry_string_2_inherited', name: 'entry_string_2' },\n },\n ],\n },\n {\n id: 'map', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0', context: 'map', typedValue: {\n key2: {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'map_string_2_inherited', name: 'map_string_2' },\n },\n key3: {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'map_string_3_inherited', name: 'map_string_3' },\n },\n },\n },\n {\n id: 'set', typeid: 'SimpleTest:EntryWithTypedOverriddenConstants-1.0.0', context: 'set', typedValue: [\n {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'set_string_2_inherited', name: 'set_string_2' },\n },\n {\n typeid: 'SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0',\n value: { string: 'set_string_3_inherited', name: 'set_string_3' },\n },\n ],\n },\n ],\n };\n\n PropertyFactory.register(EntryWithTypedOverriddenConstants);\n PropertyFactory.register(EntryWithTypedOverriddenPolyConstants);\n PropertyFactory.register(ShapeWithTypedOverriddenConstants);\n PropertyFactory.register(SquareWithTypedOverriddenConstants);\n\n var instance = PropertyFactory.create('SimpleTest:SquareWithTypedOverriddenConstants-1.0.0');\n\n expect(instance._getChildrenCount()).to.equal(5);\n expect(instance.resolvePath('entry1').getTypeid())\n .to.eql('SimpleTest:EntryWithTypedOverriddenConstants-1.0.0');\n expect(instance.resolvePath('entry1.string').getValue()).to.eql('entry_string_1');\n expect(instance.resolvePath('entry2').getTypeid())\n .to.eql('SimpleTest:EntryWithTypedOverriddenPolyConstants-1.0.0');\n expect(instance.resolvePath('entry2.name').getValue()).to.eql('entry2');\n expect(instance.resolvePath('entry2.string').getValue()).to.eql('entry_string_2');\n expect(instance.resolvePath('array').getValues().length).to.eql(2);\n expect(instance.resolvePath('array').getValues()[0].name).to.eql('entry_string_1');\n expect(instance.resolvePath('array').getValues()[0].string).to.eql('entry_string_1_inherited');\n expect(instance.resolvePath('array').getValues()[1].name).to.eql('entry_string_2');\n expect(instance.resolvePath('array').getValues()[1].string).to.eql('entry_string_2_inherited');\n expect(instance.resolvePath('map').getIds().length).to.equal(2);\n expect(instance.resolvePath('map').getEntriesReadOnly().key2.get('name').getValue())\n .to.equal('map_string_2');\n expect(instance.resolvePath('map').getEntriesReadOnly().key2.get('string').getValue())\n .to.equal('map_string_2_inherited');\n expect(instance.resolvePath('map').getEntriesReadOnly().key3.get('name').getValue())\n .to.equal('map_string_3');\n expect(instance.resolvePath('map').getEntriesReadOnly().key3.get('string').getValue())\n .to.equal('map_string_3_inherited');\n expect(instance.resolvePath('set').getIds().length).to.equal(2);\n expect(instance.resolvePath('set').getAsArray()[0].get('name')\n .getValue()).to.equal('set_string_2');\n expect(instance.resolvePath('set').getAsArray()[0].get('string')\n .getValue()).to.equal('set_string_2_inherited');\n expect(instance.resolvePath('set').getAsArray()[1].get('name')\n .getValue()).to.equal('set_string_3');\n expect(instance.resolvePath('set').getAsArray()[1].get('string')\n .getValue()).to.equal('set_string_3_inherited');\n });\n\n it('should not allow overriding constants when typeid is different', function() {\n var ShapeWithDiffTypeidConstants = {\n typeid: 'SimpleTest:ShapeWithDiffTypeidConstants-1.0.0',\n constants: [{ id: 'num', typeid: 'Int8', value: 1 }],\n };\n\n var SquareWithDiffTypeidConstants = {\n typeid: 'SimpleTest:SquareWithDiffTypeidConstants-1.0.0',\n inherits: ['SimpleTest:ShapeWithDiffTypeidConstants-1.0.0'],\n constants: [{ id: 'num', typeid: 'Int32', value: 2 }],\n };\n\n PropertyFactory.register(ShapeWithDiffTypeidConstants);\n PropertyFactory.register(SquareWithDiffTypeidConstants);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:SquareWithDiffTypeidConstants-1.0.0'))\n .to.throw(MSG.OVERRIDEN_PROP_MUST_HAVE_SAME_FIELD_VALUES_AS_BASE_TYPE);\n });\n\n it('should not allow overriding constants when context is different', function() {\n var ShapeWithDiffContextConstants = {\n typeid: 'SimpleTest:ShapeWithDiffContextConstants-1.0.0',\n constants: [{ id: 'num', typeid: 'Int8', value: 1 }],\n };\n\n var SquareWithDiffContextConstants = {\n typeid: 'SimpleTest:SquareWithDiffContextConstants-1.0.0',\n inherits: ['SimpleTest:ShapeWithDiffContextConstants-1.0.0'],\n constants: [{ id: 'num', typeid: 'Int8', value: [1, 2], context: 'array' }],\n };\n\n PropertyFactory.register(ShapeWithDiffContextConstants);\n PropertyFactory.register(SquareWithDiffContextConstants);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:SquareWithDiffContextConstants-1.0.0'))\n .to.throw(MSG.OVERRIDEN_PROP_MUST_HAVE_SAME_FIELD_VALUES_AS_BASE_TYPE);\n });\n\n it('should not allow overriding constants with a typedValue that does not inherit from base type', function() {\n var Type1 = {\n typeid: 'SimpleTest:Type1-1.0.0',\n constants: [{ id: 'num', typeid: 'Int32', value: 1 }],\n };\n\n var Type2 = {\n typeid: 'SimpleTest:Type2-1.0.0',\n constants: [{ id: 'num', typeid: 'Int32', value: 1 }],\n };\n\n var ShapeWithDiffTypedTypeidConstants = {\n typeid: 'SimpleTest:ShapeWithDiffTypeidConstants-1.0.0',\n constants: [{ id: 'type', typeid: 'SimpleTest:Type1-1.0.0' }],\n };\n\n var SquareWithDiffTypedTypeidConstants = {\n typeid: 'SimpleTest:SquareWithDiffTypeidConstants-1.0.0',\n inherits: ['SimpleTest:ShapeWithDiffTypeidConstants-1.0.0'],\n constants: [{ id: 'type', typedValue: { typeid: 'SimpleTest:Type2-1.0.0' } }],\n };\n\n PropertyFactory.register(Type1);\n PropertyFactory.register(Type2);\n PropertyFactory.register(ShapeWithDiffTypedTypeidConstants);\n PropertyFactory.register(SquareWithDiffTypedTypeidConstants);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:SquareWithDiffTypeidConstants-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_MUST_DERIVE_FROM_BASE_TYPE +\n 'SimpleTest:Type2-1.0.0 must be a subclass of SimpleTest:Type1-1.0.0');\n });\n });\n });\n\n describe('Default values', function() {\n it('should set default values for primitive property', function() {\n var DefaultPrimitive = {\n typeid: 'SimpleTest:DefaultPrimitive-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32', value: 111 },\n { id: 'bool', typeid: 'Bool', value: true },\n ],\n };\n\n PropertyFactory.register(DefaultPrimitive);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultPrimitive-1.0.0');\n expect(instance.get('num').getValue()).to.equal(111);\n expect(instance.get('bool').getValue()).to.equal(true);\n });\n\n it('should set a default value for a string property', function() {\n var DefaultString = {\n typeid: 'SimpleTest:DefaultString-1.0.0',\n properties: [\n { id: 'string', typeid: 'String', value: 'I am a string' },\n ],\n };\n\n PropertyFactory.register(DefaultString);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultString-1.0.0');\n expect(instance.get('string').getValue()).to.equal('I am a string');\n });\n\n it('should set a default value for a primitive array property', function() {\n var DefaultArray = {\n typeid: 'SimpleTest:DefaultArray-1.0.0',\n properties: [\n { id: 'array', typeid: 'Int32', value: [111, 222], context: 'array' },\n ],\n };\n\n PropertyFactory.register(DefaultArray);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultArray-1.0.0');\n expect(instance.get('array').get(0)).to.equal(111);\n expect(instance.get('array').get(1)).to.equal(222);\n });\n\n it('should set a default value for a typed array property', function() {\n var DefaultTypedArrayEntry = {\n typeid: 'SimpleTest:DefaultTypedArrayEntry-1.0.0',\n properties: [\n { id: 'string', typeid: 'String' },\n ],\n };\n\n var DefaultTypedArray = {\n typeid: 'SimpleTest:DefaultTypedArray-1.0.0',\n properties: [\n {\n id: 'array', typeid: 'SimpleTest:DefaultTypedArrayEntry-1.0.0', context: 'array', value: [\n { string: 'I am string 1' }, { string: 'I am string 2' }],\n },\n ],\n };\n\n PropertyFactory.register(DefaultTypedArrayEntry);\n PropertyFactory.register(DefaultTypedArray);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultTypedArray-1.0.0');\n expect(instance.get('array').get(0).get('string').value).to.equal('I am string 1');\n expect(instance.get('array').get(1).get('string').value).to.equal('I am string 2');\n });\n\n it('should set a default value for an enum property', function() {\n var DefaultEnum = {\n typeid: 'SimpleTest:DefaultEnum-1.0.0',\n properties: [\n {\n id: 'enum', typeid: 'Enum', properties: [\n { id: 'solid', value: 111 },\n { id: 'dashed', value: 222 },\n { id: 'dotted', value: 333 },\n ], value: 'dashed',\n },\n ],\n };\n\n PropertyFactory.register(DefaultEnum);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultEnum-1.0.0');\n expect(instance.get('enum').getValue()).to.equal(222);\n });\n\n it('should set a default value for an untyped property, parent default value has precedence', function() {\n var DefaultUntyped = {\n typeid: 'SimpleTest:DefaultUntyped-1.0.0',\n properties: [\n {\n id: 'untyped', properties: [\n { id: 'num', typeid: 'Uint32', value: 222 },\n { id: 'string', typeid: 'String', value: 'I should not be set' },\n ], value: { string: 'I am a string', num: 111 },\n },\n ],\n };\n\n PropertyFactory.register(DefaultUntyped);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultUntyped-1.0.0');\n\n expect(instance.get('untyped').get('string').getValue()).to.equal('I am a string');\n expect(instance.get('untyped').get('num').getValue()).to.equal(111);\n });\n\n it('should set a default value for a template, parent default value has precedence', function() {\n var DefaultTemplateEntry = {\n typeid: 'SimpleTest:DefaultTemplateEntry-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32', value: '222' },\n {\n id: 'dynamic', properties: [\n { id: 'dynamic_string', typeid: 'String' },\n ], value: { dynamic_string: 'I should not be set' },\n },\n ],\n };\n\n var DefaultTemplate = {\n typeid: 'SimpleTest:DefaultTemplate-1.0.0',\n properties: [\n {\n id: 'template', typeid: 'SimpleTest:DefaultTemplateEntry-1.0.0', value: {\n num: 111, dynamic: { dynamic_string: 'I am a string' },\n },\n },\n ],\n };\n\n PropertyFactory.register(DefaultTemplateEntry);\n PropertyFactory.register(DefaultTemplate);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultTemplate-1.0.0');\n\n expect(instance.get('template').get('num').getValue()).to.equal(111);\n expect(instance.get('template').get('dynamic').get('dynamic_string').getValue()).to.equal('I am a string');\n });\n\n it('should set a default value for a set', function() {\n var DefaultSetEntry = {\n typeid: 'SimpleTest:DefaultSetEntry-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'string', typeid: 'String' },\n ],\n };\n\n var DefaultSet = {\n typeid: 'SimpleTest:DefaultSet-1.0.0',\n properties: [\n {\n id: 'set', typeid: 'SimpleTest:DefaultSetEntry-1.0.0', context: 'set', value: [\n { string: 'I am a string 1' },\n { string: 'I am a string 2' },\n ],\n },\n ],\n };\n\n PropertyFactory.register(DefaultSetEntry);\n PropertyFactory.register(DefaultSet);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultSet-1.0.0');\n\n expect(instance.get('set').getAsArray().length).to.equal(2);\n expect(instance.get('set').getAsArray()[0].get('string').getValue()).to.equal('I am a string 1');\n expect(instance.get('set').getAsArray()[1].get('string').getValue()).to.equal('I am a string 2');\n });\n\n it('should set a default value for a primitive map', function() {\n var DefaultPrimitiveMap = {\n typeid: 'SimpleTest:DefaultPrimitiveMap-1.0.0',\n properties: [\n {\n id: 'map', typeid: 'Int32', context: 'map', value: {\n key1: 111,\n key2: 222,\n },\n },\n ],\n };\n\n PropertyFactory.register(DefaultPrimitiveMap);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultPrimitiveMap-1.0.0');\n\n expect(instance.get('map').getEntriesReadOnly().key1).to.equal(111);\n expect(instance.get('map').getEntriesReadOnly().key2).to.equal(222);\n });\n\n it('should set a default value for a typed map', function() {\n var DefaultTypedMapEntry = {\n typeid: 'SimpleTest:DefaultTypedMapEntry-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'string', typeid: 'String' },\n ],\n };\n\n var DefaultTypedMap = {\n typeid: 'SimpleTest:DefaultTypedMap-1.0.0',\n properties: [\n {\n id: 'map', typeid: 'SimpleTest:DefaultTypedMapEntry-1.0.0', context: 'map', value: {\n key1: { string: 'I am a string 1' },\n key2: { string: 'I am a string 2' },\n },\n },\n ],\n };\n\n PropertyFactory.register(DefaultTypedMapEntry);\n PropertyFactory.register(DefaultTypedMap);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultTypedMap-1.0.0');\n\n expect(instance.get('map').getEntriesReadOnly().key1.get('string').getValue()).to.equal('I am a string 1');\n expect(instance.get('map').getEntriesReadOnly().key2.get('string').getValue()).to.equal('I am a string 2');\n });\n\n it('initial values should override default values', function() {\n var DefaultInitialValue = {\n typeid: 'SimpleTest:DefaultInitialValue-1.0.0',\n properties: [\n { id: 'string', typeid: 'String', value: 'I should not be set' },\n ],\n };\n\n PropertyFactory.register(DefaultInitialValue);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultInitialValue-1.0.0', null, {\n string: 'I am a string',\n });\n\n expect(instance.get('string').getValue()).to.equal('I am a string');\n });\n\n describe('#Polymorphic', function() {\n var DefaultPolyBase = {\n typeid: 'SimpleTest:DefaultPolyBase-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'num', typeid: 'Uint32', value: 111 },\n ],\n };\n\n var DefaultPolySub = {\n typeid: 'SimpleTest:DefaultPolySub-1.0.0',\n inherits: 'SimpleTest:DefaultPolyBase-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32', value: 222 },\n { id: 'str', typeid: 'String', value: 'Sub' },\n ],\n };\n\n var DefaultPolySubSub = {\n typeid: 'SimpleTest:DefaultPolySubSub-1.0.0',\n inherits: 'SimpleTest:DefaultPolySub-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32', value: 333 },\n { id: 'num2', typeid: 'Uint32', value: 111 },\n { id: 'str', typeid: 'String', value: 'SubSub' },\n ],\n };\n\n beforeEach(function() {\n PropertyFactory._clear();\n PropertyFactory.register(DefaultPolyBase);\n PropertyFactory.register(DefaultPolySub);\n PropertyFactory.register(DefaultPolySubSub);\n });\n\n it('should set default polymorphic values for non-primitive properties', function() {\n var DefaultPolyContainer = {\n typeid: 'SimpleTest:DefaultPolyContainer-1.0.0',\n properties: [\n {\n id: 'polySub', typeid: 'SimpleTest:DefaultPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:DefaultPolySub-1.0.0', value: { num: 333, str: 'PolySub' } },\n },\n {\n id: 'polySubSub', typeid: 'SimpleTest:DefaultPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:DefaultPolySubSub-1.0.0', value: { num: 444, str: 'PolySubSub' } },\n },\n ],\n };\n\n PropertyFactory.register(DefaultPolyContainer);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultPolyContainer-1.0.0');\n expect(instance.get('polySub').get('num').getValue()).to.equal(333);\n expect(instance.get('polySub').get('str').getValue()).to.equal('PolySub');\n\n expect(instance.get('polySubSub').get('num').getValue()).to.equal(444);\n expect(instance.get('polySubSub').get('str').getValue()).to.equal('PolySubSub');\n expect(instance.get('polySubSub').get('num2').getValue()).to.equal(111);\n });\n\n it('should fail when setting a default typedValue that doesnt have a typeid.', function() {\n var DefaultPolyNoTypeIdContainer = {\n typeid: 'SimpleTest:DefaultPolyNoTypeIdContainer-1.0.0',\n properties: [{\n id: 'polySub', typeid: 'SimpleTest:DefaultPolyBase-1.0.0',\n typedValue: { value: { num: 333, str: 'PolySub' } },\n }],\n };\n\n PropertyFactory.register(DefaultPolyNoTypeIdContainer);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPolyNoTypeIdContainer-1.0.0'))\n .to.throw(MSG.FIELD_TYPEID_IS_REQUIRED + 'typedValue SimpleTest:DefaultPolyBase-1.0.0');\n });\n\n it('should set a default polymorphic value for a non-primitive array', function() {\n var DefaultPolyArrayContainer = {\n typeid: 'SimpleTest:DefaultPolyArrayContainer-1.0.0',\n properties: [\n {\n id: 'array', typeid: 'SimpleTest:DefaultPolyBase-1.0.0', context: 'array', typedValue: [\n { typeid: 'SimpleTest:DefaultPolySub-1.0.0' },\n { typeid: 'SimpleTest:DefaultPolySub-1.0.0', value: { str: 'ArrSub' } },\n { typeid: 'SimpleTest:DefaultPolySubSub-1.0.0', value: { str: 'ArrSubSub' } },\n ],\n },\n ],\n };\n\n PropertyFactory.register(DefaultPolyArrayContainer);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultPolyArrayContainer-1.0.0');\n expect(instance.get('array').get(0).get('num').value).to.equal(222);\n expect(instance.get('array').get(0).get('str').value).to.equal('Sub');\n expect(instance.get('array').get(1).get('num').value).to.equal(222);\n expect(instance.get('array').get(1).get('str').value).to.equal('ArrSub');\n expect(instance.get('array').get(2).get('num').value).to.equal(333);\n expect(instance.get('array').get(2).get('str').value).to.equal('ArrSubSub');\n expect(instance.get('array').get(2).get('num2').value).to.equal(111);\n });\n\n it('should set a default polymorphic value for a non-primitive set', function() {\n var DefaultPolySetContainer = {\n typeid: 'SimpleTest:DefaultPolySetContainer-1.0.0',\n properties: [\n {\n id: 'set', typeid: 'SimpleTest:DefaultPolyBase-1.0.0', context: 'set', typedValue: [\n { typeid: 'SimpleTest:DefaultPolySub-1.0.0' },\n { typeid: 'SimpleTest:DefaultPolySub-1.0.0', value: { str: 'ArrSub' } },\n { typeid: 'SimpleTest:DefaultPolySubSub-1.0.0', value: { str: 'ArrSubSub' } },\n ],\n },\n ],\n };\n\n PropertyFactory.register(DefaultPolySetContainer);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultPolySetContainer-1.0.0');\n\n expect(instance.get('set').getAsArray().length).to.equal(3);\n expect(instance.get('set').getAsArray()[0].get('num').getValue()).to.equal(222);\n expect(instance.get('set').getAsArray()[0].get('str').getValue()).to.equal('Sub');\n expect(instance.get('set').getAsArray()[1].get('num').getValue()).to.equal(222);\n expect(instance.get('set').getAsArray()[1].get('str').getValue()).to.equal('ArrSub');\n expect(instance.get('set').getAsArray()[2].get('num').getValue()).to.equal(333);\n expect(instance.get('set').getAsArray()[2].get('str').getValue()).to.equal('ArrSubSub');\n expect(instance.get('set').getAsArray()[2].get('num2').getValue()).to.equal(111);\n });\n\n it('should set a default polymorphic value for a non-primitive map', function() {\n var DefaultPolyMapContainer = {\n typeid: 'SimpleTest:DefaultPolyMapContainer-1.0.0',\n properties: [\n {\n id: 'map', typeid: 'SimpleTest:DefaultPolyBase-1.0.0', context: 'map', typedValue: {\n key1: { typeid: 'SimpleTest:DefaultPolySub-1.0.0' },\n key2: { typeid: 'SimpleTest:DefaultPolySub-1.0.0', value: { str: 'ArrSub' } },\n key3: { typeid: 'SimpleTest:DefaultPolySubSub-1.0.0', value: { str: 'ArrSubSub' } },\n },\n },\n ],\n };\n\n PropertyFactory.register(DefaultPolyMapContainer);\n\n var instance = PropertyFactory.create('SimpleTest:DefaultPolyMapContainer-1.0.0');\n\n expect(instance.get('map').getEntriesReadOnly().key1.get('num').getValue()).to.equal(222);\n expect(instance.get('map').getEntriesReadOnly().key1.get('str').getValue()).to.equal('Sub');\n expect(instance.get('map').getEntriesReadOnly().key2.get('num').getValue()).to.equal(222);\n expect(instance.get('map').getEntriesReadOnly().key2.get('str').getValue()).to.equal('ArrSub');\n expect(instance.get('map').getEntriesReadOnly().key3.get('num').getValue()).to.equal(333);\n expect(instance.get('map').getEntriesReadOnly().key3.get('str').getValue()).to.equal('ArrSubSub');\n expect(instance.get('map').getEntriesReadOnly().key3.get('num2').getValue()).to.equal(111);\n });\n\n it('should fail when setting default polymorphic values not derived from base type', function() {\n var DefaultPoly = {\n typeid: 'SimpleTest:DefaultPoly-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32', value: 111 },\n ],\n };\n\n var DefaultPolyUnderivedContainer = {\n typeid: 'SimpleTest:DefaultPolyUnderivedContainer-1.0.0',\n properties: [\n {\n id: 'poly', typeid: 'SimpleTest:DefaultPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:DefaultPoly-1.0.0', value: { num: 333 } },\n },\n ],\n };\n\n PropertyFactory.register(DefaultPoly);\n PropertyFactory.register(DefaultPolyUnderivedContainer);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPolyUnderivedContainer-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_MUST_DERIVE_FROM_BASE_TYPE + 'SimpleTest:DefaultPoly-1.0.0');\n });\n\n it('@bugfix should use default value when value field is missing', function() {\n var DefaultPoly = {\n typeid: 'SimpleTest:PolyWithNoValue-1.0.0',\n constants: [\n {\n id: 'type', typeid: 'SimpleTest:DefaultPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:DefaultPolyBase-1.0.0' },\n },\n ],\n };\n\n PropertyFactory.register(DefaultPoly);\n var prop = PropertyFactory.create(DefaultPoly.typeid);\n\n expect(prop.get('type').get('num').value).to.equal(111);\n });\n\n it('should fail when setting a typedValue to a primitive.', function() {\n var DefaultPrimitiveArrayPoly = {\n typeid: 'SimpleTest:DefaultPrimitivePoly-1.0.0',\n properties: [{\n id: 'int', typeid: 'Int32', typedValue: { typeid: 'Int32', value: 123 },\n }],\n };\n\n PropertyFactory.register(DefaultPrimitiveArrayPoly);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPrimitivePoly-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_FOR_PRIMITIVES_NOT_SUPPORTED + 'int');\n });\n\n it('should fail when setting a typedValue to a primitive array.', function() {\n var DefaultPrimitiveArrayPoly = {\n typeid: 'SimpleTest:DefaultPrimitiveArrayPoly-1.0.0',\n properties: [{\n id: 'array', context: 'array', typeid: 'Int32', typedValue: [{ typeid: 'Int32', value: 123 }],\n }],\n };\n\n PropertyFactory.register(DefaultPrimitiveArrayPoly);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPrimitiveArrayPoly-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_FOR_PRIMITIVES_NOT_SUPPORTED + 'array');\n });\n\n it('should fail when setting a typedValue to a primitive map.', function() {\n var DefaultPrimitiveMapPoly = {\n typeid: 'SimpleTest:DefaultPrimitiveMapPoly-1.0.0',\n properties: [{\n id: 'map', context: 'map', typeid: 'Int32', typedValue: {\n key1: { typeid: 'Int32', value: 1 },\n key2: { typeid: 'Int32', value: 2 },\n },\n }],\n };\n\n PropertyFactory.register(DefaultPrimitiveMapPoly);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPrimitiveMapPoly-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_FOR_PRIMITIVES_NOT_SUPPORTED + 'map');\n });\n });\n });\n\n describe('Constants', function() {\n it('should set constant properties as readonly', function() {\n var ConstantReadonly = {\n typeid: 'SimpleTest:ConstantReadonly-1.0.0',\n constants: [\n { id: 'num', typeid: 'Uint32', value: 111 },\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }],\n };\n\n PropertyFactory.register(ConstantReadonly);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantReadonly-1.0.0');\n\n expect(instance.get('num').getValue()).to.equal(111);\n expect(instance.get('num')._isConstant).to.equal(true);\n expect(instance.get('num')._checkIsNotReadOnly.bind(\n instance.get('num'), true)).to.throw(MSG.MODIFICATION_OF_CONSTANT_PROPERTY);\n expect(instance.get('num').setValue.bind(\n instance.get('num'), 1111)).to.throw(MSG.MODIFICATION_OF_CONSTANT_PROPERTY);\n });\n\n it('should set constant child properties as readonly', function() {\n var ConstantChildReadonlyEntry = {\n typeid: 'SimpleTest:ConstantChildReadonlyEntry-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32' },\n {\n id: 'dynamic', properties: [\n { id: 'dynamic_string', typeid: 'String' },\n ],\n },\n ],\n };\n\n var ConstantChildReadonly = {\n typeid: 'SimpleTest:ConstantChildReadonly-1.0.0',\n constants: [\n {\n id: 'template', typeid: 'SimpleTest:ConstantChildReadonlyEntry-1.0.0', value: {\n num: 111, dynamic: { dynamic_string: 'I am a string' },\n },\n },\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }],\n };\n\n PropertyFactory.register(ConstantChildReadonlyEntry);\n PropertyFactory.register(ConstantChildReadonly);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantChildReadonly-1.0.0');\n\n expect(instance.get('template').get('num')._isConstant).to.equal(true);\n expect(instance.get('template').get('dynamic')._isConstant).to.equal(true);\n expect(instance.get('template').get('dynamic').get('dynamic_string')._isConstant).to.equal(true);\n expect(instance.get('template').get('num')._checkIsNotReadOnly.bind(\n instance.get('template').get('num'), true)).to.throw(MSG.MODIFICATION_OF_CONSTANT_PROPERTY);\n expect(instance.get('template').get('num').setValue.bind(\n instance.get('template').get('num'), 1111)).to.throw(MSG.MODIFICATION_OF_CONSTANT_PROPERTY);\n expect(instance.get('template').get('dynamic').get('dynamic_string')._checkIsNotReadOnly.bind(\n instance.get('template').get('dynamic').get('dynamic_string'), true)).to.throw(\n MSG.MODIFICATION_OF_CONSTANT_PROPERTY);\n expect(instance.get('template').get('dynamic').get('dynamic_string').setValue.bind(\n instance.get('template').get('dynamic').get('dynamic_string'), 'should throw')).to.throw(\n MSG.MODIFICATION_OF_CONSTANT_PROPERTY);\n });\n\n it('should support primitive constants', function() {\n var ConstantPrimitive = {\n typeid: 'SimpleTest:ConstantPrimitive-1.0.0',\n constants: [\n { id: 'num', typeid: 'Uint32', value: 111 },\n { id: 'bool', typeid: 'Bool', value: true },\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }],\n };\n\n PropertyFactory.register(ConstantPrimitive);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantPrimitive-1.0.0');\n\n expect(instance.get('num').getValue()).to.equal(111);\n expect(instance.get('bool').getValue()).to.equal(true);\n });\n\n it('should support typed constants', function() {\n var ConstantEntry = {\n typeid: 'SimpleTest:ConstantEntry-1.0.0',\n constants: [\n { id: 'num', typeid: 'Uint32', value: 111 },\n { id: 'bool', typeid: 'Bool', value: true },\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }],\n };\n\n var ConstantTyped = {\n typeid: 'SimpleTest:ConstantTyped-1.0.0',\n constants: [\n { id: 'entry', typeid: 'SimpleTest:ConstantEntry-1.0.0', value: { num: 222, bool: false } },\n ],\n properties: [{ id: 'default2', typeid: 'Uint32' }],\n };\n\n PropertyFactory.register(ConstantEntry);\n PropertyFactory.register(ConstantTyped);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantTyped-1.0.0');\n\n expect(instance.get('entry').get('num').getValue()).to.equal(222);\n expect(instance.get('entry').get('bool').getValue()).to.equal(false);\n });\n\n it('should support string constants', function() {\n var ConstantString = {\n typeid: 'SimpleTest:ConstantString-1.0.0',\n constants: [\n { id: 'string', typeid: 'String', value: 'I am a string' },\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }],\n };\n\n PropertyFactory.register(ConstantString);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantString-1.0.0');\n\n expect(instance.get('string').getValue()).to.equal('I am a string');\n });\n\n it('should support primitive array constants', function() {\n var ConstantArray = {\n typeid: 'SimpleTest:ConstantArray-1.0.0',\n constants: [\n { id: 'array', typeid: 'Int32', value: [111, 222], context: 'array' },\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }],\n };\n\n PropertyFactory.register(ConstantArray);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantArray-1.0.0');\n expect(instance.get('array').get(0)).to.equal(111);\n expect(instance.get('array').get(1)).to.equal(222);\n });\n\n it('should support typed array constants', function() {\n var ConstantTypedArrayEntry = {\n typeid: 'SimpleTest:ConstantTypedArrayEntry-1.0.0',\n properties: [\n { id: 'string', typeid: 'String' },\n ],\n };\n\n var ConstantTypedArray = {\n typeid: 'SimpleTest:ConstantTypedArray-1.0.0',\n constants: [\n {\n id: 'array', typeid: 'SimpleTest:ConstantTypedArrayEntry-1.0.0', context: 'array', value: [\n { string: 'I am string 1' }, { string: 'I am string 2' }],\n },\n ],\n };\n\n PropertyFactory.register(ConstantTypedArrayEntry);\n PropertyFactory.register(ConstantTypedArray);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantTypedArray-1.0.0');\n expect(instance.get('array').get(0).get('string').value).to.equal('I am string 1');\n expect(instance.get('array').get(1).get('string').value).to.equal('I am string 2');\n });\n\n it('should support template constants', function() {\n var ConstantTemplateEntry = {\n typeid: 'SimpleTest:ConstantTemplateEntry-1.0.0',\n properties: [\n { id: 'num', typeid: 'Uint32' },\n {\n id: 'dynamic', properties: [\n { id: 'dynamic_string', typeid: 'String' },\n ],\n },\n ],\n };\n\n var ConstantTemplate = {\n typeid: 'SimpleTest:ConstantTemplate-1.0.0',\n constants: [\n {\n id: 'template', typeid: 'SimpleTest:ConstantTemplateEntry-1.0.0', value: {\n num: 111, dynamic: { dynamic_string: 'I am a string' },\n },\n },\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }],\n };\n\n PropertyFactory.register(ConstantTemplateEntry);\n PropertyFactory._reregister(ConstantTemplate);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantTemplate-1.0.0');\n\n expect(instance.get('template').get('num').getValue()).to.equal(111);\n expect(instance.get('template').get('dynamic').get('dynamic_string').getValue()).to.equal('I am a string');\n });\n\n it('should support set constants', function() {\n var ConstantSetEntry = {\n typeid: 'SimpleTest:ConstantSetEntry-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'string', typeid: 'String' },\n ],\n };\n\n var ConstantSet = {\n typeid: 'SimpleTest:ConstantSet-1.0.0',\n constants: [\n {\n id: 'set', typeid: 'SimpleTest:ConstantSetEntry-1.0.0', context: 'set', value: [\n { string: 'I am a string 1' },\n { string: 'I am a string 2' },\n ],\n },\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }],\n };\n\n PropertyFactory.register(ConstantSetEntry);\n PropertyFactory.register(ConstantSet);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantSet-1.0.0');\n\n expect(instance.get('set').getAsArray().length).to.equal(2);\n expect(instance.get('set').getAsArray()[0].get('string').getValue()).to.equal('I am a string 1');\n expect(instance.get('set').getAsArray()[1].get('string').getValue()).to.equal('I am a string 2');\n\n // All instances should share the same constant objects\n var instance2 = PropertyFactory.create('SimpleTest:ConstantSet-1.0.0');\n expect(instance.get('set') === instance2.get('set')).to.be.true;\n });\n\n it('should support primitive map constants', function() {\n var ConstantPrimitiveMap = {\n typeid: 'SimpleTest:ConstantPrimitiveMap-1.0.0',\n constants: [\n {\n id: 'map', typeid: 'Int32', context: 'map', value: {\n key1: 111,\n key2: 222,\n },\n },\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }],\n };\n\n PropertyFactory.register(ConstantPrimitiveMap);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantPrimitiveMap-1.0.0');\n\n expect(instance.get('map').getEntriesReadOnly().key1).to.equal(111);\n expect(instance.get('map').getEntriesReadOnly().key2).to.equal(222);\n });\n\n it('should support typed map constants', function() {\n var ConstantTypedMapEntry = {\n typeid: 'SimpleTest:ConstantTypedMapEntry-1.0.0',\n inherits: ['NamedProperty'],\n properties: [\n { id: 'string', typeid: 'String' },\n ],\n };\n\n var ConstantTypedMap = {\n typeid: 'SimpleTest:ConstantTypedMap-1.0.0',\n constants: [\n {\n id: 'map', typeid: 'SimpleTest:ConstantTypedMapEntry-1.0.0', context: 'map', value: {\n key1: { string: 'I am a string 1' },\n key2: { string: 'I am a string 2' },\n },\n },\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }],\n };\n\n PropertyFactory.register(ConstantTypedMapEntry);\n PropertyFactory.register(ConstantTypedMap);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantTypedMap-1.0.0');\n\n expect(instance.get('map')._contextKeyType).to.equal('string');\n expect(instance.get('map').getEntriesReadOnly().key1.get('string').getValue()).to.equal('I am a string 1');\n expect(instance.get('map').getEntriesReadOnly().key2.get('string').getValue()).to.equal('I am a string 2');\n });\n\n it('should support map constants with templateid keys', function() {\n var ConstantTemplate = {\n typeid: 'SimpleTest:ConstantTemplate-1.0.0',\n constants: [\n {\n id: 'map',\n typeid: 'Int32',\n context: 'map',\n contextKeyType: 'typeid',\n value: { 'SimpleTest:ConstantTemplate1-1.0.0': 1, 'SimpleTest:ConstantTemplate2-1.0.0': -1 },\n },\n ],\n properties: [{ id: 'default', typeid: 'Uint32' }],\n };\n PropertyFactory._reregister(ConstantTemplate);\n var instance = PropertyFactory.create('SimpleTest:ConstantTemplate-1.0.0');\n\n expect(instance.get('map')._contextKeyType).to.equal('typeid');\n expect(instance.get('map').get('SimpleTest:ConstantTemplate1-1.0.0')).to.equal(1);\n expect(instance.get('map').get('SimpleTest:ConstantTemplate2-1.0.0')).to.equal(-1);\n });\n\n it('should support constants with no value defined', function() {\n var ConstantNoValueEntry = {\n typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0',\n inherits: ['NamedProperty'],\n constants: [\n { id: 'num', typeid: 'Int16' },\n { id: 'bool', typeid: 'Bool' },\n { id: 'string', typeid: 'String' },\n ],\n };\n\n var ConstantNoValue = {\n typeid: 'SimpleTest:ConstantNoValue-1.0.0',\n constants: [\n { id: 'int', typeid: 'Int32' },\n { id: 'bool', typeid: 'Bool' },\n { id: 'string', typeid: 'String' },\n { id: 'array', typeid: 'Int16', context: 'array' },\n { id: 'array_typed', typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0', context: 'array' },\n { id: 'set', typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0', context: 'set' },\n { id: 'map', typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0', context: 'map' },\n ],\n };\n\n var ConstantNoValueInherited = {\n typeid: 'SimpleTest:ConstantNoValueInherited-1.0.0',\n inherits: 'SimpleTest:ConstantNoValue-1.0.0',\n constants: [\n { id: 'int', typeid: 'Int32', value: 100 },\n { id: 'bool', typeid: 'Bool', value: true },\n { id: 'string', typeid: 'String', value: 'I am a string' },\n { id: 'array', typeid: 'Int16', context: 'array', value: [100, 200] },\n {\n id: 'array_typed', typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0', context: 'array', value: [\n { num: 100 },\n { num: 200, string: 'I am a string 2', bool: true }],\n },\n {\n id: 'set', typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0', context: 'set', value: [\n { num: 100 },\n { num: 200, string: 'I am a string 2', bool: true }],\n },\n {\n id: 'map', typeid: 'SimpleTest:ConstantNoValueEntry-1.0.0', context: 'map', value: {\n key1: { num: 100 },\n key2: { num: 200, string: 'I am a string 2', bool: true },\n },\n },\n ],\n };\n\n PropertyFactory.register(ConstantNoValueEntry);\n PropertyFactory.register(ConstantNoValue);\n PropertyFactory.register(ConstantNoValueInherited);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantNoValue-1.0.0');\n var instanceInherited = PropertyFactory.create('SimpleTest:ConstantNoValueInherited-1.0.0');\n\n expect(instance.get('int').getValue()).to.equal(0);\n expect(instance.get('bool').getValue()).to.equal(false);\n expect(instance.get('string').getValue()).to.equal('');\n expect(instance.get('array').getValues()).to.deep.equal([]);\n expect(instance.get('array_typed').getValues()).to.deep.equal([]);\n expect(instance.get('set').getAsArray()).to.deep.equal([]);\n expect(instance.get('map').getEntriesReadOnly()).to.deep.equal({});\n\n expect(instanceInherited.get('int').getValue()).to.equal(100);\n expect(instanceInherited.get('bool').getValue()).to.equal(true);\n expect(instanceInherited.get('string').getValue()).to.equal('I am a string');\n expect(instanceInherited.get('array').getValues()).to.deep.equal([100, 200]);\n\n let arr = instanceInherited.get('array_typed').getValues();\n expect(arr[0]['num']).to.equal(100);\n expect(arr[0]['string']).to.equal('');\n expect(arr[0]['bool']).to.equal(false);\n expect(arr[1]['num']).to.equal(200);\n expect(arr[1]['string']).to.equal('I am a string 2');\n expect(arr[1]['bool']).to.equal(true);\n\n let set = instanceInherited.get('set').getAsArray();\n\n expect(set[0].get('num').getValue()).to.equal(100);\n expect(set[0].get('string').getValue()).to.equal('');\n expect(set[0].get('bool').getValue()).to.equal(false);\n expect(set[1].get('num').getValue()).to.equal(200);\n expect(set[1].get('string').getValue()).to.equal('I am a string 2');\n expect(set[1].get('bool').getValue()).to.equal(true);\n\n let map = instanceInherited.get('map').getEntriesReadOnly();\n expect(map.key1.get('num').getValue()).to.equal(100);\n expect(map.key1.get('string').getValue()).to.equal('');\n expect(map.key1.get('bool').getValue()).to.equal(false);\n expect(map.key2.get('num').getValue()).to.equal(200);\n expect(map.key2.get('string').getValue()).to.equal('I am a string 2');\n expect(map.key2.get('bool').getValue()).to.equal(true);\n });\n\n describe('#Polymorphic', function() {\n var ConstantPolyBase = {\n typeid: 'SimpleTest:ConstantPolyBase-1.0.0',\n inherits: ['NamedProperty'],\n constants: [\n { id: 'num', typeid: 'Uint32', value: 111 },\n ],\n };\n\n var ConstantPolySub = {\n typeid: 'SimpleTest:ConstantPolySub-1.0.0',\n inherits: 'SimpleTest:ConstantPolyBase-1.0.0',\n constants: [\n { id: 'num', typeid: 'Uint32', value: 222 },\n { id: 'str', typeid: 'String', value: 'Sub' },\n ],\n };\n\n var ConstantPolySubSub = {\n typeid: 'SimpleTest:ConstantPolySubSub-1.0.0',\n inherits: 'SimpleTest:ConstantPolySub-1.0.0',\n constants: [\n { id: 'num', typeid: 'Uint32', value: 333 },\n { id: 'num2', typeid: 'Uint32', value: 111 },\n { id: 'str', typeid: 'String', value: 'SubSub' },\n ],\n };\n\n beforeEach(function() {\n PropertyFactory._clear();\n PropertyFactory.register(ConstantPolyBase);\n PropertyFactory.register(ConstantPolySub);\n PropertyFactory.register(ConstantPolySubSub);\n });\n\n it('should set constant polymorphic values for non-primitive constants', function() {\n var ConstantPolyContainer = {\n typeid: 'SimpleTest:ConstantPolyContainer-1.0.0',\n constants: [\n {\n id: 'polySub', typeid: 'SimpleTest:ConstantPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:ConstantPolySub-1.0.0', value: { num: 333, str: 'PolySub' } },\n },\n {\n id: 'polySubSub', typeid: 'SimpleTest:ConstantPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:ConstantPolySubSub-1.0.0', value: { num: 444, str: 'PolySubSub' } },\n },\n ],\n };\n\n PropertyFactory.register(ConstantPolyContainer);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantPolyContainer-1.0.0');\n expect(instance.get('polySub').get('num').getValue()).to.equal(333);\n expect(instance.get('polySub').get('str').getValue()).to.equal('PolySub');\n\n expect(instance.get('polySubSub').get('num').getValue()).to.equal(444);\n expect(instance.get('polySubSub').get('str').getValue()).to.equal('PolySubSub');\n expect(instance.get('polySubSub').get('num2').getValue()).to.equal(111);\n });\n\n it('should pass when setting a constant typedValue that doesnt have a value.', function() {\n var ConstantPolyNoValueContainer = {\n typeid: 'SimpleTest:ConstantPolyNoValueContainer-1.0.0',\n constants: [{\n id: 'polySub', typeid: 'SimpleTest:ConstantPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:ConstantPolySub-1.0.0' },\n }],\n };\n\n PropertyFactory.register(ConstantPolyNoValueContainer);\n var prop = PropertyFactory.create('SimpleTest:ConstantPolyNoValueContainer-1.0.0');\n\n expect(prop.get('polySub').get('str').value).to.equal('Sub');\n });\n\n it('should fail when setting a constant typedValue that doesnt have a typeid.', function() {\n var ConstantPolyNoTypeIdContainer = {\n typeid: 'SimpleTest:ConstantPolyNoTypeIdContainer-1.0.0',\n constants: [{\n id: 'polySub', typeid: 'SimpleTest:ConstantPolyBase-1.0.0',\n typedValue: { value: { num: 333, str: 'PolySub' } },\n }],\n };\n\n PropertyFactory.register(ConstantPolyNoTypeIdContainer);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:ConstantPolyNoTypeIdContainer-1.0.0'))\n .to.throw(MSG.FIELD_TYPEID_IS_REQUIRED + 'typedValue SimpleTest:ConstantPolyBase-1.0.0');\n });\n\n it('should set a constant polymorphic value for a non-primitive array', function() {\n var ConstantPolyArrayContainer = {\n typeid: 'SimpleTest:ConstantPolyArrayContainer-1.0.0',\n constants: [\n {\n id: 'array', typeid: 'SimpleTest:ConstantPolyBase-1.0.0', context: 'array', typedValue: [\n { typeid: 'SimpleTest:ConstantPolySub-1.0.0' },\n { typeid: 'SimpleTest:ConstantPolySub-1.0.0', value: { str: 'ArrSub' } },\n { typeid: 'SimpleTest:ConstantPolySubSub-1.0.0', value: { str: 'ArrSubSub' } },\n ],\n },\n ],\n };\n\n PropertyFactory.register(ConstantPolyArrayContainer);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantPolyArrayContainer-1.0.0');\n expect(instance.get('array').get(0).get('num').value).to.equal(222);\n expect(instance.get('array').get(0).get('str').value).to.equal('Sub');\n expect(instance.get('array').get(1).get('num').value).to.equal(222);\n expect(instance.get('array').get(1).get('str').value).to.equal('ArrSub');\n expect(instance.get('array').get(2).get('num').value).to.equal(333);\n expect(instance.get('array').get(2).get('str').value).to.equal('ArrSubSub');\n expect(instance.get('array').get(2).get('num2').value).to.equal(111);\n });\n\n it('should set a constant polymorphic value for a non-primitive set', function() {\n var ConstantPolySetContainer = {\n typeid: 'SimpleTest:ConstantPolySetContainer-1.0.0',\n constants: [\n {\n id: 'set', typeid: 'SimpleTest:ConstantPolyBase-1.0.0', context: 'set', typedValue: [\n { typeid: 'SimpleTest:ConstantPolySub-1.0.0' },\n { typeid: 'SimpleTest:ConstantPolySub-1.0.0', value: { str: 'ArrSub' } },\n { typeid: 'SimpleTest:ConstantPolySubSub-1.0.0', value: { str: 'ArrSubSub' } },\n ],\n },\n ],\n };\n\n PropertyFactory.register(ConstantPolySetContainer);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantPolySetContainer-1.0.0');\n\n expect(instance.get('set').getAsArray().length).to.equal(3);\n expect(instance.get('set').getAsArray()[0].get('num').getValue()).to.equal(222);\n expect(instance.get('set').getAsArray()[0].get('str').getValue()).to.equal('Sub');\n expect(instance.get('set').getAsArray()[1].get('num').getValue()).to.equal(222);\n expect(instance.get('set').getAsArray()[1].get('str').getValue()).to.equal('ArrSub');\n expect(instance.get('set').getAsArray()[2].get('num').getValue()).to.equal(333);\n expect(instance.get('set').getAsArray()[2].get('str').getValue()).to.equal('ArrSubSub');\n expect(instance.get('set').getAsArray()[2].get('num2').getValue()).to.equal(111);\n });\n\n it('should set a constant polymorphic value for a non-primitive map', function() {\n var ConstantPolyMapContainer = {\n typeid: 'SimpleTest:ConstantPolyMapContainer-1.0.0',\n constants: [\n {\n id: 'map', typeid: 'SimpleTest:ConstantPolyBase-1.0.0', context: 'map', typedValue: {\n key1: { typeid: 'SimpleTest:ConstantPolySub-1.0.0' },\n key2: { typeid: 'SimpleTest:ConstantPolySub-1.0.0', value: { str: 'ArrSub' } },\n key3: { typeid: 'SimpleTest:ConstantPolySubSub-1.0.0', value: { str: 'ArrSubSub' } },\n },\n },\n ],\n };\n\n PropertyFactory.register(ConstantPolyMapContainer);\n\n var instance = PropertyFactory.create('SimpleTest:ConstantPolyMapContainer-1.0.0');\n\n expect(instance.get('map').getEntriesReadOnly().key1.get('num').getValue()).to.equal(222);\n expect(instance.get('map').getEntriesReadOnly().key1.get('str').getValue()).to.equal('Sub');\n expect(instance.get('map').getEntriesReadOnly().key2.get('num').getValue()).to.equal(222);\n expect(instance.get('map').getEntriesReadOnly().key2.get('str').getValue()).to.equal('ArrSub');\n expect(instance.get('map').getEntriesReadOnly().key3.get('num').getValue()).to.equal(333);\n expect(instance.get('map').getEntriesReadOnly().key3.get('str').getValue()).to.equal('ArrSubSub');\n expect(instance.get('map').getEntriesReadOnly().key3.get('num2').getValue()).to.equal(111);\n });\n\n it('should fail when setting constant polymorphic values not derived from base type', function() {\n var ConstantPoly = {\n typeid: 'SimpleTest:ConstantPoly-1.0.0',\n constants: [\n { id: 'num', typeid: 'Uint32', value: 111 },\n ],\n };\n\n var ConstantPolyUnderivedContainer = {\n typeid: 'SimpleTest:ConstantPolyUnderivedContainer-1.0.0',\n constants: [\n {\n id: 'poly', typeid: 'SimpleTest:ConstantPolyBase-1.0.0',\n typedValue: { typeid: 'SimpleTest:ConstantPoly-1.0.0', value: { num: 333 } },\n },\n ],\n };\n\n PropertyFactory.register(ConstantPoly);\n PropertyFactory.register(ConstantPolyUnderivedContainer);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:ConstantPolyUnderivedContainer-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_MUST_DERIVE_FROM_BASE_TYPE + 'SimpleTest:ConstantPoly-1.0.0');\n });\n\n it('should fail when setting a typedValue to a primitive.', function() {\n var DefaultPrimitiveArrayPoly = {\n typeid: 'SimpleTest:DefaultPrimitivePoly-1.0.0',\n constants: [{\n id: 'int', typeid: 'Int32', typedValue: { typeid: 'Int32', value: 123 },\n }],\n };\n\n PropertyFactory.register(DefaultPrimitiveArrayPoly);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPrimitivePoly-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_FOR_PRIMITIVES_NOT_SUPPORTED + 'int');\n });\n\n it('should fail when setting a typedValue to a primitive array.', function() {\n var DefaultPrimitiveArrayPoly = {\n typeid: 'SimpleTest:DefaultPrimitiveArrayPoly-1.0.0',\n constants: [{\n id: 'array', context: 'array', typeid: 'Int32', typedValue: [{ typeid: 'Int32', value: 123 }],\n }],\n };\n\n PropertyFactory.register(DefaultPrimitiveArrayPoly);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPrimitiveArrayPoly-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_FOR_PRIMITIVES_NOT_SUPPORTED + 'array');\n });\n\n it('should fail when setting a typedValue to a primitive map.', function() {\n var DefaultPrimitiveMapPoly = {\n typeid: 'SimpleTest:DefaultPrimitiveMapPoly-1.0.0',\n constants: [{\n id: 'map', context: 'map', typeid: 'Int32', typedValue: {\n key1: { typeid: 'Int32', value: 1 },\n key2: { typeid: 'Int32', value: 2 },\n },\n }],\n };\n\n PropertyFactory.register(DefaultPrimitiveMapPoly);\n\n expect(PropertyFactory.create.bind(PropertyFactory, 'SimpleTest:DefaultPrimitiveMapPoly-1.0.0'))\n .to.throw(MSG.TYPED_VALUES_FOR_PRIMITIVES_NOT_SUPPORTED + 'map');\n });\n });\n });\n\n describe('InstanceOf Type Checking', function() {\n it('Native types pass instanceOf check', function() {\n var contextSingleTypes = ['NodeProperty', 'Enum'];\n var propTypes = ['String', 'Bool', 'Int8', 'Uint8', 'Int16', 'Uint16', 'Int32', 'Int64', 'Uint64', 'Uint32',\n 'Float32', 'Float64', 'Reference'];\n\n var contextSingleTypes = propTypes.concat(['NodeProperty', 'Enum']);\n for (var i = 0; i < contextSingleTypes.length; ++i) {\n var propType = contextSingleTypes[i];\n expect(PropertyFactory.instanceOf(PropertyFactory.create(propType), propType)).to.be.true;\n }\n\n for (var j = 0; j < propTypes.length; ++j) {\n var propType = propTypes[j];\n expect(PropertyFactory.instanceOf(PropertyFactory.create(propType, 'map'), propType, 'map')).to.be.true;\n }\n\n var contextArrayTypes = propTypes.concat(['Enum']);\n for (var k = 0; k < contextArrayTypes.length; ++k) {\n var propType = contextArrayTypes[k];\n expect(PropertyFactory.instanceOf(PropertyFactory.create(propType, 'array'), propType, 'array')).to.be.true;\n }\n });\n\n it('instanceOf check succeeds for schema based properties and native typeids', function() {\n PropertyFactory.register(SimplePoint);\n expect(PropertyFactory.instanceOf(PropertyFactory.create(SimplePoint.typeid), 'BaseProperty')).to.be.true;\n\n const testEnum = {\n inherits: 'Enum',\n typeid: 'test:testEnum-1.0.0',\n properties: [{ id: 'test', value: 1 }],\n };\n PropertyFactory.register(testEnum);\n expect(PropertyFactory.instanceOf(\n PropertyFactory.create(testEnum.typeid, 'array'), 'Enum', 'array')).to.be.true;\n });\n\n it('instanceOf check fails for non native typeids', function() {\n PropertyFactory.register(SimplePoint);\n expect(PropertyFactory.instanceOf(PropertyFactory.create(SimplePoint.typeid), SimplePoint.typeid)).to.be.false;\n });\n });\n});\n\ndescribe('Template registration', function() {\n var ColorID, myPropertyFactory;\n\n before(function() {\n ColorID = require('./validation/goodColorId');\n });\n\n beforeEach(function() {\n this.sinon = sinon.createSandbox();\n this.sinon.stub(console, 'warn');\n myPropertyFactory = new PropertyFactory.constructor();\n });\n\n afterEach(function() {\n this.sinon.restore();\n });\n\n it('should register a versioned template', function() {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n });\n\n it(\n 'should print a warning when registering an existing template that is not different from what is in the registry',\n function() {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-0-0'].original);\n expect(console.warn.callCount).to.equal(1);\n },\n );\n\n it(\n 'should accept registering a different template from what is in the registry if it is semantically equivalent',\n function() {\n var testPropertyTypeId = 'TEST:array.Float32-0.0.1';\n var ValuesTemplate1 = {\n typeid: testPropertyTypeId,\n inherits: 'NamedProperty',\n properties: [{\n id: 'values',\n context: 'array',\n typeid: 'Float32',\n }],\n };\n\n var ValuesTemplate2 = {\n typeid: testPropertyTypeId,\n inherits: ['NamedProperty'],\n properties: [{\n id: 'values',\n context: 'array',\n typeid: 'Float32',\n length: 0,\n }],\n };\n\n myPropertyFactory.register(ValuesTemplate1);\n expect(myPropertyFactory.register.bind(myPropertyFactory, ValuesTemplate2)).to.not.throw();\n },\n );\n\n it(\n 'should throw when registering an existing template version that is different from what is in the registry',\n function() {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n expect(myPropertyFactory.register.bind(\n myPropertyFactory,\n ColorID['1-0-0'].modified),\n ).to.throw(Error);\n },\n );\n\n it('should throw when registering an unversioned template', function() {\n expect(myPropertyFactory.register.bind(\n myPropertyFactory,\n require('./validation/badMissingSemverInTypeid'),\n )).to.throw(Error);\n });\n\n it('should throw when registering an invalid versioned template', function() {\n expect(myPropertyFactory.register.bind(\n myPropertyFactory,\n require('./validation/badPrimitiveTypeid'),\n )).to.throw(Error);\n });\n\n it('should throw when registering a primitive property through the public API', function() {\n expect(myPropertyFactory.register.bind(\n myPropertyFactory,\n 'String',\n StringProperty),\n ).to.throw(Error);\n });\n\n it('should register templates out of order without any warnings or errors', function() {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-1-0'].goodSemver);\n myPropertyFactory.register(ColorID['1-0-1'].goodSemver);\n\n myPropertyFactory = new PropertyFactory.constructor();\n\n myPropertyFactory.register(ColorID['1-1-0'].goodSemver);\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-0-1'].goodSemver);\n\n expect(console.warn.callCount).to.equal(0);\n });\n\n it('should register a new template with the PATCH version updated', function() {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-0-1'].goodSemver);\n expect(console.warn.callCount).to.equal(0);\n });\n\n it('should register a new template with the MINOR version updated', function() {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-1-0'].goodSemver);\n expect(console.warn.callCount).to.equal(0);\n });\n\n it('should print a warning when registering a new template with the wrong version updated', function() {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-1-0'].badSemver1);\n\n myPropertyFactory = new PropertyFactory.constructor();\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['1-1-0'].badSemver2);\n\n myPropertyFactory = new PropertyFactory.constructor();\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory._registerRemoteTemplate(ColorID['1-1-0'].badSemver1, generateGUID());\n\n myPropertyFactory = new PropertyFactory.constructor();\n myPropertyFactory.register(ColorID['1-1-0'].badSemver2);\n myPropertyFactory._registerRemoteTemplate(ColorID['1-0-0'].original, generateGUID());\n\n expect(console.warn.callCount).to.equal(4);\n });\n\n it('should register a new template with the MAJOR version updated', function() {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['2-0-0']);\n expect(console.warn.callCount).to.equal(0);\n });\n\n it('should register a versioned remote template', function() {\n myPropertyFactory._registerRemoteTemplate(ColorID['1-0-0'].original, generateGUID());\n });\n\n it(\n 'should pass when registering a versioned remote template that exists' +\n ' in the local registry but is the same from what is locally registered',\n function() {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory._registerRemoteTemplate(ColorID['1-0-0'].original, generateGUID());\n\n myPropertyFactory = new PropertyFactory.constructor();\n\n myPropertyFactory._registerRemoteTemplate(ColorID['1-0-0'].original, generateGUID());\n myPropertyFactory.register(ColorID['1-0-0'].original);\n expect(console.warn.callCount).to.equal(0);\n },\n );\n\n it(\n 'should fail when registering a versioned remote template that exists' +\n ' in the local registry but differs from what is locally registered',\n function() {\n myPropertyFactory.register(ColorID['1-0-0'].original);\n expect(myPropertyFactory._registerRemoteTemplate.bind(\n myPropertyFactory,\n ColorID['1-0-0'].modified,\n generateGUID()),\n ).to.throw(Error);\n },\n );\n\n it('should throw when registering an unversioned remote template', function() {\n expect(myPropertyFactory._registerRemoteTemplate.bind(\n myPropertyFactory,\n require('./validation/badMissingSemverInTypeid'),\n generateGUID(),\n )).to.throw(Error);\n });\n\n it(\n 'should register a remote template even when there are other versions of the same template in the local registry',\n function() {\n var scope = generateGUID();\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['2-0-0']);\n\n myPropertyFactory._registerRemoteTemplate(ColorID['1-1-0'].goodSemver, scope);\n myPropertyFactory._registerRemoteTemplate(ColorID['1-0-1'].goodSemver, scope);\n expect(console.warn.callCount).to.equal(0);\n },\n );\n\n it(\n 'should register a local template even when there are other versions of the same template in the remote registry',\n function() {\n var scope = generateGUID();\n var scope2 = generateGUID();\n myPropertyFactory._registerRemoteTemplate(ColorID['1-1-0'].goodSemver, scope);\n myPropertyFactory._registerRemoteTemplate(ColorID['1-0-1'].goodSemver, scope);\n myPropertyFactory._registerRemoteTemplate(require('./validation/goodPointId'), scope2);\n myPropertyFactory._registerRemoteTemplate(require('./validation/goodColorPalette'), scope2);\n\n myPropertyFactory.register(ColorID['1-0-0'].original);\n myPropertyFactory.register(ColorID['2-0-0']);\n\n expect(console.warn.callCount).to.equal(0);\n },\n );\n\n it('`registered` event is triggered when registering a template', function(done) {\n var typeid = 'test:schemaReg-1.0.0';\n var registeredEventListener = function(template) {\n expect(template).to.exist;\n expect(template.typeid).to.equal(typeid);\n done();\n };\n\n PropertyFactory.addListener('registered', registeredEventListener);\n\n PropertyFactory.register({\n typeid: typeid,\n });\n // We remove the listener to avoid unnecessary calls for later templates registration.\n PropertyFactory.removeListener('registered', registeredEventListener);\n });\n});\n\ndescribe('Only properties and constants that inherit from NamedProperty can have the \"set\" context', function() {\n beforeEach(() => PropertyFactory._clear());\n afterEach(() => PropertyFactory._clear());\n\n describe('Properties', () => {\n describe('should throw when trying to register a set not inheriting from a namedProperty', () => {\n it('declared in a template', () => {\n var templateChild = {\n typeid: 'adsk.test:anotherTestSchema-1.0.0',\n };\n\n var template = {\n typeid: 'adsk.test:testSchema-1.0.0',\n properties: [\n {\n id: 'something',\n context: 'set',\n typeid: 'adsk.test:anotherTestSchema-1.0.0',\n },\n ],\n };\n\n PropertyFactory.register(template);\n PropertyFactory.register(templateChild);\n\n expect(() => {\n PropertyFactory.create(template.typeid);\n }).to.throw(MSG.SET_ONLY_NAMED_PROPS + templateChild.typeid);\n });\n\n it('declared in a template with two level of inheritance', () => {\n var itemParentTemplate = {\n typeid: 'adsk.test:itemParent-1.0.0',\n };\n\n var itemTemplate = {\n typeid: 'adsk.test:item-1.0.0',\n inherits: 'adsk.test:itemParent-1.0.0',\n };\n\n var template = {\n typeid: 'adsk.test:set-1.0.0',\n properties: [\n {\n id: 'something',\n context: 'set',\n typeid: 'adsk.test:item-1.0.0',\n },\n ],\n };\n\n PropertyFactory.register(itemParentTemplate);\n PropertyFactory.register(itemTemplate);\n PropertyFactory.register(template);\n\n expect(() => {\n PropertyFactory.create(template.typeid);\n }).to.throw(MSG.SET_ONLY_NAMED_PROPS + itemTemplate.typeid);\n });\n\n it('when passed as a parameter of the create method', () => {\n var template = {\n typeid: 'adsk.test:test-1.0.0',\n };\n\n PropertyFactory.register(template);\n\n expect(() => {\n PropertyFactory.create(template.typeid, 'set');\n }).to.throw(MSG.SET_ONLY_NAMED_PROPS + template.typeid);\n });\n });\n });\n\n describe('Constants', () => {\n describe('should throw when trying to register a set not inheriting from a namedProperty', () => {\n it('declared in a template', () => {\n var templateChild = {\n typeid: 'adsk.test:anotherTestSchema-1.0.0',\n };\n\n var template = {\n typeid: 'adsk.test:testSchema-1.0.0',\n constants: [\n {\n id: 'something',\n context: 'set',\n typeid: 'adsk.test:anotherTestSchema-1.0.0',\n value: 'hello',\n },\n ],\n };\n\n PropertyFactory.register(template);\n PropertyFactory.register(templateChild);\n\n expect(() => {\n PropertyFactory.create(template.typeid);\n }).to.throw(MSG.SET_ONLY_NAMED_PROPS + templateChild.typeid);\n });\n\n it('declared in a template with two level of inheritance', () => {\n var itemParentTemplate = {\n typeid: 'adsk.test:itemParent-1.0.0',\n };\n\n var itemTemplate = {\n typeid: 'adsk.test:item-1.0.0',\n inherits: 'adsk.test:itemParent-1.0.0',\n };\n\n var template = {\n typeid: 'adsk.test:set-1.0.0',\n constants: [\n {\n id: 'something',\n context: 'set',\n typeid: 'adsk.test:item-1.0.0',\n value: 'hello',\n },\n ],\n };\n\n PropertyFactory.register(itemParentTemplate);\n PropertyFactory.register(itemTemplate);\n PropertyFactory.register(template);\n\n expect(() => {\n PropertyFactory.create(template.typeid);\n }).to.throw(MSG.SET_ONLY_NAMED_PROPS + itemTemplate.typeid);\n });\n var unit = {\n 'annotation': {\n 'description': 'A definite magnitude used as a standard of measurement.',\n 'doc': 'http://docs.adskunits.apiary.io/#introduction/definitions/measurement-units',\n },\n 'typeid': 'autodesk.unit:unit-1.0.0',\n 'constants': [\n {\n 'id': 'name',\n 'typeid': 'String',\n },\n ],\n };\n var quantity = {\n 'annotation': { 'description': 'A quantity typically measured in a particular set of compatible units.' },\n 'typeid': 'autodesk.unit:quantity-1.0.0',\n 'constants': [\n {\n 'id': 'name',\n 'typeid': 'String',\n },\n {\n 'id': 'units',\n 'typeid': 'autodesk.unit:unit-1.0.0',\n 'context': 'array',\n 'typedValue': [],\n 'annotation': { 'description': 'List of all measurement units applicable to the measurable quantity.' },\n },\n ],\n };\n var area = {\n 'annotation': { 'description': 'Area.' },\n 'typeid': 'autodesk.unit.quantity:area-1.0.0',\n 'inherits': ['autodesk.unit:quantity-1.0.0'],\n 'constants': [\n { 'id': 'name', 'value': 'Area' },\n {\n 'id': 'units',\n 'typedValue': [\n { 'typeid': 'autodesk.unit.unit:squareCentimeters-1.0.0' },\n ],\n },\n ],\n };\n var centimeter = {\n 'annotation': { 'description': 'Square centimeters.' },\n 'typeid': 'autodesk.unit.unit:squareCentimeters-1.0.0',\n 'inherits': ['autodesk.unit:unit-1.0.0'],\n 'constants': [\n { 'id': 'name', 'value': 'Square centimeters' },\n ],\n };\n it('@bugfix should support constant which inhirets from a polymorphic array', () => {\n PropertyFactory.register(unit);\n PropertyFactory.register(quantity);\n PropertyFactory.register(area);\n PropertyFactory.register(centimeter);\n var centimeterProp = PropertyFactory.create(centimeter.typeid);\n\n var areaProp = PropertyFactory.create(area.typeid);\n\n expect(areaProp.get('units').get(0).get('name').value).to.equal(centimeterProp.get('name').value);\n });\n });\n });\n});\n\ndescribe('Async validation', function() {\n var TemplateValidator;\n var inheritsFromAsync = async function(child, ancestor) {\n return new Promise(function(resolve, reject) {\n setTimeout(function() {\n try {\n resolve(PropertyFactory.inheritsFrom(child, ancestor));\n } catch (error) {\n reject(error);\n }\n }, 0);\n });\n };\n\n var hasSchemaAsync = async function(typeid) {\n return new Promise(function(resolve, reject) {\n setTimeout(function() {\n resolve(PropertyFactory._has(typeid));\n }, 0);\n });\n };\n\n before(function() {\n TemplateValidator = require('@fluid-experimental/property-changeset').TemplateValidator;\n });\n\n it('can validate asynchronously', function() {\n var templateValidator = new TemplateValidator({\n inheritsFromAsync: inheritsFromAsync,\n hasSchemaAsync: hasSchemaAsync,\n });\n\n var templatePrevious = JSON.parse(JSON.stringify(require('./validation/goodPointId')));\n var template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-0.9.9';\n return templateValidator.validateAsync(template, templatePrevious).then(function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.VERSION_REGRESSION_1);\n });\n });\n\n it('can perform context validation asynchronously', function(done) {\n var templateValidator = new TemplateValidator({\n inheritsFromAsync: inheritsFromAsync,\n hasSchemaAsync: hasSchemaAsync,\n });\n\n // Doesn't inherit from 'NamedProperty'. Will cause an error\n var grandParentSchema = {\n 'typeid': 'test:grandparentschema-1.0.0',\n };\n\n var parentSchema = {\n 'typeid': 'test:parentschema-1.0.0',\n 'inherits': ['test:grandparentschema-1.0.0'],\n };\n\n var childSchema = {\n 'typeid': 'test:childchema-1.0.0',\n properties: [\n {\n id: 'set',\n typeid: 'test:parentschema-1.0.0',\n context: 'set',\n },\n ],\n };\n\n PropertyFactory.register(grandParentSchema);\n PropertyFactory.register(parentSchema);\n\n templateValidator.validateAsync(childSchema).then(function(result) {\n done(new Error('Should not be valid!'));\n }).catch(function(error) {\n expect(error).to.exist;\n done();\n });\n });\n});\n\ndescribe('inheritsFrom() method', () => {\n beforeEach(() => {\n PropertyFactory._clear();\n PropertyFactory.register([\n {\n typeid: 'autodesk.examples:test.set-1.0.0',\n inherits: 'NamedProperty',\n },\n ]);\n });\n\n it('should recognize that the Int8 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Int8', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Uint8 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Uint8', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Int16 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Int16', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Uint16 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Uint16', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Int32 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Int32', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Uint32 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Uint32', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Float32 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Float32', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Int64 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Int64', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Uint64 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Uint64', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Float64 only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Float64', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Bool only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Bool', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Reference only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Reference', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the Enum only inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('Enum', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the String inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('String', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the NodeProperty inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('NodeProperty', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the ContainerProperty inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('ContainerProperty', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the NamedProperty inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('NamedProperty', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the NamedNodeProperty inherits from BaseProperty', () => {\n const result = PropertyFactory.inheritsFrom('NamedNodeProperty', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the NodeProperty inherits from ContainerProperty', () => {\n const result = PropertyFactory.inheritsFrom('NodeProperty', 'ContainerProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the NamedProperty inherits from ContainerProperty', () => {\n const result = PropertyFactory.inheritsFrom('NamedProperty', 'ContainerProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the String inherits from ContainerProperty', () => {\n const result = PropertyFactory.inheritsFrom('String', 'ContainerProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the NamedNodeProperty inherits from NamedProperty', () => {\n const result = PropertyFactory.inheritsFrom('NamedNodeProperty', 'NamedProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the NamedNodeProperty inherits from NodeProperty', () => {\n const result = PropertyFactory.inheritsFrom('NamedNodeProperty', 'NodeProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the test set that inherits from NamedNodeProperty also inherits from BaseProperty',\n () => {\n PropertyFactory._reregister({ typeid: 'autodesk.examples:test.set-1.0.0', inherits: 'NamedNodeProperty' });\n const result = PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'BaseProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the test set that inherits from NamedNodeProperty' +\n ' also inherits from AbstractStaticCollectionProperty',\n () => {\n PropertyFactory._reregister({ typeid: 'autodesk.examples:test.set-1.0.0', inherits: 'NamedNodeProperty' });\n const result = PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0',\n 'AbstractStaticCollectionProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the test set that inherits from NamedNodeProperty also inherits from NodeProperty',\n () => {\n PropertyFactory._reregister({ typeid: 'autodesk.examples:test.set-1.0.0', inherits: 'NamedNodeProperty' });\n const result = PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'NodeProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the test set that inherits from NamedNodeProperty also inherits from NamedProperty',\n () => {\n PropertyFactory._reregister({ typeid: 'autodesk.examples:test.set-1.0.0', inherits: 'NamedNodeProperty' });\n const result = PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'NamedProperty');\n\n expect(result).to.be.true;\n });\n\n it('should recognize that the testSet doesn\\'t inherits from foe', () => {\n const result = PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'foe');\n\n expect(result).to.be.false;\n });\n\n it('should return true if in_templateTypeid = in_baseTypeid', () => {\n const result = PropertyFactory.inheritsFrom(\n 'autodesk.examples:test.set-1.0.0',\n 'autodesk.examples:test.set-1.0.0',\n );\n\n expect(result).to.be.true;\n });\n\n it('should return false if in_templateTypeid = in_baseTypeid but in_options.includeSelf is false', () => {\n const result = PropertyFactory.inheritsFrom(\n 'autodesk.examples:test.set-1.0.0',\n 'autodesk.examples:test.set-1.0.0',\n { includeSelf: false },\n );\n\n expect(result).to.be.false;\n });\n\n describe('Caching', () => {\n beforeEach(() => {\n // add a second schema for the cache tests\n PropertyFactory.register({\n typeid: 'autodesk.examples:test.set-2.0.0',\n inherits: 'NamedProperty',\n });\n });\n\n it('should cache results', () => {\n PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'NamedProperty');\n PropertyFactory.inheritsFrom('autodesk.examples:test.set-2.0.0', 'NamedProperty');\n\n const expectedResults = {\n 'autodesk.examples:test.set-1.0.0': {\n BaseProperty: true,\n AbstractStaticCollectionProperty: true,\n NamedProperty: true,\n },\n 'autodesk.examples:test.set-2.0.0': {\n BaseProperty: true,\n AbstractStaticCollectionProperty: true,\n NamedProperty: true,\n },\n };\n\n expect(PropertyFactory._inheritanceCache).to.deep.equal(expectedResults);\n });\n\n it('should refresh the cache when _reregister() is called', () => {\n PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'NamedProperty');\n\n PropertyFactory._reregister({ typeid: 'autodesk.examples:test.set-1.0.0', inherits: 'NodeProperty' });\n expect(PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'NodeProperty')).to.be.true;\n\n PropertyFactory._reregister({ typeid: 'autodesk.examples:test.set-2.0.0', inherits: 'NodeProperty' });\n expect(PropertyFactory.inheritsFrom('autodesk.examples:test.set-2.0.0', 'NodeProperty')).to.be.true;\n\n const expectedResults = {\n 'autodesk.examples:test.set-1.0.0': {\n BaseProperty: true,\n AbstractStaticCollectionProperty: true,\n NodeProperty: true,\n },\n 'autodesk.examples:test.set-2.0.0': {\n BaseProperty: true,\n AbstractStaticCollectionProperty: true,\n NodeProperty: true,\n },\n };\n\n expect(PropertyFactory._inheritanceCache).to.deep.equal(expectedResults);\n });\n\n it('should flush the cache when _clear() is called', () => {\n expect(PropertyFactory.inheritsFrom('autodesk.examples:test.set-1.0.0', 'NamedProperty')).to.be.true;\n expect(PropertyFactory.inheritsFrom('autodesk.examples:test.set-2.0.0', 'NamedProperty')).to.be.true;\n\n PropertyFactory._clear();\n expect(PropertyFactory._inheritanceCache).to.be.empty;\n });\n });\n});\n\ndescribe('Remote template scope collection', () => {\n var ColorID;\n var scope = () => PropertyFactory._remoteScopedAndVersionedTemplates;\n\n before(() => {\n ColorID = require('./validation/goodColorId');\n });\n\n beforeEach(() => {\n PropertyFactory._clear();\n });\n\n it('should collect registered remote templates in the scope.', () => {\n const scopeGuid = generateGUID();\n const templateA = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'testA:ColorID-1.0.0' });\n const templateB = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'testB:ColorID-1.0.0' });\n\n PropertyFactory._registerRemoteTemplate(templateA, scopeGuid);\n PropertyFactory._registerRemoteTemplate(templateB, scopeGuid);\n\n expect(scope().getCount()).to.be.equal(1);\n expect(scope().has(scopeGuid)).to.be.true;\n expect(scope().item(scopeGuid).getCount()).to.be.equal(2);\n\n expect(scope().item(scopeGuid).has('testA:ColorID')).to.be.true;\n expect(scope().item(scopeGuid).item('testA:ColorID').getKeys())\n .to.have.members(['1.0.0']);\n\n expect(scope().item(scopeGuid).has('testB:ColorID')).to.be.true;\n expect(scope().item(scopeGuid).item('testB:ColorID').getKeys())\n .to.have.members(['1.0.0']);\n });\n\n it('should remove a specific scope from the scope collection when _removeScope is called.', () => {\n const scopeGuidA = generateGUID();\n const scopeGuidB = generateGUID();\n const templateA = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'testA:ColorID-1.0.0' });\n const templateB = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'testB:ColorID-1.0.0' });\n\n PropertyFactory._registerRemoteTemplate(templateA, scopeGuidA);\n PropertyFactory._registerRemoteTemplate(templateB, scopeGuidB);\n\n expect(scope().getCount()).to.be.equal(2);\n expect(scope().has(scopeGuidA)).to.be.true;\n expect(scope().has(scopeGuidB)).to.be.true;\n\n PropertyFactory._removeScope(scopeGuidA);\n\n expect(scope().getCount()).to.be.equal(1);\n expect(scope().has(scopeGuidA)).to.be.false;\n expect(scope().has(scopeGuidB)).to.be.true;\n });\n\n it('should be able to get a specific template from the scope collection.', () => {\n const scopeGuidA = generateGUID();\n const scopeGuidB = generateGUID();\n const templateA = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'testA:ColorID-1.0.0' });\n const templateB = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'testB:ColorID-1.0.0' });\n\n PropertyFactory._registerRemoteTemplate(templateA, scopeGuidA);\n PropertyFactory._registerRemoteTemplate(templateB, scopeGuidB);\n\n expect(PropertyFactory._get('testA:ColorID-1.0.0', undefined, scopeGuidA).typeid)\n .to.be.equal('testA:ColorID-1.0.0');\n\n expect(PropertyFactory._get('testB:ColorID-1.0.0', undefined, scopeGuidB).typeid)\n .to.be.equal('testB:ColorID-1.0.0');\n });\n\n it('should be cleared when the PropertyFactory is.', () => {\n const scopeGuid = generateGUID();\n const template = Object.assign({}, ColorID['1-0-0'].original, { typeid: 'test:ColorID-1.0.0' });\n\n PropertyFactory._registerRemoteTemplate(template, scopeGuid);\n PropertyFactory._clear();\n\n expect(scope().getCount()).to.be.equal(0);\n });\n});\n"]}
|