IValidator implementation that supports grouping of validators.

This validator will be valid when one and only one 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).

By default, this validator group uses BaseValidatorGroup.FastValidate == true semantics.

Inheritance: Spring.Validation.BaseValidatorGroup
コード例 #1
0
        public void WhenSingleValidatorReturnsTrue()
        {
            ExclusiveValidatorGroup vg = new ExclusiveValidatorGroup(Expression.Parse("true"));

            vg.Actions.Add(new ErrorMessageAction("exclusiveError", "exclusiveErrors"));

            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(0, errors.GetErrors("exclusiveErrors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);

            // 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);
        }
コード例 #2
0
        public void WhenMultipleValidatorsReturnTrueAndNotFastValidate()
        {
            ExclusiveValidatorGroup vg = new ExclusiveValidatorGroup(Expression.Parse("true"));

            vg.FastValidate = false;
            IValidationErrors errors = new ValidationErrors();

            WhenMultipleValidatorsReturnTrue(vg, errors);
            // ALL validators are called
            Assert.AreEqual(2, errors.GetErrors("errors").Count);
            Assert.IsTrue(((BaseTestValidator)vg.Validators[0]).WasCalled);
            Assert.IsTrue(((BaseTestValidator)vg.Validators[1]).WasCalled);
            Assert.IsTrue(((BaseTestValidator)vg.Validators[2]).WasCalled);
            Assert.IsTrue(((BaseTestValidator)vg.Validators[3]).WasCalled);
        }
コード例 #3
0
        public void WhenGroupIsNotValidatedBecauseWhenExpressionReturnsFalse()
        {
            ExclusiveValidatorGroup vg = new ExclusiveValidatorGroup("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);
        }
コード例 #4
0
        private void WhenMultipleValidatorsReturnTrue(ExclusiveValidatorGroup vg, IValidationErrors errors)
        {
            vg.Actions.Add(new ErrorMessageAction("exclusiveError", "exclusiveErrors"));

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

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

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

            Assert.IsFalse(valid, "Validation should not succeed when multiple inner validators return true.");
            Assert.AreEqual(1, errors.GetErrors("exclusiveErrors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);
        }
コード例 #5
0
        public void WhenAllValidatorsReturnTrue()
        {
            ExclusiveValidatorGroup vg = new ExclusiveValidatorGroup("true");
            vg.Actions.Add(new ErrorMessageAction("exclusiveError", "exclusiveErrors"));

            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.IsFalse(valid, "Validation should fail when all inner validators return true.");
            Assert.AreEqual(0, errors.GetErrors("errors").Count);
            Assert.AreEqual(1, errors.GetErrors("exclusiveErrors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);
        }
コード例 #6
0
        public void WhenAllValidatorsReturnTrue()
        {
            ExclusiveValidatorGroup vg = new ExclusiveValidatorGroup("true");

            vg.Actions.Add(new ErrorMessageAction("exclusiveError", "exclusiveErrors"));

            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.IsFalse(valid, "Validation should fail when all inner validators return true.");
            Assert.AreEqual(0, errors.GetErrors("errors").Count);
            Assert.AreEqual(1, errors.GetErrors("exclusiveErrors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);
        }
コード例 #7
0
        public void WhenSingleValidatorReturnsTrue()
        {
            ExclusiveValidatorGroup vg = new ExclusiveValidatorGroup(Expression.Parse("true"));
            vg.Actions.Add(new ErrorMessageAction("exclusiveError", "exclusiveErrors"));

            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(0, errors.GetErrors("exclusiveErrors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);

            // 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 );
        }
コード例 #8
0
 public void DefaultsToFastValidate()
 {
     ExclusiveValidatorGroup evg = new ExclusiveValidatorGroup();
     Assert.IsTrue(evg.FastValidate);
 }
コード例 #9
0
        public void WhenGroupIsNotValidatedBecauseWhenExpressionReturnsFalse()
        {
            ExclusiveValidatorGroup vg = new ExclusiveValidatorGroup("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);
        }
コード例 #10
0
        private void WhenMultipleValidatorsReturnTrue(ExclusiveValidatorGroup vg, IValidationErrors errors)
        {
            vg.Actions.Add(new ErrorMessageAction("exclusiveError", "exclusiveErrors"));

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

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

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

            Assert.IsFalse(valid, "Validation should not succeed when multiple inner validators return true.");
            Assert.AreEqual(1, errors.GetErrors("exclusiveErrors").Count);
            Assert.AreEqual(1, errors.GetErrors("existingErrors").Count);
        }
コード例 #11
0
 public void WhenMultipleValidatorsReturnTrueAndNotFastValidate()
 {
     ExclusiveValidatorGroup vg = new ExclusiveValidatorGroup(Expression.Parse("true"));
     vg.FastValidate = false;
     IValidationErrors errors = new ValidationErrors();
     WhenMultipleValidatorsReturnTrue(vg, errors);
     // ALL validators are called
     Assert.AreEqual(2, errors.GetErrors("errors").Count);
     Assert.IsTrue( ((BaseTestValidator)vg.Validators[0]).WasCalled );
     Assert.IsTrue( ((BaseTestValidator)vg.Validators[1]).WasCalled );
     Assert.IsTrue( ((BaseTestValidator)vg.Validators[2]).WasCalled );
     Assert.IsTrue( ((BaseTestValidator)vg.Validators[3]).WasCalled );
 }
コード例 #12
0
        public void DefaultsToFastValidate()
        {
            ExclusiveValidatorGroup evg = new ExclusiveValidatorGroup();

            Assert.IsTrue(evg.FastValidate);
        }