Exemplo n.º 1
0
        public void Constructor_SetsProperties()
        {
            var edmEnumMember = new EdmEnumMember("Read", 1);

            Assert.Equal("Read", edmEnumMember.Name);
            Assert.Equal(1, edmEnumMember.Value);
        }
Exemplo n.º 2
0
        /// <inheritdoc/>
        public override IEdmExpression ToEdmExpression()
        {
            var properties = new List <IEdmPropertyConstructor>();

            if (_navigability.HasValue)
            {
                var enumType   = new EdmEnumType("Org.OData.Capabilities.V1", "NavigationType", false);
                var enumMember = new EdmEnumMember(enumType, _navigability.ToString(), new EdmEnumMemberValue((long)_navigability.Value));
                properties.Add(new EdmPropertyConstructor("Navigability", new EdmEnumMemberExpression(enumMember)));
            }

            if (_restrictedProperties.Any())
            {
                var collection = _restrictedProperties.Select(item => item.ToEdmExpression()).Where(item => item != null);
                if (collection.Any())
                {
                    properties.Add(new EdmPropertyConstructor("RestrictedProperties", new EdmCollectionExpression(collection)));
                }
            }

            if (!properties.Any())
            {
                return(null);
            }

            return(new EdmRecordExpression(properties));
        }
Exemplo n.º 3
0
        public void GetClrValue()
        {
            Type type    = typeof(AccessLevel);
            var  members = new EdmEnumMember[] { new EdmEnumMember("Read", 1) };

            var edmEnumType = new EdmEnumType(type, members);

            Assert.Equal(AccessLevel.Read, edmEnumType.GetClrValue("Read"));
        }
        public ODataAtomReaderEnumIntegrationTests()
        {
            this.userModel = new EdmModel();

            // enum without flags
            var enumType = new EdmEnumType("NS", "Color");
            var red      = new EdmEnumMember(enumType, "Red", new EdmIntegerConstant(1));

            enumType.AddMember(red);
            enumType.AddMember("Green", new EdmIntegerConstant(2));
            enumType.AddMember("Blue", new EdmIntegerConstant(3));
            this.userModel.AddElement(enumType);

            // enum with flags
            var enumFlagsType = new EdmEnumType("NS", "ColorFlags", isFlags: true);

            enumFlagsType.AddMember("Red", new EdmIntegerConstant(1));
            enumFlagsType.AddMember("Green", new EdmIntegerConstant(2));
            enumFlagsType.AddMember("Blue", new EdmIntegerConstant(4));
            this.userModel.AddElement(enumFlagsType);

            this.entityType = new EdmEntityType("NS", "MyEntityType", isAbstract: false, isOpen: true, baseType: null);
            EdmStructuralProperty floatId = new EdmStructuralProperty(this.entityType, "FloatId", EdmCoreModel.Instance.GetSingle(false));

            this.entityType.AddKeys(floatId);
            this.entityType.AddProperty(floatId);
            var enumTypeReference = new EdmEnumTypeReference(enumType, true);

            this.entityType.AddProperty(new EdmStructuralProperty(this.entityType, "Color", enumTypeReference));
            var enumFlagsTypeReference = new EdmEnumTypeReference(enumFlagsType, false);

            this.entityType.AddProperty(new EdmStructuralProperty(this.entityType, "ColorFlags", enumFlagsTypeReference));

            // enum in complex type
            EdmComplexType myComplexType = new EdmComplexType("NS", "MyComplexType");

            myComplexType.AddProperty(new EdmStructuralProperty(myComplexType, "MyColorFlags", enumFlagsTypeReference));
            myComplexType.AddProperty(new EdmStructuralProperty(myComplexType, "Height", EdmCoreModel.Instance.GetDouble(false)));
            this.userModel.AddElement(myComplexType);
            this.entityType.AddProperty(new EdmStructuralProperty(this.entityType, "MyComplexType", new EdmComplexTypeReference(myComplexType, true)));

            // enum in collection type
            EdmCollectionType myCollectionType = new EdmCollectionType(enumFlagsTypeReference);

            this.entityType.AddProperty(new EdmStructuralProperty(this.entityType, "MyCollectionType", new EdmCollectionTypeReference(myCollectionType)));

            this.userModel.AddElement(this.entityType);

            var defaultContainer = new EdmEntityContainer("NS", "DefaultContainer");

            this.entitySet = new EdmEntitySet(defaultContainer, "MySet", this.entityType);
            defaultContainer.AddEntitySet(this.entitySet.Name, this.entityType);
            this.userModel.AddElement(defaultContainer);
        }
