/*
***************************************************************************************
* Copyright (C) 2006 EsperTech, Inc. All rights reserved. *
* http://www.espertech.com/esper *
* http://www.espertech.com *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license *
* a copy of which has been included with this distribution in the license.txt file. *
***************************************************************************************
*/
package com.espertech.esper.epl.expression.ops;
import com.espertech.esper.epl.expression.core.ExprNodeUtility;
import com.espertech.esper.epl.expression.core.ExprValidationException;
import com.espertech.esper.epl.expression.funcs.ExprCoalesceNode;
import com.espertech.esper.supportunit.epl.SupportExprNode;
import com.espertech.esper.util.support.SupportExprValidationContextFactory;
import junit.framework.TestCase;
public class TestExprCoalesceNode extends TestCase {
private ExprCoalesceNode[] coalesceNodes;
public void setUp() {
coalesceNodes = new ExprCoalesceNode[5];
coalesceNodes[0] = new ExprCoalesceNode();
coalesceNodes[0].addChildNode(new SupportExprNode(null, Long.class));
coalesceNodes[0].addChildNode(new SupportExprNode(null, int.class));
coalesceNodes[0].addChildNode(new SupportExprNode(4, byte.class));
coalesceNodes[1] = new ExprCoalesceNode();
coalesceNodes[1].addChildNode(new SupportExprNode(null, String.class));
coalesceNodes[1].addChildNode(new SupportExprNode("a", String.class));
coalesceNodes[2] = new ExprCoalesceNode();
coalesceNodes[2].addChildNode(new SupportExprNode(null, Boolean.class));
coalesceNodes[2].addChildNode(new SupportExprNode(true, boolean.class));
coalesceNodes[3] = new ExprCoalesceNode();
coalesceNodes[3].addChildNode(new SupportExprNode(null, char.class));
coalesceNodes[3].addChildNode(new SupportExprNode(null, Character.class));
coalesceNodes[3].addChildNode(new SupportExprNode(null, char.class));
coalesceNodes[3].addChildNode(new SupportExprNode('b', Character.class));
coalesceNodes[4] = new ExprCoalesceNode();
coalesceNodes[4].addChildNode(new SupportExprNode(5, float.class));
coalesceNodes[4].addChildNode(new SupportExprNode(null, Double.class));
}
public void testGetType() throws Exception {
for (int i = 0; i < coalesceNodes.length; i++) {
coalesceNodes[i].validate(SupportExprValidationContextFactory.makeEmpty());
}
assertEquals(Long.class, coalesceNodes[0].getType());
assertEquals(String.class, coalesceNodes[1].getType());
assertEquals(Boolean.class, coalesceNodes[2].getType());
assertEquals(Character.class, coalesceNodes[3].getType());
assertEquals(Double.class, coalesceNodes[4].getType());
}
public void testValidate() throws Exception {
ExprCoalesceNode coalesceNode = new ExprCoalesceNode();
coalesceNode.addChildNode(new SupportExprNode(1));
// Test too few nodes under this node
try {
coalesceNode.validate(SupportExprValidationContextFactory.makeEmpty());
fail();
} catch (ExprValidationException ex) {
// Expected
}
// Test node result type not fitting
coalesceNode.addChildNode(new SupportExprNode("s"));
try {
coalesceNode.validate(SupportExprValidationContextFactory.makeEmpty());
fail();
} catch (ExprValidationException ex) {
// Expected
}
}
public void testEvaluate() throws Exception {
for (int i = 0; i < coalesceNodes.length; i++) {
coalesceNodes[i].validate(SupportExprValidationContextFactory.makeEmpty());
}
assertEquals(4L, coalesceNodes[0].evaluate(null, false, null));
assertEquals("a", coalesceNodes[1].evaluate(null, false, null));
assertEquals(true, coalesceNodes[2].evaluate(null, false, null));
assertEquals('b', coalesceNodes[3].evaluate(null, false, null));
assertEquals(5D, coalesceNodes[4].evaluate(null, false, null));
}
public void testEquals() throws Exception {
assertFalse(coalesceNodes[0].equalsNode(new ExprEqualsNodeImpl(true, false), false));
assertTrue(coalesceNodes[0].equalsNode(coalesceNodes[1], false));
}
public void testToExpressionString() throws Exception {
coalesceNodes[0].validate(SupportExprValidationContextFactory.makeEmpty());
assertEquals("coalesce(null,null,4)", ExprNodeUtility.toExpressionStringMinPrecedenceSafe(coalesceNodes[0]));
}
}