IValidator implementation that supports grouping of validators.

This validator will be valid when one or more of the validators in the Validators collection are valid.

ValidationErrors property will return a union of all validation error messages for the contained validators, but only if this validator is not valid (meaning, when none of the contained validators are valid).

Note, that BaseValidatorGroup.FastValidate defaults to true for this validator type!

Inheritance: Spring.Validation.BaseValidatorGroup
        public void WhenSingleValidatorReturnsTrueFastAndFastValidateIsTrue()
        {
            AnyValidatorGroup vg = new AnyValidatorGroup(Expression.Parse("true"));
            vg.FastValidate = true;

            WhenSingleValidatorReturnsTrue(vg);
            // validators are called only until validation result is known
            Assert.IsTrue( ((BaseTestValidator)vg.Validators[0]).WasCalled );
            Assert.IsTrue( ((BaseTestValidator)vg.Validators[1]).WasCalled );
            Assert.IsFalse( ((BaseTestValidator)vg.Validators[2]).WasCalled );
        }
        public void WhenSingleValidatorReturnsTrueFastAndFastValidateIsTrue()
        {
            AnyValidatorGroup vg = new AnyValidatorGroup(Expression.Parse("true"));

            vg.FastValidate = true;

            WhenSingleValidatorReturnsTrue(vg);
            // validators are called only until validation result is known
            Assert.IsTrue(((BaseTestValidator)vg.Validators[0]).WasCalled);
            Assert.IsTrue(((BaseTestValidator)vg.Validators[1]).WasCalled);
            Assert.IsFalse(((BaseTestValidator)vg.Validators[2]).WasCalled);
        }
        public void WhenSingleValidatorReturnsTrueAndFastValidateIsFalse()
        {
            AnyValidatorGroup vg = new AnyValidatorGroup(Expression.Parse("true"));

            vg.FastValidate = false;

            WhenSingleValidatorReturnsTrue(vg);
            // ALL validators are called
            Assert.IsTrue(((BaseTestValidator)vg.Validators[0]).WasCalled);
            Assert.IsTrue(((BaseTestValidator)vg.Validators[1]).WasCalled);
            Assert.IsTrue(((BaseTestValidator)vg.Validators[2]).WasCalled);
        }
        private static void WhenSingleValidatorReturnsTrue(AnyValidatorGroup vg)
        {
            vg.Validators.Add(new FalseValidator());
            vg.Validators.Add(new TrueValidator());
            vg.Validators.Add(new FalseValidator());

            IValidationErrors errors = new ValidationErrors();

            errors.AddError("existingErrors", new ErrorMessage("error", null));

            bool valid = vg.Validate(new object(), errors);

            Assert.IsTrue(valid, "Validation should succeed when single inner validator returns true.");
            Assert.AreEqual(0, errors.GetErrors("errors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);
        }
        public void WhenAllValidatorsReturnTrue()
        {
            AnyValidatorGroup vg = new AnyValidatorGroup("true");
            vg.Validators.Add(new TrueValidator());
            vg.Validators.Add(new TrueValidator());
            vg.Validators.Add(new TrueValidator());

            IValidationErrors errors = new ValidationErrors();
            errors.AddError("existingErrors", new ErrorMessage("error", null));

            bool valid = vg.Validate(new object(), errors);

            Assert.IsTrue(valid, "Validation should succeed when all inner validators return true.");
            Assert.AreEqual(0, errors.GetErrors("errors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);
        }
        public void WhenAllValidatorsReturnFalse()
        {
            AnyValidatorGroup vg = new AnyValidatorGroup();
            vg.Validators.Add(new FalseValidator());
            vg.Validators.Add(new FalseValidator());
            vg.Validators.Add(new FalseValidator());

            IValidationErrors errors = new ValidationErrors();
            errors.AddError("existingErrors", new ErrorMessage("error", null));

            bool valid = vg.Validate(new object(), errors);

            Assert.IsFalse(valid, "Validation should fail when all inner validators return false.");
            Assert.AreEqual(3, errors.GetErrors("errors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);
        }
        public void WhenGroupIsNotValidatedBecauseWhenExpressionReturnsFalse()
        {
            AnyValidatorGroup vg = new AnyValidatorGroup("false");

            vg.Validators.Add(new FalseValidator());
            vg.Validators.Add(new FalseValidator());

            IValidationErrors errors = new ValidationErrors();

            errors.AddError("existingErrors", new ErrorMessage("error", null));

            bool valid = vg.Validate(new object(), errors);

            Assert.IsTrue(valid, "Validation should succeed when group validator is not evaluated.");
            Assert.AreEqual(0, errors.GetErrors("errors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);
        }
        public void WhenAllValidatorsReturnTrue()
        {
            AnyValidatorGroup vg = new AnyValidatorGroup("true");

            vg.Validators.Add(new TrueValidator());
            vg.Validators.Add(new TrueValidator());
            vg.Validators.Add(new TrueValidator());

            IValidationErrors errors = new ValidationErrors();

            errors.AddError("existingErrors", new ErrorMessage("error", null));

            bool valid = vg.Validate(new object(), errors);

            Assert.IsTrue(valid, "Validation should succeed when all inner validators return true.");
            Assert.AreEqual(0, errors.GetErrors("errors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);
        }
        public void WhenAllValidatorsReturnFalse()
        {
            AnyValidatorGroup vg = new AnyValidatorGroup();

            vg.Validators.Add(new FalseValidator());
            vg.Validators.Add(new FalseValidator());
            vg.Validators.Add(new FalseValidator());

            IValidationErrors errors = new ValidationErrors();

            errors.AddError("existingErrors", new ErrorMessage("error", null));

            bool valid = vg.Validate(new object(), errors);

            Assert.IsFalse(valid, "Validation should fail when all inner validators return false.");
            Assert.AreEqual(3, errors.GetErrors("errors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);
        }
        public void DefaultsToFastValidate()
        {
            AnyValidatorGroup vg = new AnyValidatorGroup();

            Assert.IsTrue(vg.FastValidate);
        }
        public void WhenSingleValidatorReturnsTrueAndFastValidateIsFalse()
        {
            AnyValidatorGroup vg = new AnyValidatorGroup(Expression.Parse("true"));
            vg.FastValidate = false;

            WhenSingleValidatorReturnsTrue(vg);
            // ALL validators are called
            Assert.IsTrue( ((BaseTestValidator)vg.Validators[0]).WasCalled );
            Assert.IsTrue( ((BaseTestValidator)vg.Validators[1]).WasCalled );
            Assert.IsTrue( ((BaseTestValidator)vg.Validators[2]).WasCalled );            
        }
 public void DefaultsToFastValidate()
 {
     AnyValidatorGroup vg = new AnyValidatorGroup();
     Assert.IsTrue(vg.FastValidate);
 }
        public void WhenGroupIsNotValidatedBecauseWhenExpressionReturnsFalse()
        {
            AnyValidatorGroup vg = new AnyValidatorGroup("false");
            vg.Validators.Add(new FalseValidator());
            vg.Validators.Add(new FalseValidator());

            IValidationErrors errors = new ValidationErrors();
            errors.AddError("existingErrors", new ErrorMessage("error", null));

            bool valid = vg.Validate(new object(), errors);

            Assert.IsTrue(valid, "Validation should succeed when group validator is not evaluated.");
            Assert.AreEqual(0, errors.GetErrors("errors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);
        }
        private static void WhenSingleValidatorReturnsTrue(AnyValidatorGroup vg)
        {
            vg.Validators.Add(new FalseValidator());
            vg.Validators.Add(new TrueValidator());
            vg.Validators.Add(new FalseValidator());

            IValidationErrors errors = new ValidationErrors();
            errors.AddError("existingErrors", new ErrorMessage("error", null));

            bool valid = vg.Validate(new object(), errors);

            Assert.IsTrue(valid, "Validation should succeed when single inner validator returns true.");
            Assert.AreEqual(0, errors.GetErrors("errors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);
        }