diff --git a/VAR.ExpressionEvaluator.Tests/ParserTests.cs b/VAR.ExpressionEvaluator.Tests/ParserTests.cs index 75e8e02..d5ced32 100644 --- a/VAR.ExpressionEvaluator.Tests/ParserTests.cs +++ b/VAR.ExpressionEvaluator.Tests/ParserTests.cs @@ -495,6 +495,46 @@ namespace VAR.ExpressionEvaluator.Tests Assert.False((bool?)result); } + [Fact()] + public void Relations__Var1NullEquals666_EqualsFalse() + { + EvaluationContext evaluationContex = new EvaluationContext(); + evaluationContex.SetVariable("v1", null); + string expression = "v1 = 666"; + object result = Parser.EvaluateString(expression, evaluationContex); + Assert.False((bool?)result); + } + + [Fact()] + public void Relations__Var1NullEqualsStringHello_EqualsFalse() + { + EvaluationContext evaluationContex = new EvaluationContext(); + evaluationContex.SetVariable("v1", null); + string expression = "v1 = \"Hello\""; + object result = Parser.EvaluateString(expression, evaluationContex); + Assert.False((bool?)result); + } + + [Fact()] + public void Relations__Var1666Equals666_EqualsFalse() + { + EvaluationContext evaluationContex = new EvaluationContext(); + evaluationContex.SetVariable("v1", 666); + string expression = "v1 = 666"; + object result = Parser.EvaluateString(expression, evaluationContex); + Assert.True((bool?)result); + } + + [Fact()] + public void Relations__Var1HelloEqualsStringHello_EqualsFalse() + { + EvaluationContext evaluationContex = new EvaluationContext(); + evaluationContex.SetVariable("v1", "Hello"); + string expression = "v1 = \"Hello\""; + object result = Parser.EvaluateString(expression, evaluationContex); + Assert.True((bool?)result); + } + #endregion Relations #region BooleanOps diff --git a/VAR.ExpressionEvaluator/EvaluationContext.cs b/VAR.ExpressionEvaluator/EvaluationContext.cs index b092d82..c7c16dc 100644 --- a/VAR.ExpressionEvaluator/EvaluationContext.cs +++ b/VAR.ExpressionEvaluator/EvaluationContext.cs @@ -48,7 +48,7 @@ namespace VAR.ExpressionEvaluator { value = ((DateTime)value).ToString("s"); } - if ((value is string) == false && (value is bool) == false) + if ((value is string) == false && (value is bool) == false && value != null) { value = Convert.ToDecimal(value); } diff --git a/VAR.ExpressionEvaluator/ExpressionNodes/ExpressionEqualsNode.cs b/VAR.ExpressionEvaluator/ExpressionNodes/ExpressionEqualsNode.cs index 85f0837..7111c96 100644 --- a/VAR.ExpressionEvaluator/ExpressionNodes/ExpressionEqualsNode.cs +++ b/VAR.ExpressionEvaluator/ExpressionNodes/ExpressionEqualsNode.cs @@ -16,6 +16,11 @@ namespace VAR.ExpressionEvaluator return string.Compare((string)leftValue, (string)rightValue) == 0; } + if ((leftValue is string && rightValue == null) || (leftValue == null && rightValue is string)) + { + return false; + } + if (leftValue is string) { if (string.IsNullOrEmpty((string)leftValue))