/// <summary> /// Creates parameter validators. /// </summary> /// <param name="parameterInfo">The parameter info of the parameter for which to create the validator.</param> /// <param name="parameterValue">The parameter value.</param> /// <returns>The created validator.</returns> /// <remarks> /// The parameter validator must know the actual type of the parameter value. /// EL has a bug where they get the type of the parameter from the parameter info instead of the parameter itself - /// the parameter may be of a derived type of the formal parameter. /// </remarks> static Validator CreateParameterValidator( ParameterInfo parameterInfo, object parameterValue) { if (parameterInfo == null) { throw new ArgumentNullException(nameof(parameterInfo)); } var parameterElement = new MetadataValidatedParameterElement(); // gets the validators metadata parameterElement.UpdateFlyweight(parameterInfo); // compositions all validators var compositeBuilder = new CompositeValidatorBuilder(parameterElement); foreach (var descriptor in parameterElement.GetValidatorDescriptors()) { // get the type of the parameter either from the parameter value or from the parameter info if the value is null compositeBuilder.AddValueValidator( descriptor.CreateValidator( parameterValue != null ? parameterValue.GetType() : parameterInfo.ParameterType, null, null, ValidationFactory.DefaultCompositeValidatorFactory)); } // returns all validators return(compositeBuilder.GetValidator()); }
public void AddedValueValidatorIsIncludedInResultingValidatorForAndWithoutNulls() { MockValidator <object> failingValueValidator = new MockValidator <object>(true); CompositeValidatorBuilder builder = new CompositeValidatorBuilder(new MockValidatedElement(false, null, null, CompositionType.And, null, null)); builder.AddValueValidator(failingValueValidator); Validator validator = builder.GetValidator(); Assert.IsNotNull(validator); // does it validate nonnullvalues? ValidationResults validationResults = validator.Validate(value); Assert.IsFalse(validationResults.IsValid); Assert.AreEqual(1, failingValueValidator.ValidatedTargets.Count); Assert.AreSame(value, failingValueValidator.ValidatedTargets[0]); // does it ignore nulls? it should not validationResults = validator.Validate(null); Assert.IsFalse(validationResults.IsValid); Assert.AreEqual(2, failingValueValidator.ValidatedTargets.Count); Assert.AreSame(null, failingValueValidator.ValidatedTargets[1]); }
public void CanCreateValidatorForTypeWithMultipleValidatorConfigurations() { ValidationRulesetData ruleData = new ValidationRulesetData("ruleset1"); ruleData.Validators.Add(new MockValidatorData("validator1", false)); ruleData.Validators.Get("validator1").MessageTemplate = "validator 1 message"; ruleData.Validators.Add(new MockValidatorData("validator2", false)); ruleData.Validators.Get("validator2").MessageTemplate = "validator 2 message"; Validator validator = builder.CreateValidatorForType(typeof(TestClass), ruleData); Assert.IsNotNull(validator); CompositeValidatorBuilder compositeValidatorBuilder = mockFactory.requestedTypes["TestClass"]; Assert.IsNotNull(compositeValidatorBuilder); Assert.AreSame(compositeValidatorBuilder.BuiltValidator, validator); Assert.AreEqual(false, compositeValidatorBuilder.IgnoreNulls); Assert.AreEqual(CompositionType.And, compositeValidatorBuilder.CompositionType); IDictionary <string, MockValidator <object> > valueValidators = ValidationTestHelper.CreateMockValidatorsMapping(compositeValidatorBuilder.ValueValidators); Assert.AreEqual(2, valueValidators.Count); Assert.IsTrue(valueValidators.ContainsKey("validator 1 message")); Assert.IsTrue(valueValidators.ContainsKey("validator 2 message")); }
public void IgnoreNullsAndOrCompositionCreatesOrValidatorWithIgnoreNullsMessageTemplateAndWrappedOrValidatorWithSuppliedMessageTemplate() { MockValidator <object> valueValidator1 = new MockValidator <object>(false); MockValidator <object> valueValidator2 = new MockValidator <object>(false); CompositeValidatorBuilder builder = new CompositeValidatorBuilder(new MockValidatedElement(true, "ignore nulls", null, CompositionType.Or, "composition template", "composition tag")); builder.AddValueValidator(valueValidator1); builder.AddValueValidator(valueValidator2); Validator validator = builder.GetValidator(); Assert.IsNotNull(validator); Assert.AreSame(typeof(OrCompositeValidator), validator.GetType()); Assert.AreEqual("ignore nulls", validator.MessageTemplate); Assert.AreEqual(null, validator.Tag); IEnumerator <Validator> validatorsEnumerator = ((OrCompositeValidator)validator).Validators.GetEnumerator(); Assert.IsTrue(validatorsEnumerator.MoveNext()); Assert.AreSame(typeof(NotNullValidator), validatorsEnumerator.Current.GetType()); Assert.IsTrue(((NotNullValidator)validatorsEnumerator.Current).Negated); Assert.IsTrue(validatorsEnumerator.MoveNext()); Assert.AreSame(typeof(OrCompositeValidator), validatorsEnumerator.Current.GetType()); Assert.AreEqual("composition template", validatorsEnumerator.Current.MessageTemplate); Assert.AreEqual("composition tag", validatorsEnumerator.Current.Tag); IEnumerator <Validator> valueValidatorsEnumerator = ((OrCompositeValidator)validatorsEnumerator.Current).Validators.GetEnumerator(); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator1, valueValidatorsEnumerator.Current); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator2, valueValidatorsEnumerator.Current); Assert.IsFalse(valueValidatorsEnumerator.MoveNext()); Assert.IsFalse(validatorsEnumerator.MoveNext()); }
public void IgnoreNullsWithNullMessageTemplateAndAndCompositionCreatesOrValidatorWithIgnoreNullsDefaultMessageTemplateAndWrappedAndValidator() { MockValidator <object> valueValidator1 = new MockValidator <object>(false); MockValidator <object> valueValidator2 = new MockValidator <object>(false); CompositeValidatorBuilder builder = new CompositeValidatorBuilder(new MockValidatedElement(true, null, "ignore nulls tag", CompositionType.And, null, null)); builder.AddValueValidator(valueValidator1); builder.AddValueValidator(valueValidator2); Validator validator = builder.GetValidator(); Assert.IsNotNull(validator); Assert.AreSame(typeof(OrCompositeValidator), validator.GetType()); Assert.AreEqual(Resources.IgnoreNullsDefaultMessageTemplate, validator.MessageTemplate); Assert.AreEqual("ignore nulls tag", validator.Tag); IEnumerator <Validator> validatorsEnumerator = ((OrCompositeValidator)validator).Validators.GetEnumerator(); Assert.IsTrue(validatorsEnumerator.MoveNext()); Assert.AreSame(typeof(NotNullValidator), validatorsEnumerator.Current.GetType()); Assert.IsTrue(((NotNullValidator)validatorsEnumerator.Current).Negated); Assert.IsTrue(validatorsEnumerator.MoveNext()); Assert.AreSame(typeof(AndCompositeValidator), validatorsEnumerator.Current.GetType()); IEnumerator <Validator> valueValidatorsEnumerator = ((AndCompositeValidator)validatorsEnumerator.Current).Validators.GetEnumerator(); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator1, valueValidatorsEnumerator.Current); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator2, valueValidatorsEnumerator.Current); Assert.IsFalse(valueValidatorsEnumerator.MoveNext()); Assert.IsFalse(validatorsEnumerator.MoveNext()); }
public override CompositeValidatorBuilder GetTypeValidatorBuilder(Type type, IValidatedElement validatedElement) { CompositeValidatorBuilder validatorBuilder = base.GetTypeValidatorBuilder(type, validatedElement); this.requestedTypes.Add(type.Name, validatorBuilder); return(validatorBuilder); }
public void CanGetValidatorFromNewBuilderInstanceForAndWithoutNulls() { CompositeValidatorBuilder builder = new CompositeValidatorBuilder(new MockValidatedElement(false, null, null, CompositionType.And, null, null)); Validator validator = builder.GetValidator(); Assert.IsNotNull(validator); }
public void CanCreateValidatorForTypeWithMultipleValidationConfigurationWithProvidedRulesetThroughTopLevelFactoryMethod() { ValidationSettings settings = new ValidationSettings(); configurationSource.Add(ValidationSettings.SectionName, settings); ValidatedTypeReference typeReference = new ValidatedTypeReference(typeof(TestClass)); settings.Types.Add(typeReference); typeReference.DefaultRuleset = "RuleB"; ValidationRulesetData ruleDataA = new ValidationRulesetData("RuleA"); typeReference.Rulesets.Add(ruleDataA); ruleDataA.Validators.Add(new MockValidatorData("validator1", false)); ruleDataA.Validators.Get("validator1").MessageTemplate = "Message1-RuleA"; ruleDataA.Validators.Add(new MockValidatorData("validator2", false)); ruleDataA.Validators.Get("validator2").MessageTemplate = "Message2-RuleA"; ruleDataA.Validators.Add(new MockValidatorData("validator3", false)); ruleDataA.Validators.Get("validator3").MessageTemplate = "Message3-RuleA"; ValidationRulesetData ruleDataB = new ValidationRulesetData("RuleB"); typeReference.Rulesets.Add(ruleDataB); ruleDataB.Validators.Add(new MockValidatorData("validator1", false)); ruleDataB.Validators.Get("validator1").MessageTemplate = "Message1-RuleB"; ruleDataB.Validators.Add(new MockValidatorData("validator2", false)); ruleDataB.Validators.Get("validator2").MessageTemplate = "Message1-RuleB"; // Note: Use a local builder here since the assumption was made about how and when the // the builder uses the configuration source.... var localBuilder = ConfigurationValidatorBuilder.FromConfiguration( configurationSource, mockFactory, ValidationFactory.DefaultCompositeValidatorFactory); Validator validator = localBuilder.CreateValidator(typeof(TestClass), "RuleA"); Assert.IsNotNull(validator); CompositeValidatorBuilder compositeValidatorBuilder = mockFactory.requestedTypes["TestClass"]; Assert.IsNotNull(compositeValidatorBuilder); Assert.AreEqual(false, compositeValidatorBuilder.IgnoreNulls); Assert.AreEqual(CompositionType.And, compositeValidatorBuilder.CompositionType); IDictionary <string, MockValidator <object> > valueValidators = ValidationTestHelper.CreateMockValidatorsMapping(compositeValidatorBuilder.ValueValidators); Assert.AreEqual(3, valueValidators.Count); Assert.IsTrue(valueValidators.ContainsKey("Message1-RuleA")); Assert.IsTrue(valueValidators.ContainsKey("Message2-RuleA")); Assert.IsTrue(valueValidators.ContainsKey("Message3-RuleA")); }
public void NoIgnoreNullsAndAndCompositionCreatesSingleAndValidator() { MockValidator<object> valueValidator1 = new MockValidator<object>(false); MockValidator<object> valueValidator2 = new MockValidator<object>(false); CompositeValidatorBuilder builder = new CompositeValidatorBuilder(new MockValidatedElement(false, null, null, CompositionType.And, null, null)); builder.AddValueValidator(valueValidator1); builder.AddValueValidator(valueValidator2); Validator validator = builder.GetValidator(); Assert.IsNotNull(validator); Assert.AreSame(typeof(AndCompositeValidator), validator.GetType()); Assert.AreEqual(null, validator.Tag); IEnumerator<Validator> valueValidatorsEnumerator = ((AndCompositeValidator)validator).Validators.GetEnumerator(); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator1, valueValidatorsEnumerator.Current); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator2, valueValidatorsEnumerator.Current); Assert.IsFalse(valueValidatorsEnumerator.MoveNext()); }
public void NoIgnoreNullsAndAndCompositionCreatesSingleAndValidator() { MockValidator <object> valueValidator1 = new MockValidator <object>(false); MockValidator <object> valueValidator2 = new MockValidator <object>(false); CompositeValidatorBuilder builder = new CompositeValidatorBuilder(new MockValidatedElement(false, null, null, CompositionType.And, null, null)); builder.AddValueValidator(valueValidator1); builder.AddValueValidator(valueValidator2); Validator validator = builder.GetValidator(); Assert.IsNotNull(validator); Assert.AreSame(typeof(AndCompositeValidator), validator.GetType()); Assert.AreEqual(null, validator.Tag); IEnumerator <Validator> valueValidatorsEnumerator = ((AndCompositeValidator)validator).Validators.GetEnumerator(); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator1, valueValidatorsEnumerator.Current); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator2, valueValidatorsEnumerator.Current); Assert.IsFalse(valueValidatorsEnumerator.MoveNext()); }
public void IgnoreNullsAndAndCompositionCreatesIgnoreNullsWrapperAndWrappedAndValidator() { MockValidator <object> valueValidator1 = new MockValidator <object>(false); MockValidator <object> valueValidator2 = new MockValidator <object>(false); CompositeValidatorBuilder builder = new CompositeValidatorBuilder(new MockValidatedElement(true, "ignore nulls", "ignore nulls tag", CompositionType.And, null, null)); builder.AddValueValidator(valueValidator1); builder.AddValueValidator(valueValidator2); Validator validator = builder.GetValidator(); Assert.IsNotNull(validator); Assert.AreSame(typeof(NullIgnoringValidatorWrapper), validator.GetType()); Assert.AreSame(typeof(AndCompositeValidator), ((NullIgnoringValidatorWrapper)validator).WrappedValidator.GetType()); IEnumerator <Validator> valueValidatorsEnumerator = ((AndCompositeValidator)((NullIgnoringValidatorWrapper)validator).WrappedValidator).Validators.GetEnumerator(); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator1, valueValidatorsEnumerator.Current); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator2, valueValidatorsEnumerator.Current); Assert.IsFalse(valueValidatorsEnumerator.MoveNext()); }
public void AddedValueValidatorIsIncludedInResultingValidatorForAndWithoutNulls() { MockValidator<object> failingValueValidator = new MockValidator<object>(true); CompositeValidatorBuilder builder = new CompositeValidatorBuilder(new MockValidatedElement(false, null, null, CompositionType.And, null, null)); builder.AddValueValidator(failingValueValidator); Validator validator = builder.GetValidator(); Assert.IsNotNull(validator); // does it validate nonnullvalues? ValidationResults validationResults = validator.Validate(value); Assert.IsFalse(validationResults.IsValid); Assert.AreEqual(1, failingValueValidator.ValidatedTargets.Count); Assert.AreSame(value, failingValueValidator.ValidatedTargets[0]); // does it ignore nulls? it should not validationResults = validator.Validate(null); Assert.IsFalse(validationResults.IsValid); Assert.AreEqual(2, failingValueValidator.ValidatedTargets.Count); Assert.AreSame(null, failingValueValidator.ValidatedTargets[1]); }
public void IgnoreNullsAndOrCompositionCreatesIgnoreNullsWrapperAndWrappedOrValidatorWithSuppliedMessageTemplate() { MockValidator<object> valueValidator1 = new MockValidator<object>(false); MockValidator<object> valueValidator2 = new MockValidator<object>(false); CompositeValidatorBuilder builder = new CompositeValidatorBuilder(new MockValidatedElement(true, "ignore nulls", null, CompositionType.Or, "composition template", "composition tag")); builder.AddValueValidator(valueValidator1); builder.AddValueValidator(valueValidator2); Validator validator = builder.GetValidator(); Assert.IsNotNull(validator); Assert.AreSame(typeof(NullIgnoringValidatorWrapper), validator.GetType()); Assert.AreSame(typeof(OrCompositeValidator), ((NullIgnoringValidatorWrapper)validator).WrappedValidator.GetType()); Assert.AreEqual("composition template", ((NullIgnoringValidatorWrapper)validator).WrappedValidator.MessageTemplate); Assert.AreEqual("composition tag", ((NullIgnoringValidatorWrapper)validator).WrappedValidator.Tag); IEnumerator<Validator> valueValidatorsEnumerator = ((OrCompositeValidator)((NullIgnoringValidatorWrapper)validator).WrappedValidator).Validators.GetEnumerator(); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator1, valueValidatorsEnumerator.Current); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator2, valueValidatorsEnumerator.Current); Assert.IsFalse(valueValidatorsEnumerator.MoveNext()); }
public void IgnoreNullsAndAndCompositionCreatesIgnoreNullsWrapperAndWrappedAndValidator() { MockValidator<object> valueValidator1 = new MockValidator<object>(false); MockValidator<object> valueValidator2 = new MockValidator<object>(false); CompositeValidatorBuilder builder = new CompositeValidatorBuilder(new MockValidatedElement(true, "ignore nulls", "ignore nulls tag", CompositionType.And, null, null)); builder.AddValueValidator(valueValidator1); builder.AddValueValidator(valueValidator2); Validator validator = builder.GetValidator(); Assert.IsNotNull(validator); Assert.AreSame(typeof(NullIgnoringValidatorWrapper), validator.GetType()); Assert.AreSame(typeof(AndCompositeValidator), ((NullIgnoringValidatorWrapper)validator).WrappedValidator.GetType()); IEnumerator<Validator> valueValidatorsEnumerator = ((AndCompositeValidator)((NullIgnoringValidatorWrapper)validator).WrappedValidator).Validators.GetEnumerator(); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator1, valueValidatorsEnumerator.Current); Assert.IsTrue(valueValidatorsEnumerator.MoveNext()); Assert.AreSame(valueValidator2, valueValidatorsEnumerator.Current); Assert.IsFalse(valueValidatorsEnumerator.MoveNext()); }
/// <summary> /// Crée un validator de propriété. /// </summary> /// <param name="attribute">L'attribut de validation.</param> /// <param name="validatedElement">La propriété validée.</param> /// <param name="builder">Le constructeur de validation composite.</param> /// <param name="mainValidatorFactory">La brique à utiliser lors de la construction des validateurs imbriqués..</param> /// <returns>La validateur de propriété.</returns> protected Validator CreateValidatorForValidatedElement(IValidatorDescriptor attribute, IValidatedElement validatedElement, CompositeValidatorBuilder builder, ValidatorFactory mainValidatorFactory) { Validator valueValidator = attribute.CreateValidator(validatedElement.TargetType, validatedElement.MemberInfo.ReflectedType, new MemberAccessValidatorBuilderFactory().MemberValueAccessBuilder, mainValidatorFactory); builder.AddValueValidator(valueValidator); return(builder.GetValidator()); }