public void GetValueAccessBuilderForMethodWithParametersThrows()
 {
     MethodInfo methodInfo = typeof(MemberAccessValidatorBuilderFactoryTestClass).GetMethod("MethodWithParameters");
     ValueAccessValidatorBuilder builder
         = new MemberAccessValidatorBuilderFactory().GetMethodValueAccessValidatorBuilder(methodInfo,
                                                                                          new MockValidatedElement(false, null, null, CompositionType.And, null, null));
 }
Exemplo n.º 2
0
        /// <summary>
        /// Crée un SelfValidator si la classe à valider possède des metadatas.
        /// </summary>
        /// <param name="targetType">Le type cible.</param>
        /// <param name="ruleset">Le jeu de règles.</param>
        /// <param name="mainValidatorFactory">La brique à utiliser lors de la construction des validateurs imbriqués..</param>
        /// <returns>Le validateur créé.</returns>
        private Validator CreateSelfValidator(Type targetType, string ruleset, ValidatorFactory mainValidatorFactory)
        {
            var validators = new List <Validator>();

            // Si la classe utilise la validation par metadata, forcer quand même la SelfValidation à avoir lieu
            var selfValidationMethod = targetType.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
                                       .FirstOrDefault(m => ValidationReflectionHelper.GetCustomAttributes(m, typeof(SelfValidationAttribute), false).Any());

            if (selfValidationMethod != null)
            {
                validators.Add(new SelfValidationValidator(selfValidationMethod));
            }

            // Parcourir toutes les propriétés qui possèdent de la validation classe VAB en plus de la validation METADATA
            // Pour chacun des ValueValidatorAttribute (ou dérivé) trouvé, ajouter un validateur
            foreach (var prop in targetType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                var validatedElement = (IValidatedElement) new ValidationAttributeValidatedElement(prop);
                var builder          = new MemberAccessValidatorBuilderFactory().GetPropertyValueAccessValidatorBuilder(prop, validatedElement);

                foreach (IValidatorDescriptor att in prop.GetCustomAttributes(typeof(ValueValidatorAttribute), false))
                {
                    validators.Add(CreateValidatorForValidatedElement(att, validatedElement, builder, mainValidatorFactory));
                }
            }

            return(new AndCompositeValidator(validators.ToArray()));
        }
        public void CanGetValueAccessBuilderForZeroParametersNotVoidMethod()
        {
            MethodInfo methodInfo = typeof(MemberAccessValidatorBuilderFactoryTestClass).GetMethod("Method");
            ValueAccessValidatorBuilder builder
                = new MemberAccessValidatorBuilderFactory().GetMethodValueAccessValidatorBuilder(methodInfo,
                                                                                                 new MockValidatedElement(true, null, null, CompositionType.Or, null, null));

            Assert.IsNotNull(builder);
            Assert.AreEqual(true, builder.IgnoreNulls);
            Assert.AreEqual(CompositionType.Or, builder.CompositionType);
            Assert.AreSame(typeof(MethodValueAccess), builder.ValueAccess.GetType());
            Assert.AreSame(methodInfo, ((MethodValueAccess)builder.ValueAccess).MethodInfo);
        }
        public void CanGetValueAccessBuilderForField()
        {
            FieldInfo fieldInfo = typeof(MemberAccessValidatorBuilderFactoryTestClass).GetField("Field");
            ValueAccessValidatorBuilder builder
                = new MemberAccessValidatorBuilderFactory().GetFieldValueAccessValidatorBuilder(fieldInfo,
                                                                                                new MockValidatedElement(true, null, null, CompositionType.Or, null, null));

            Assert.IsNotNull(builder);
            Assert.AreEqual(true, builder.IgnoreNulls);
            Assert.AreEqual(CompositionType.Or, builder.CompositionType);
            Assert.AreSame(typeof(FieldValueAccess), builder.ValueAccess.GetType());
            Assert.AreSame(fieldInfo, ((FieldValueAccess)builder.ValueAccess).FieldInfo);
        }
        public void CanGetValueAccessBuilderForProperty()
        {
            PropertyInfo propertyInfo = typeof(MemberAccessValidatorBuilderFactoryTestClass).GetProperty("Property");
            ValueAccessValidatorBuilder builder
                = new MemberAccessValidatorBuilderFactory().GetPropertyValueAccessValidatorBuilder(propertyInfo,
                                                                                                   new MockValidatedElement(true, null, null, CompositionType.Or, null, null));

            Assert.IsNotNull(builder);
            Assert.AreEqual(true, builder.IgnoreNulls);
            Assert.AreEqual(CompositionType.Or, builder.CompositionType);
            Assert.AreSame(typeof(PropertyValueAccess), builder.ValueAccess.GetType());
            Assert.AreSame(propertyInfo, ((PropertyValueAccess)builder.ValueAccess).PropertyInfo);
        }
        public void CanGetValueAccessBuilderForField()
        {
            FieldInfo fieldInfo = typeof(MemberAccessValidatorBuilderFactoryTestClass).GetField("Field");
            ValueAccessValidatorBuilder builder
                = new MemberAccessValidatorBuilderFactory().GetFieldValueAccessValidatorBuilder(fieldInfo,
                                                                                                new MockValidatedElement(true, null, null, CompositionType.Or, null, null));

            Assert.IsNotNull(builder);
            Assert.AreEqual(true, builder.IgnoreNulls);
            Assert.AreEqual(CompositionType.Or, builder.CompositionType);
            Assert.AreSame(typeof(FieldValueAccess), builder.ValueAccess.GetType());
            Assert.AreSame(fieldInfo, ((FieldValueAccess)builder.ValueAccess).FieldInfo);
        }
        public void CanGetValueAccessBuilderForProperty()
        {
            PropertyInfo propertyInfo = typeof(MemberAccessValidatorBuilderFactoryTestClass).GetProperty("Property");
            ValueAccessValidatorBuilder builder
                = new MemberAccessValidatorBuilderFactory().GetPropertyValueAccessValidatorBuilder(propertyInfo,
                                                                                                   new MockValidatedElement(true, null, null, CompositionType.Or, null, null));

            Assert.IsNotNull(builder);
            Assert.AreEqual(true, builder.IgnoreNulls);
            Assert.AreEqual(CompositionType.Or, builder.CompositionType);
            Assert.AreSame(typeof(PropertyValueAccess), builder.ValueAccess.GetType());
            Assert.AreSame(propertyInfo, ((PropertyValueAccess)builder.ValueAccess).PropertyInfo);
        }
 public void GetValueAccessBuilderForNullMethodThrows()
 {
     ValueAccessValidatorBuilder builder
         = new MemberAccessValidatorBuilderFactory().GetMethodValueAccessValidatorBuilder(null,
                                                                                          new MockValidatedElement(false, null, null, CompositionType.And, null, null));
 }
 public void GetValueAccessBuilderForMethodWithParametersThrows()
 {
     MethodInfo methodInfo = typeof(MemberAccessValidatorBuilderFactoryTestClass).GetMethod("MethodWithParameters");
     ValueAccessValidatorBuilder builder
         = new MemberAccessValidatorBuilderFactory().GetMethodValueAccessValidatorBuilder(methodInfo,
                                                                                          new MockValidatedElement(false, null, null, CompositionType.And, null, null));
 }
 public void GetValueAccessBuilderForNullMethodThrows()
 {
     ValueAccessValidatorBuilder builder
         = new MemberAccessValidatorBuilderFactory().GetMethodValueAccessValidatorBuilder(null,
                                                                                          new MockValidatedElement(false, null, null, CompositionType.And, null, null));
 }
        public void CanGetValueAccessBuilderForZeroParametersNotVoidMethod()
        {
            MethodInfo methodInfo = typeof(MemberAccessValidatorBuilderFactoryTestClass).GetMethod("Method");
            ValueAccessValidatorBuilder builder
                = new MemberAccessValidatorBuilderFactory().GetMethodValueAccessValidatorBuilder(methodInfo,
                                                                                                 new MockValidatedElement(true, null, null, CompositionType.Or, null, null));

            Assert.IsNotNull(builder);
            Assert.AreEqual(true, builder.IgnoreNulls);
            Assert.AreEqual(CompositionType.Or, builder.CompositionType);
            Assert.AreSame(typeof(MethodValueAccess), builder.ValueAccess.GetType());
            Assert.AreSame(methodInfo, ((MethodValueAccess)builder.ValueAccess).MethodInfo);
        }