diff --git a/src/FluentValidation.Tests/ExclusiveBetweenValidatorTests.cs b/src/FluentValidation.Tests/ExclusiveBetweenValidatorTests.cs index a4ebfa4..75fd95d 100644 --- a/src/FluentValidation.Tests/ExclusiveBetweenValidatorTests.cs +++ b/src/FluentValidation.Tests/ExclusiveBetweenValidatorTests.cs @@ -127,6 +127,12 @@ public class ExclusiveBetweenValidatorTests { Assert.Throws(() => RangeValidatorFactory.CreateExclusiveBetween("ccc", "aaa")); } + [Fact] + public void When_the_to_is_smaller_than_the_from_then_the_validator_should_throw_for_chars() { + // char.CompareTo returns the difference ('a' vs 'c' is -2), not just -1. + Assert.Throws(() => RangeValidatorFactory.CreateExclusiveBetween('c', 'a')); + } + [Fact] public void When_the_validator_fails_the_error_message_should_be_set_for_strings() { var validator = new TestValidator(v => v.RuleFor(x => x.Surname).ExclusiveBetween("bbb", "zzz")); diff --git a/src/FluentValidation.Tests/InclusiveBetweenValidatorTests.cs b/src/FluentValidation.Tests/InclusiveBetweenValidatorTests.cs index 8341b18..c10a982 100644 --- a/src/FluentValidation.Tests/InclusiveBetweenValidatorTests.cs +++ b/src/FluentValidation.Tests/InclusiveBetweenValidatorTests.cs @@ -122,6 +122,12 @@ public class InclusiveBetweenValidatorTests { Assert.Throws(() => RangeValidatorFactory.CreateInclusiveBetween("ccc", "aaa")); } + [Fact] + public void When_the_to_is_smaller_than_the_from_then_the_validator_should_throw_for_chars() { + // char.CompareTo returns the difference ('a' vs 'c' is -2), not just -1. + Assert.Throws(() => RangeValidatorFactory.CreateInclusiveBetween('c', 'a')); + } + [Fact] public void When_the_validator_fails_the_error_message_should_be_set_for_strings() { var validator = new TestValidator(v => v.RuleFor(x => x.Surname).InclusiveBetween("bbb", "zzz")); diff --git a/src/FluentValidation/Validators/RangeValidator.cs b/src/FluentValidation/Validators/RangeValidator.cs index eafe717..65b00e4 100644 --- a/src/FluentValidation/Validators/RangeValidator.cs +++ b/src/FluentValidation/Validators/RangeValidator.cs @@ -34,7 +34,8 @@ public abstract class RangeValidator : PropertyValidator only guarantees the sign, not the magnitude. + if (comparer.Compare(to, from) < 0) { throw new ArgumentOutOfRangeException(nameof(to), "To should be larger than from."); } }