Parser.ParseBooleanOp: Parse failure with multiple "And" "Or" chained
This commit is contained in:
@@ -664,7 +664,7 @@ namespace VAR.ExpressionEvaluator.Tests
|
||||
|
||||
#endregion String coercions
|
||||
|
||||
#region Excepctions
|
||||
#region Exceptions
|
||||
|
||||
[Fact]
|
||||
public void Exceptions__HelloAtEnd__UnexpectedCharactersAtEndException()
|
||||
@@ -848,6 +848,22 @@ namespace VAR.ExpressionEvaluator.Tests
|
||||
}
|
||||
|
||||
|
||||
#endregion Exceptions
|
||||
|
||||
#region Misc
|
||||
|
||||
[Fact()]
|
||||
public void Misc__MixedExpression_EqualsFalse()
|
||||
{
|
||||
EvaluationContext evaluationContex = new EvaluationContext();
|
||||
evaluationContex.SetVariable("QI_86", null);
|
||||
evaluationContex.SetVariable("QI_87", null);
|
||||
evaluationContex.SetVariable("QI_104", null);
|
||||
string expression = "( QI_86 = 0 Or QI_86 = null ) And ( QI_87 = 0 Or QI_87 = null ) And QI_104 > 0";
|
||||
object result = Parser.EvaluateString(expression, evaluationContex);
|
||||
Assert.False((bool?)result);
|
||||
}
|
||||
|
||||
#endregion Misc
|
||||
}
|
||||
}
|
||||
@@ -60,7 +60,7 @@ namespace VAR.ExpressionEvaluator
|
||||
IExpressionNode rightNode = ParseRelations();
|
||||
leftNode = new ExpressionBooleanAndNode(leftNode, rightNode);
|
||||
}
|
||||
if (_tokenizer.Token == Token.Or)
|
||||
else if (_tokenizer.Token == Token.Or)
|
||||
{
|
||||
_tokenizer.NextToken();
|
||||
IExpressionNode rightNode = ParseRelations();
|
||||
@@ -84,7 +84,7 @@ namespace VAR.ExpressionEvaluator
|
||||
IExpressionNode rightNode = ParsePlusAndMinus();
|
||||
leftNode = new ExpressionEqualsNode(leftNode, rightNode);
|
||||
}
|
||||
if (_tokenizer.Token == Token.ExclusiveEquals)
|
||||
else if (_tokenizer.Token == Token.ExclusiveEquals)
|
||||
{
|
||||
// TODO: Implement ExpressionExclusiveEqualsNode
|
||||
_tokenizer.NextToken();
|
||||
|
||||
Reference in New Issue
Block a user