Fix ExpressionEqualsNode not comparing null and string

This commit is contained in:
2021-09-22 03:29:17 +02:00
parent fa13af7f82
commit c0c0ae8017
3 changed files with 46 additions and 1 deletions

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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))