Exemplo n.º 5
0
        internal static EdmEnumType CreateEdmEnumType(Type clrEnumType)
        {
            var edmEnumType = new EdmEnumType(clrEnumType.Namespace, clrEnumType.Name);

            foreach (Enum clrMember in Enum.GetValues(clrEnumType))
            {
                long value     = Convert.ToInt64(clrMember, CultureInfo.InvariantCulture);
                var  edmMember = new EdmEnumMember(edmEnumType, clrMember.ToString(), new EdmEnumMemberValue(value));
                edmEnumType.AddMember(edmMember);
            }
            return(edmEnumType);
        }
Exemplo n.º 6
0
        public void Constructor_SetsProperties()
        {
            Type type    = typeof(AccessLevel);
            var  members = new EdmEnumMember[0];

            var edmEnumType = new EdmEnumType(type, members);

            Assert.Same(type, edmEnumType.ClrType);
            Assert.Equal(type.FullName, edmEnumType.FullName);
            Assert.Equal(type.Name, edmEnumType.Name);
            Assert.Same(members, edmEnumType.Members);
        }
Exemplo n.º 7
0
        public void GetEnumWorks()
        {
            // Arrange
            IEdmEnumType         enumType = new EdmEnumType("NS", "Color");
            EdmEnumMember        member   = new EdmEnumMember(enumType, "Red", new EdmEnumMemberValue(2));
            IEdmRecordExpression record   = new EdmRecordExpression(
                new EdmPropertyConstructor("prop", new EdmEnumMemberExpression(member)));

            // Act
            Color?actual = record.GetEnum <Color>("prop");

            // Assert
            Assert.NotNull(actual);
            Assert.Equal(Color.Red, actual.Value);
        }
Exemplo n.º 8
0
        public EnumFilterFunctionalTests()
        {
            // set up the edm model etc
            this.userModel = new EdmModel();

            var enumType = new EdmEnumType("NS", "Color", EdmPrimitiveTypeKind.Int32, false);
            var red      = new EdmEnumMember(enumType, "Red", new EdmEnumMemberValue(1));

            enumType.AddMember(red);
            enumType.AddMember("Green", new EdmEnumMemberValue(2));
            enumType.AddMember("Blue", new EdmEnumMemberValue(3));
            enumType.AddMember("White", new EdmEnumMemberValue(-10));

            // add to model
            this.userModel.AddElement(enumType);

            // add enum property
            this.entityType = new EdmEntityType("NS", "MyEntityType", isAbstract: false, isOpen: true, baseType: null);
            var enumTypeReference = new EdmEnumTypeReference(enumType, true);

            this.entityType.AddProperty(new EdmStructuralProperty(this.entityType, "Color", enumTypeReference));

            // enum with flags
            var enumFlagsType = new EdmEnumType("NS", "ColorFlags", EdmPrimitiveTypeKind.Int64, true);

            enumFlagsType.AddMember("Red", new EdmEnumMemberValue(1L));
            enumFlagsType.AddMember("Green", new EdmEnumMemberValue(2L));
            enumFlagsType.AddMember("Blue", new EdmEnumMemberValue(4L));
            enumFlagsType.AddMember("GreenRed", new EdmEnumMemberValue(3L));

            // add to model
            this.userModel.AddElement(enumFlagsType);

            // add enum with flags
            var enumFlagsTypeReference = new EdmEnumTypeReference(enumFlagsType, true);

            this.entityType.AddProperty(new EdmStructuralProperty(this.entityType, "ColorFlags", enumFlagsTypeReference));

            this.userModel.AddElement(this.entityType);

            var defaultContainer = new EdmEntityContainer("NS", "DefaultContainer");

            this.userModel.AddElement(defaultContainer);

            this.entitySet = new EdmEntitySet(defaultContainer, "MySet", this.entityType);
            defaultContainer.AddElement(this.entitySet);
        }
        private IEdmEnumMember ConvertToStockMember(IEdmEnumMember edmMember, IEdmModel edmModel, EdmModel stockModel)
        {
            var stockMemberDeclaringType = stockModel.FindType(GetFullName(edmMember.DeclaringType)) as IEdmEnumType;

            var stockMember = new EdmEnumMember(
                stockMemberDeclaringType,
                edmMember.Name,
                edmMember.Value
                );

            ((EdmEnumType)stockMemberDeclaringType).AddMember(stockMember);

            // TODO: Documentation
            this.SetImmediateAnnotations(edmMember, stockMember, edmModel, stockModel);

            return(stockMember);
        }
        public void EdmEnumMemberReferenceExpression()
        {
            var et = new EdmEnumType("NS", "Spicy");
            var em = new EdmEnumMember(et, "Hot", new EdmIntegerConstant(5));
            var e  = new EdmEnumMemberReferenceExpression(em);

            Assert.AreEqual(EdmExpressionKind.EnumMemberReference, e.ExpressionKind, "e.ExpressionKind");
            Assert.AreEqual("Hot", e.ReferencedEnumMember.Name, "e.ReferencedEnumMember");
            Assert.IsFalse(e.IsBad(), "e good");

            this.VerifyThrowsException(typeof(ArgumentNullException), () => new EdmEnumMemberReferenceExpression(null));

            var ee = new MutableEdmEnumMemberReferenceExpression();

            Assert.IsNull(ee.ReferencedEnumMember, "e.ReferencedEntitySet");
            Assert.IsTrue(ee.IsBad(), "Expression is bad.");
            Assert.AreEqual(1, ee.Errors().Count(), "Expression has errors");
        }
