public void TestValidate() { ExprCaseNode caseNode = SupportExprNodeFactory.MakeCaseSyntax1Node(); caseNode.Validate(SupportExprValidationContextFactory.MakeEmpty(_container)); caseNode = SupportExprNodeFactory.MakeCaseSyntax2Node(); caseNode.Validate(SupportExprValidationContextFactory.MakeEmpty(_container)); // No subnodes: Exception is thrown. TryInvalidValidate(new ExprCaseNode(false)); TryInvalidValidate(new ExprCaseNode(true)); // singe child node not possible, must be 2 at least caseNode = new ExprCaseNode(false); caseNode.AddChildNode(new SupportExprNode(4)); TryInvalidValidate(caseNode); // in a case 1 expression (e.g. case when a=b then 1 else 2) the when child nodes must return boolean caseNode.AddChildNode(new SupportExprNode(2)); TryInvalidValidate(caseNode); // in a case 2 expression (e.g. case a when b then 1 else 2) then a and b types must be comparable caseNode = new ExprCaseNode(true); caseNode.AddChildNode(new SupportExprNode("a")); caseNode.AddChildNode(new SupportExprNode(1)); caseNode.AddChildNode(new SupportExprNode(2)); TryInvalidValidate(caseNode); }
public void TestToExpressionString() { ExprCaseNode _caseNode = SupportExprNodeFactory.MakeCaseSyntax1Node(); Assert.AreEqual("case when s0.IntPrimitive=1 then \"a\" when s0.IntPrimitive=2 then \"b\" else \"c\" end", _caseNode.ToExpressionStringMinPrecedenceSafe()); _caseNode = SupportExprNodeFactory.MakeCaseSyntax2Node(); Assert.AreEqual("case s0.IntPrimitive when 1 then \"a\" when 2 then \"b\" else \"c\" end", _caseNode.ToExpressionStringMinPrecedenceSafe()); }
public void TestEquals() { ExprCaseNode caseNode = SupportExprNodeFactory.MakeCaseSyntax1Node(); ExprCaseNode otherCaseNode = SupportExprNodeFactory.MakeCaseSyntax1Node(); ExprCaseNode caseNodeSyntax2 = SupportExprNodeFactory.MakeCaseSyntax2Node(); ExprCaseNode otherCaseNodeSyntax2 = SupportExprNodeFactory.MakeCaseSyntax2Node(); Assert.IsTrue(caseNode.EqualsNode(otherCaseNode, false)); Assert.IsTrue(otherCaseNode.EqualsNode(caseNode, false)); Assert.IsFalse(caseNode.EqualsNode(caseNodeSyntax2, false)); Assert.IsFalse(caseNodeSyntax2.EqualsNode(caseNode, false)); Assert.IsTrue(caseNodeSyntax2.EqualsNode(otherCaseNodeSyntax2, false)); }
public void TestGetType() { // Template expression is: // case when (so.floatPrimitive>s1.shortBoxed) then count(5) when (so.LongPrimitive>s1.IntPrimitive) then (25 + 130.5) else (3*3) end ExprCaseNode caseNode = SupportExprNodeFactory.MakeCaseSyntax1Node(); Assert.AreEqual(typeof(string), caseNode.ReturnType); // case when (2.5>2) then count(5) when (1>3) then (25 + 130.5) else (3*3) end // First when node is true, case node type is the first when node type. caseNode = SupportExprNodeFactory.MakeCaseSyntax2Node(); Assert.AreEqual(typeof(string), caseNode.ReturnType); }
public void TestEvaluate() { ExprCaseNode caseNode = SupportExprNodeFactory.MakeCaseSyntax1Node(); caseNode.Validate(SupportExprValidationContextFactory.MakeEmpty(_container)); Assert.AreEqual("a", caseNode.Evaluate(new EvaluateParams(MakeEvent(1), false, null))); Assert.AreEqual("b", caseNode.Evaluate(new EvaluateParams(MakeEvent(2), false, null))); Assert.AreEqual("c", caseNode.Evaluate(new EvaluateParams(MakeEvent(3), false, null))); caseNode = SupportExprNodeFactory.MakeCaseSyntax2Node(); caseNode.Validate(SupportExprValidationContextFactory.MakeEmpty(_container)); Assert.AreEqual("a", caseNode.Evaluate(new EvaluateParams(MakeEvent(1), false, null))); Assert.AreEqual("b", caseNode.Evaluate(new EvaluateParams(MakeEvent(2), false, null))); Assert.AreEqual("c", caseNode.Evaluate(new EvaluateParams(MakeEvent(3), false, null))); }