コード例 #1
0
ファイル: ModelAttributesTest.cs プロジェクト: wahabshah/Mvc
        public void GetAttributesForTestProperty_ModelOverridesMetadataAttributes()
        {
            // Arrange
            var modelType = typeof(BaseViewModel);
            var property  = modelType.GetRuntimeProperties().FirstOrDefault(p => p.Name == "TestProperty");

            // Act
            var attributes = ModelAttributes.GetAttributesForProperty(modelType, property);

            // Assert
            var rangeAttributes = attributes.Attributes.OfType <RangeAttribute>().ToArray();

            Assert.NotNull(rangeAttributes[0]);
            Assert.Equal(0, (int)rangeAttributes[0].Minimum);
            Assert.Equal(10, (int)rangeAttributes[0].Maximum);
            Assert.NotNull(rangeAttributes[1]);
            Assert.Equal(10, (int)rangeAttributes[1].Minimum);
            Assert.Equal(100, (int)rangeAttributes[1].Maximum);
            Assert.Single(attributes.Attributes.OfType <FromHeaderAttribute>());

            rangeAttributes = attributes.PropertyAttributes.OfType <RangeAttribute>().ToArray();
            Assert.NotNull(rangeAttributes[0]);
            Assert.Equal(0, (int)rangeAttributes[0].Minimum);
            Assert.Equal(10, (int)rangeAttributes[0].Maximum);
            Assert.NotNull(rangeAttributes[1]);
            Assert.Equal(10, (int)rangeAttributes[1].Minimum);
            Assert.Equal(100, (int)rangeAttributes[1].Maximum);
            Assert.Single(attributes.PropertyAttributes.OfType <FromHeaderAttribute>());
        }
コード例 #2
0
        public void GetFromServiceAttributeFromBase_IncludesMetadataAttributes()
        {
            // Arrange
            var modelType = typeof(DerivedViewModel);
            var property  = modelType.GetRuntimeProperties().FirstOrDefault(p => p.Name == "Calculator");

            // Act
            var attributes = ModelAttributes.GetAttributesForProperty(modelType, property);

            // Assert
            Assert.Single(attributes.OfType <RequiredAttribute>());
            Assert.Single(attributes.OfType <FromServicesAttribute>());
        }
コード例 #3
0
        public void GetAttributesForVirtualPropertyFromDerived_IncludesMetadataAttributes()
        {
            // Arrange
            var modelType = typeof(DerivedViewModel);
            var property  = modelType.GetRuntimeProperties().FirstOrDefault(p => p.Name == "VirtualProperty");

            // Act
            var attributes = ModelAttributes.GetAttributesForProperty(modelType, property);

            // Assert
            Assert.Single(attributes.OfType <RequiredAttribute>());
            Assert.Single(attributes.OfType <RangeAttribute>());
        }
コード例 #4
0
        public void GetAttributesForBaseProperty_IncludesMetadataAttributes()
        {
            // Arrange
            var modelType = typeof(BaseViewModel);
            var property  = modelType.GetRuntimeProperties().FirstOrDefault(p => p.Name == "BaseProperty");

            // Act
            var attributes = ModelAttributes.GetAttributesForProperty(modelType, property);

            // Assert
            Assert.Single(attributes.OfType <RequiredAttribute>());
            Assert.Single(attributes.OfType <StringLengthAttribute>());
        }
コード例 #5
0
        public void GetAttributesForTestPropertyFromDerived_IncludesMetadataAttributes()
        {
            // Arrange
            var modelType = typeof(DerivedViewModel);
            var property  = modelType.GetRuntimeProperties().FirstOrDefault(p => p.Name == "TestProperty");

            // Act
            var attributes = ModelAttributes.GetAttributesForProperty(modelType, property);

            // Assert
            Assert.Single(attributes.OfType <RequiredAttribute>());
            Assert.Single(attributes.OfType <StringLengthAttribute>());
            Assert.DoesNotContain(typeof(RangeAttribute), attributes);
        }
コード例 #6
0
        private PropertyInformation CreatePropertyInformation(Type containerType, PropertyHelper helper)
        {
            var property = helper.Property;

            return(new PropertyInformation
            {
                PropertyHelper = helper,
                Prototype = CreateMetadataPrototype(ModelAttributes.GetAttributesForProperty(property),
                                                    containerType,
                                                    property.PropertyType,
                                                    property.Name),
                IsReadOnly = !property.CanWrite || property.SetMethod.IsPrivate
            });
        }
コード例 #7
0
        private IEnumerable <IModelValidator> GetValidatorsForProperty(ModelMetadata metadata)
        {
            var propertyName = metadata.PropertyName;
            var bindingFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase;
            var property     = metadata.ContainerType
                               .GetProperty(propertyName, bindingFlags);

            if (property == null)
            {
                throw new ArgumentException(
                          Resources.FormatCommon_PropertyNotFound(
                              metadata.ContainerType.FullName,
                              metadata.PropertyName),
                          "metadata");
            }

            var attributes = ModelAttributes.GetAttributesForProperty(metadata.ContainerType, property);

            return(GetValidators(metadata, attributes));
        }
コード例 #8
0
ファイル: ModelAttributesTest.cs プロジェクト: zyonet/Mvc
        public void GetAttributesForProperty_MergedAttributes()
        {
            // Arrange
            var property = typeof(MergedAttributes).GetRuntimeProperty(nameof(MergedAttributes.Property));

            // Act
            var attributes = ModelAttributes.GetAttributesForProperty(typeof(MergedAttributes), property);

            // Assert
            Assert.Equal(3, attributes.Attributes.Count);
            Assert.IsType <RequiredAttribute>(attributes.Attributes[0]);
            Assert.IsType <RangeAttribute>(attributes.Attributes[1]);
            Assert.IsType <ClassValidator>(attributes.Attributes[2]);

            Assert.Equal(2, attributes.PropertyAttributes.Count);
            Assert.IsType <RequiredAttribute>(attributes.PropertyAttributes[0]);
            Assert.IsType <RangeAttribute>(attributes.PropertyAttributes[1]);

            var attribute = Assert.Single(attributes.TypeAttributes);

            Assert.IsType <ClassValidator>(attribute);
        }