Exemplo n.º 11
0
        public void EdmEnumMemberExpression()
        {
            var et = new EdmEnumType("NS", "Spicy");
            var em = new EdmEnumMember(et, "Hot", new EdmEnumMemberValue(5));
            var e  = new EdmEnumMemberExpression(em);

            Assert.AreEqual(EdmExpressionKind.EnumMember, e.ExpressionKind, "e.ExpressionKind");
            Assert.AreEqual("Hot", e.EnumMembers.Single().Name, "e.EnumMembers");
            Assert.IsFalse(e.IsBad(), "e good");

            this.VerifyThrowsException(typeof(ArgumentNullException), () => new EdmEnumMemberExpression(null));

            var ee = new MutableEdmEnumMemberExpression();

            Assert.IsNull(ee.EnumMembers, "e.EnumMembers");
            Assert.IsTrue(ee.IsBad(), "Expression is bad.");
            Assert.AreEqual(1, ee.Errors().Count(), "Expression has errors");
        }
        /// <inheritdoc/>
        public override IEdmExpression ToEdmExpression()
        {
            var properties = new List <IEdmPropertyConstructor>();

            if (_conformanceLevel.HasValue)
            {
                var enumType   = new EdmEnumType("Org.OData.Capabilities.V1", "ConformanceLevelType", false);
                var enumMember = new EdmEnumMember(enumType, _conformanceLevel.ToString(), new EdmEnumMemberValue((long)_conformanceLevel.Value));
                properties.Add(new EdmPropertyConstructor("ConformanceLevel", new EdmEnumMemberExpression(enumMember)));
            }

            if (!properties.Any())
            {
                return(null);
            }

            return(new EdmRecordExpression(properties));
        }
        /// <inheritdoc/>
        public override IEdmExpression ToEdmExpression()
        {
            var properties = new List <IEdmPropertyConstructor>();

            if (_isolationSupported.HasValue)
            {
                var enumType   = new EdmEnumType("Org.OData.Capabilities.V1", "IsolationLevel", true);
                var enumMember = new EdmEnumMember(enumType, _isolationSupported.ToString(), new EdmEnumMemberValue((long)_isolationSupported.Value));
                properties.Add(new EdmPropertyConstructor("IsolationSupported", new EdmEnumMemberExpression(enumMember)));
            }

            if (!properties.Any())
            {
                return(null);
            }

            return(new EdmRecordExpression(properties));
        }
Exemplo n.º 14
0
        private EdmEnumType BuildEnumType(RdmEnumType definition)
        {
            var edmType = edmModel.FindType(rdmModel.Namespace.NamespaceName + "." + definition.Name) as EdmEnumType;

            var flags = definition.IsFlags;

            for (int i = 0; i < definition.Members.Count; i++)
            {
                var elem   = definition.Members[i];
                var value  = flags ? (1 << i) : i;
                var member = new EdmEnumMember(edmType, elem.Name, new EdmEnumMemberValue(value));

                edmType.AddMember(member);
                foreach (var annotation in elem.Annotations)
                {
                    annotationBuilder.AddAnnotation(edmModel, member, annotation);
                }
            }
            return(edmType);
        }
        /// <inheritdoc/>
        public override IEdmExpression ToEdmExpression()
        {
            var properties = new List <IEdmPropertyConstructor>();

            if (_searchable.HasValue)
            {
                properties.Add(new EdmPropertyConstructor("Searchable", new EdmBooleanConstant(_searchable.Value)));
            }

            if (_unsupportedExpressions.HasValue)
            {
                var enumType   = new EdmEnumType("Org.OData.Capabilities.V1", "SearchExpressions", true);
                var enumMember = new EdmEnumMember(enumType, _unsupportedExpressions.ToString(), new EdmEnumMemberValue((long)_unsupportedExpressions.Value));
                properties.Add(new EdmPropertyConstructor("UnsupportedExpressions", new EdmEnumMemberExpression(enumMember)));
            }

            if (!properties.Any())
            {
                return(null);
            }

            return(new EdmRecordExpression(properties));
        }
