/* *************************************************************************************** * 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.supportunit.epl.SupportExprNode; import com.espertech.esper.supportunit.epl.SupportExprNodeUtil; import com.espertech.esper.util.support.SupportExprValidationContextFactory; import junit.framework.TestCase; public class TestExprEqualsNode extends TestCase { private ExprEqualsNode[] equalsNodes; public void setUp() throws Exception { equalsNodes = new ExprEqualsNode[4]; equalsNodes[0] = new ExprEqualsNodeImpl(false, false); equalsNodes[1] = new ExprEqualsNodeImpl(false, false); equalsNodes[1].addChildNode(new SupportExprNode(1L)); equalsNodes[1].addChildNode(new SupportExprNode(new Integer(1))); equalsNodes[1].validate(SupportExprValidationContextFactory.makeEmpty()); equalsNodes[2] = new ExprEqualsNodeImpl(true, false); equalsNodes[2].addChildNode(new SupportExprNode(1.5D)); equalsNodes[2].addChildNode(new SupportExprNode(new Integer(1))); equalsNodes[2].validate(SupportExprValidationContextFactory.makeEmpty()); equalsNodes[3] = new ExprEqualsNodeImpl(false, false); equalsNodes[3].addChildNode(new SupportExprNode(1D)); equalsNodes[3].addChildNode(new SupportExprNode(new Integer(1))); equalsNodes[3].validate(SupportExprValidationContextFactory.makeEmpty()); } public void testGetType() { assertEquals(Boolean.class, equalsNodes[1].getExprEvaluator().getType()); } public void testValidate() throws Exception { // Test success equalsNodes[0].addChildNode(new SupportExprNode(String.class)); equalsNodes[0].addChildNode(new SupportExprNode(String.class)); equalsNodes[0].validate(SupportExprValidationContextFactory.makeEmpty()); equalsNodes[1].validate(SupportExprValidationContextFactory.makeEmpty()); equalsNodes[2].validate(SupportExprValidationContextFactory.makeEmpty()); equalsNodes[3].validate(SupportExprValidationContextFactory.makeEmpty()); equalsNodes[0].setChildNodes(new SupportExprNode(String.class)); // Test too few nodes under this node try { equalsNodes[0].validate(SupportExprValidationContextFactory.makeEmpty()); fail(); } catch (ExprValidationException ex) { // Expected } // Test mismatch type equalsNodes[0].addChildNode(new SupportExprNode(Boolean.class)); try { equalsNodes[0].validate(SupportExprValidationContextFactory.makeEmpty()); fail(); } catch (ExprValidationException ex) { // Expected } } public void testEvaluateEquals() throws Exception { equalsNodes[0] = makeNode(true, false, false); assertFalse((Boolean) equalsNodes[0].getExprEvaluator().evaluate(null, false, null)); equalsNodes[0] = makeNode(false, false, false); assertTrue((Boolean) equalsNodes[0].getExprEvaluator().evaluate(null, false, null)); equalsNodes[0] = makeNode(true, true, false); assertTrue((Boolean) equalsNodes[0].getExprEvaluator().evaluate(null, false, null)); equalsNodes[0] = makeNode(true, Boolean.class, null, Boolean.class, false); assertNull(equalsNodes[0].getExprEvaluator().evaluate(null, false, null)); equalsNodes[0] = makeNode(null, String.class, "ss", String.class, false); assertNull(equalsNodes[0].getExprEvaluator().evaluate(null, false, null)); equalsNodes[0] = makeNode(null, String.class, null, String.class, false); assertNull(equalsNodes[0].getExprEvaluator().evaluate(null, false, null)); // try a long and int equalsNodes[1].validate(SupportExprValidationContextFactory.makeEmpty()); assertTrue((Boolean) equalsNodes[1].getExprEvaluator().evaluate(null, false, null)); // try a double and int equalsNodes[2].validate(SupportExprValidationContextFactory.makeEmpty()); assertTrue((Boolean) equalsNodes[2].getExprEvaluator().evaluate(null, false, null)); equalsNodes[3].validate(SupportExprValidationContextFactory.makeEmpty()); assertTrue((Boolean) equalsNodes[3].getExprEvaluator().evaluate(null, false, null)); } public void testEvaluateNotEquals() throws Exception { equalsNodes[0] = makeNode(true, false, true); assertTrue((Boolean) equalsNodes[0].getExprEvaluator().evaluate(null, false, null)); equalsNodes[0] = makeNode(false, false, true); assertFalse((Boolean) equalsNodes[0].getExprEvaluator().evaluate(null, false, null)); equalsNodes[0] = makeNode(true, true, true); assertFalse((Boolean) equalsNodes[0].getExprEvaluator().evaluate(null, false, null)); equalsNodes[0] = makeNode(true, Boolean.class, null, Boolean.class, true); assertNull(equalsNodes[0].getExprEvaluator().evaluate(null, false, null)); equalsNodes[0] = makeNode(null, String.class, "ss", String.class, true); assertNull(equalsNodes[0].getExprEvaluator().evaluate(null, false, null)); equalsNodes[0] = makeNode(null, String.class, null, String.class, true); assertNull(equalsNodes[0].getExprEvaluator().evaluate(null, false, null)); } public void testToExpressionString() throws Exception { equalsNodes[0].addChildNode(new SupportExprNode(true)); equalsNodes[0].addChildNode(new SupportExprNode(false)); assertEquals("true=false", ExprNodeUtility.toExpressionStringMinPrecedenceSafe(equalsNodes[0])); } private ExprEqualsNode makeNode(Object valueLeft, Object valueRight, boolean isNot) throws Exception { ExprEqualsNode equalsNode = new ExprEqualsNodeImpl(isNot, false); equalsNode.addChildNode(new SupportExprNode(valueLeft)); equalsNode.addChildNode(new SupportExprNode(valueRight)); SupportExprNodeUtil.validate(equalsNode); return equalsNode; } private ExprEqualsNode makeNode(Object valueLeft, Class typeLeft, Object valueRight, Class typeRight, boolean isNot) throws Exception { ExprEqualsNode equalsNode = new ExprEqualsNodeImpl(isNot, false); equalsNode.addChildNode(new SupportExprNode(valueLeft, typeLeft)); equalsNode.addChildNode(new SupportExprNode(valueRight, typeRight)); SupportExprNodeUtil.validate(equalsNode); return equalsNode; } public void testEqualsNode() { assertTrue(equalsNodes[0].equalsNode(equalsNodes[1], false)); assertFalse(equalsNodes[0].equalsNode(equalsNodes[2], false)); } }