Пример #1
0
        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);
        }
Пример #2
0
        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());
        }
Пример #3
0
        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));
        }
Пример #4
0
        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);
        }
Пример #5
0
        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)));
        }