Exemplo n.º 16
0
        private void CreateEnumTypeBody(EdmEnumType type, EnumTypeConfiguration config)
        {
            Contract.Assert(type != null);
            Contract.Assert(config != null);

            foreach (EnumMemberConfiguration member in config.Members)
            {
                // EdmIntegerConstant can only support a value of long type.
                long value;
                try
                {
                    value = Convert.ToInt64(member.MemberInfo, CultureInfo.InvariantCulture);
                }
                catch
                {
                    throw Error.Argument("value", SRResources.EnumValueCannotBeLong, Enum.GetName(member.MemberInfo.GetType(), member.MemberInfo));
                }

                EdmEnumMember edmMember = new EdmEnumMember(type, member.Name,
                                                            new EdmEnumMemberValue(value));
                type.AddMember(edmMember);
                _members[member.MemberInfo] = edmMember;
            }
        }
        /// <inheritdoc/>
        public IEdmExpression ToEdmExpression()
        {
            var properties = new List <IEdmPropertyConstructor>();

            if (_navigationProperty != null)
            {
                properties.Add(new EdmPropertyConstructor("NavigationProperty", _navigationProperty));
            }

            if (_navigability.HasValue)
            {
                var enumType   = new EdmEnumType("Org.OData.Capabilities.V1", "NavigationType", false);
                var enumMember = new EdmEnumMember(enumType, _navigability.ToString(), new EdmEnumMemberValue((long)_navigability.Value));
                properties.Add(new EdmPropertyConstructor("Navigability", new EdmEnumMemberExpression(enumMember)));
            }

            if (_filterFunctions.Any())
            {
                var collection = _filterFunctions.Select(item => item.ToEdmExpression()).Where(item => item != null);
                if (collection.Any())
                {
                    properties.Add(new EdmPropertyConstructor("FilterFunctions", new EdmCollectionExpression(collection)));
                }
            }

            if (_filterRestrictions != null)
            {
                properties.Add(new EdmPropertyConstructor("FilterRestrictions", _filterRestrictions.ToEdmExpression()));
            }

            if (_searchRestrictions != null)
            {
                properties.Add(new EdmPropertyConstructor("SearchRestrictions", _searchRestrictions.ToEdmExpression()));
            }

            if (_sortRestrictions != null)
            {
                properties.Add(new EdmPropertyConstructor("SortRestrictions", _sortRestrictions.ToEdmExpression()));
            }

            if (_topSupported.HasValue)
            {
                properties.Add(new EdmPropertyConstructor("TopSupported", new EdmBooleanConstant(_topSupported.Value)));
            }

            if (_skipSupported.HasValue)
            {
                properties.Add(new EdmPropertyConstructor("SkipSupported", new EdmBooleanConstant(_skipSupported.Value)));
            }

            if (_selectSupport != null)
            {
                properties.Add(new EdmPropertyConstructor("SelectSupport", _selectSupport.ToEdmExpression()));
            }

            if (_indexableByKey.HasValue)
            {
                properties.Add(new EdmPropertyConstructor("IndexableByKey", new EdmBooleanConstant(_indexableByKey.Value)));
            }

            if (_insertRestrictions != null)
            {
                properties.Add(new EdmPropertyConstructor("InsertRestrictions", _insertRestrictions.ToEdmExpression()));
            }

            if (_deepInsertSupport != null)
            {
                properties.Add(new EdmPropertyConstructor("DeepInsertSupport", _deepInsertSupport.ToEdmExpression()));
            }

            if (_updateRestrictions != null)
            {
                properties.Add(new EdmPropertyConstructor("UpdateRestrictions", _updateRestrictions.ToEdmExpression()));
            }

            if (_deepUpdateSupport != null)
            {
                properties.Add(new EdmPropertyConstructor("DeepUpdateSupport", _deepUpdateSupport.ToEdmExpression()));
            }

            if (_deleteRestrictions != null)
            {
                properties.Add(new EdmPropertyConstructor("DeleteRestrictions", _deleteRestrictions.ToEdmExpression()));
            }

            if (_optimisticConcurrencyControl.HasValue)
            {
                properties.Add(new EdmPropertyConstructor("OptimisticConcurrencyControl", new EdmBooleanConstant(_optimisticConcurrencyControl.Value)));
            }

            if (_readRestrictions != null)
            {
                properties.Add(new EdmPropertyConstructor("ReadRestrictions", _readRestrictions.ToEdmExpression()));
            }

            if (!properties.Any())
            {
                return(null);
            }

            return(new EdmRecordExpression(properties));
        }