diff --git a/JsonLogic.Tests/LessThanEqualTests.cs b/JsonLogic.Tests/LessThanEqualTests.cs index eec1eaebf0..ae537112cd 100644 --- a/JsonLogic.Tests/LessThanEqualTests.cs +++ b/JsonLogic.Tests/LessThanEqualTests.cs @@ -69,6 +69,31 @@ public void LessThanEqualNullCastsNullToZero() JsonAssert.IsTrue(rule.Apply()); } + + [Test] + public void LessThanEqualNumberAndStringNumberReturnsTrue() + { + var rule = new LessThanEqualRule(1, "2"); + + JsonAssert.IsTrue(rule.Apply()); + } + + [Test] + public void LessThanEqualStringNumberAndNumberReturnsTrue() + { + var rule = new LessThanEqualRule("1", 1); + + JsonAssert.IsTrue(rule.Apply()); + } + + [Test] + public void LessThanEqualTwoStringNumbersReturnsTrue() + { + var rule = new LessThanEqualRule("1", "2"); + + JsonAssert.IsTrue(rule.Apply()); + } + [Test] public void BetweenValueInRangeReturnsTrue() { @@ -110,26 +135,50 @@ public void BetweenValueOverHighEndReturnsFalse() } [Test] - public void BetweenLowEndNotNumberThrowsError() + public void BetweenLowEndNotNumberReturnsFalse() { var rule = new LessThanEqualRule(false, 4, 3); - Assert.Throws(() => rule.Apply()); + JsonAssert.IsFalse(rule.Apply()); } [Test] - public void BetweenValueNotNumberThrowsError() + public void BetweenValueNotNumberReturnsFalse() { var rule = new LessThanEqualRule(1, false, 3); - Assert.Throws(() => rule.Apply()); + JsonAssert.IsFalse(rule.Apply()); } [Test] - public void BetweenHighEndNotNumberThrowsError() + public void BetweenHighEndNotNumberReturnsFalse() { var rule = new LessThanEqualRule(1, 2, false); - Assert.Throws(() => rule.Apply()); + JsonAssert.IsFalse(rule.Apply()); + } + + [Test] + public void BetweenLowEndStringNumberReturnsTrue() + { + var rule = new LessThanEqualRule("1", 1, 3); + + JsonAssert.IsTrue(rule.Apply()); + } + + [Test] + public void BetweenValueStringNumberReturnsTrue() + { + var rule = new LessThanEqualRule(1, "2", 3); + + JsonAssert.IsTrue(rule.Apply()); + } + + [Test] + public void BetweenHighEndStringNumberReturnsTrue() + { + var rule = new LessThanEqualRule(1, 2, "3"); + + JsonAssert.IsTrue(rule.Apply()); } } \ No newline at end of file diff --git a/JsonLogic.Tests/LessThanTests.cs b/JsonLogic.Tests/LessThanTests.cs index bb83af18bd..f5141e1a11 100644 --- a/JsonLogic.Tests/LessThanTests.cs +++ b/JsonLogic.Tests/LessThanTests.cs @@ -39,7 +39,7 @@ public void LessThanStringThrowsError() } [Test] - public void LessThanBooleanThrowsError() + public void LessThanBooleanReturnsTrue() { var rule = new LessThanRule(false, 2); @@ -69,6 +69,30 @@ public void LessThanNullCastsNullToZero() JsonAssert.IsTrue(rule.Apply()); } + + [Test] + public void LessThanNumberAndStringNumberReturnsTrue() + { + var rule = new LessThanRule(1, "2"); + + JsonAssert.IsTrue(rule.Apply()); + } + + [Test] + public void LessThanStringNumberAndNumberReturnsTrue() + { + var rule = new LessThanRule("1", 2); + + JsonAssert.IsTrue(rule.Apply()); + } + + [Test] + public void LessThanTwoStringNumbersReturnsTrue() + { + var rule = new LessThanRule("1", "2"); + + JsonAssert.IsTrue(rule.Apply()); + } [Test] public void BetweenValueInRangeReturnsTrue() @@ -111,26 +135,58 @@ public void BetweenValueOverHighEndReturnsFalse() } [Test] - public void BetweenLowEndNotNumberThrowsError() + public void BetweenLowEndNotNumberReturnsFalse() { var rule = new LessThanRule(false, 4, 3); - Assert.Throws(() => rule.Apply()); + JsonAssert.IsFalse(rule.Apply()); } [Test] - public void BetweenValueNotNumberThrowsError() + public void BetweenValueNotNumberReturnsFalse() { var rule = new LessThanRule(1, false, 3); - Assert.Throws(() => rule.Apply()); + JsonAssert.IsFalse(rule.Apply()); } [Test] - public void BetweenHighEndNotNumberThrowsError() + public void BetweenHighEndNotNumberReturnsFalse() { var rule = new LessThanRule(1, 2, false); - Assert.Throws(() => rule.Apply()); + JsonAssert.IsFalse(rule.Apply()); + } + + [Test] + public void BetweenStringNumbersInRangeReturnsTrue() + { + var rule = new LessThanRule("1", "2", "3"); + + JsonAssert.IsTrue(rule.Apply()); + } + + [Test] + public void BetweenLowEndStringNumberReturnsTrue() + { + var rule = new LessThanRule("1", 2, 3); + + JsonAssert.IsTrue(rule.Apply()); + } + + [Test] + public void BetweenValueStringNumberReturnsTrue() + { + var rule = new LessThanRule(1, "2", 3); + + JsonAssert.IsTrue(rule.Apply()); + } + + [Test] + public void BetweenHighEndStringNumberReturnsTrue() + { + var rule = new LessThanRule(1, 2, "3"); + + JsonAssert.IsTrue(rule.Apply()); } } \ No newline at end of file diff --git a/JsonLogic/Rules/LessThanEqualRule.cs b/JsonLogic/Rules/LessThanEqualRule.cs index b235e721d5..df52fbba67 100644 --- a/JsonLogic/Rules/LessThanEqualRule.cs +++ b/JsonLogic/Rules/LessThanEqualRule.cs @@ -75,17 +75,17 @@ protected internal LessThanEqualRule(Rule a, Rule b, Rule c) return numberA <= numberB; } - var low = (A.Apply(data, contextData) as JsonValue)?.GetNumber(); + var low = A.Apply(data, contextData).Numberify(); if (low == null) - throw new JsonLogicException("Lower bound must be a number."); + throw new JsonLogicException("Lower bound must parse to a number."); - var value = (B.Apply(data, contextData) as JsonValue)?.GetNumber(); + var value = B.Apply(data, contextData).Numberify(); if (value == null) - throw new JsonLogicException("Value must be a number."); + throw new JsonLogicException("Value must parse to a number."); - var high = (C.Apply(data, contextData) as JsonValue)?.GetNumber(); + var high = C.Apply(data, contextData).Numberify(); if (high == null) - throw new JsonLogicException("Upper bound must be a number."); + throw new JsonLogicException("Upper bound must parse to a number."); return low <= value && value <= high; } diff --git a/JsonLogic/Rules/LessThanRule.cs b/JsonLogic/Rules/LessThanRule.cs index e300b0dfb5..f04c755495 100644 --- a/JsonLogic/Rules/LessThanRule.cs +++ b/JsonLogic/Rules/LessThanRule.cs @@ -76,17 +76,17 @@ protected internal LessThanRule(Rule a, Rule b, Rule c) return numberA < numberB; } - var low = (A.Apply(data, contextData) as JsonValue)?.GetNumber(); + var low = A.Apply(data, contextData).Numberify(); if (low == null) - throw new JsonLogicException("Lower bound must be a number."); + throw new JsonLogicException("Lower bound must parse to a number."); - var value = (B.Apply(data, contextData) as JsonValue)?.GetNumber(); + var value = B.Apply(data, contextData).Numberify(); if (value == null) - throw new JsonLogicException("Value must be a number."); + throw new JsonLogicException("Value must parse to a number."); - var high = (C.Apply(data, contextData) as JsonValue)?.GetNumber(); + var high = C.Apply(data, contextData).Numberify(); if (high == null) - throw new JsonLogicException("Upper bound must be a number."); + throw new JsonLogicException("Upper bound must parse to a number."); return low < value && value < high; }