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
|
#endregion String coercions
|
||||||
|
|
||||||
#region Excepctions
|
#region Exceptions
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Exceptions__HelloAtEnd__UnexpectedCharactersAtEndException()
|
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
|
#endregion Misc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -60,7 +60,7 @@ namespace VAR.ExpressionEvaluator
|
|||||||
IExpressionNode rightNode = ParseRelations();
|
IExpressionNode rightNode = ParseRelations();
|
||||||
leftNode = new ExpressionBooleanAndNode(leftNode, rightNode);
|
leftNode = new ExpressionBooleanAndNode(leftNode, rightNode);
|
||||||
}
|
}
|
||||||
if (_tokenizer.Token == Token.Or)
|
else if (_tokenizer.Token == Token.Or)
|
||||||
{
|
{
|
||||||
_tokenizer.NextToken();
|
_tokenizer.NextToken();
|
||||||
IExpressionNode rightNode = ParseRelations();
|
IExpressionNode rightNode = ParseRelations();
|
||||||
@@ -84,7 +84,7 @@ namespace VAR.ExpressionEvaluator
|
|||||||
IExpressionNode rightNode = ParsePlusAndMinus();
|
IExpressionNode rightNode = ParsePlusAndMinus();
|
||||||
leftNode = new ExpressionEqualsNode(leftNode, rightNode);
|
leftNode = new ExpressionEqualsNode(leftNode, rightNode);
|
||||||
}
|
}
|
||||||
if (_tokenizer.Token == Token.ExclusiveEquals)
|
else if (_tokenizer.Token == Token.ExclusiveEquals)
|
||||||
{
|
{
|
||||||
// TODO: Implement ExpressionExclusiveEqualsNode
|
// TODO: Implement ExpressionExclusiveEqualsNode
|
||||||
_tokenizer.NextToken();
|
_tokenizer.NextToken();
|
||||||
|
|||||||
Reference in New Issue
Block a user