/* *************************************************************************************** * 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.filter; import com.espertech.esper.client.EventBean; import com.espertech.esper.client.EventType; import com.espertech.esper.core.support.SupportEventAdapterService; import com.espertech.esper.pattern.MatchedEventMap; import com.espertech.esper.pattern.MatchedEventMapImpl; import com.espertech.esper.pattern.MatchedEventMapMeta; import com.espertech.esper.supportunit.bean.SupportBean; import com.espertech.esper.supportunit.event.SupportEventBeanFactory; import com.espertech.esper.supportunit.filter.SupportFilterSpecBuilder; import com.espertech.esper.util.SimpleNumberCoercer; import com.espertech.esper.util.SimpleNumberCoercerFactory; import junit.framework.TestCase; import java.util.ArrayDeque; import java.util.Arrays; import java.util.List; import java.util.Vector; public class TestFilterSpecCompiled extends TestCase { private EventType eventType; private String eventTypeName; public void setUp() { eventTypeName = SupportBean.class.getName(); eventType = SupportEventAdapterService.getService().addBeanType(eventTypeName, SupportBean.class, true, true, true); } public void testEquals() { Object[][] paramList = new Object[][]{ {"intPrimitive", FilterOperator.EQUAL, 2, "intBoxed", FilterOperator.EQUAL, 3}, {"intPrimitive", FilterOperator.EQUAL, 3, "intBoxed", FilterOperator.EQUAL, 3}, {"intPrimitive", FilterOperator.EQUAL, 2}, {"intPrimitive", FilterOperator.RANGE_CLOSED, 1, 10}, {"intPrimitive", FilterOperator.EQUAL, 2, "intBoxed", FilterOperator.EQUAL, 3}, {}, {}, }; Vector<FilterSpecCompiled> specVec = new Vector<FilterSpecCompiled>(); for (Object[] param : paramList) { FilterSpecCompiled spec = SupportFilterSpecBuilder.build(eventType, param); specVec.add(spec); } assertFalse(specVec.get(0).equals(specVec.get(1))); assertFalse(specVec.get(0).equals(specVec.get(2))); assertFalse(specVec.get(0).equals(specVec.get(3))); assertEquals(specVec.get(0), specVec.get(4)); assertFalse(specVec.get(0).equals(specVec.get(5))); assertEquals(specVec.get(5), specVec.get(6)); assertFalse(specVec.get(2).equals(specVec.get(4))); } public void testGetValueSet() { List<FilterSpecParam> parameters = SupportFilterSpecBuilder.buildList(eventType, new Object[] {"intPrimitive", FilterOperator.EQUAL, 2}); SimpleNumberCoercer numberCoercer = SimpleNumberCoercerFactory.getCoercer(int.class, Double.class); parameters.add(new FilterSpecParamEventProp(makeLookupable("doubleBoxed"), FilterOperator.EQUAL, "asName", "doublePrimitive", false, numberCoercer, Double.class, "Test")); FilterSpecCompiled filterSpec = new FilterSpecCompiled(eventType, "SupportBean", new List[]{parameters}, null); SupportBean eventBean = new SupportBean(); eventBean.setDoublePrimitive(999.999); EventBean theEvent = SupportEventBeanFactory.createObject(eventBean); MatchedEventMap matchedEvents = new MatchedEventMapImpl(new MatchedEventMapMeta(new String[]{"asName"}, false)); matchedEvents.add(0, theEvent); FilterValueSet valueSet = filterSpec.getValueSet(matchedEvents, null, null); // Assert the generated filter value container assertSame(eventType, valueSet.getEventType()); assertEquals(2, valueSet.getParameters()[0].length); // Assert the first param FilterValueSetParam param = valueSet.getParameters()[0][0]; assertEquals("intPrimitive", param.getLookupable().getExpression()); assertEquals(FilterOperator.EQUAL, param.getFilterOperator()); assertEquals(2, param.getFilterForValue()); // Assert the second param param = (FilterValueSetParam) valueSet.getParameters()[0][1]; assertEquals("doubleBoxed", param.getLookupable().getExpression()); assertEquals(FilterOperator.EQUAL, param.getFilterOperator()); assertEquals(999.999, param.getFilterForValue()); } private FilterSpecLookupable makeLookupable(String fieldName) { return new FilterSpecLookupable(fieldName, eventType.getGetter(fieldName), eventType.getPropertyType(fieldName), false); } public void testPresortParameters() { FilterSpecCompiled spec = makeFilterValues( "doublePrimitive", FilterOperator.LESS, 1.1, "doubleBoxed", FilterOperator.LESS, 1.1, "intPrimitive", FilterOperator.EQUAL, 1, "string", FilterOperator.EQUAL, "jack", "intBoxed", FilterOperator.EQUAL, 2, "floatBoxed", FilterOperator.RANGE_CLOSED, 1.1d, 2.2d); ArrayDeque<FilterSpecParam> copy = new ArrayDeque<FilterSpecParam>(Arrays.asList(spec.getParameters()[0])); assertEquals("intPrimitive", copy.remove().getLookupable().getExpression()); assertEquals("string", copy.remove().getLookupable().getExpression()); assertEquals("intBoxed", copy.remove().getLookupable().getExpression()); assertEquals("floatBoxed", copy.remove().getLookupable().getExpression()); assertEquals("doublePrimitive", copy.remove().getLookupable().getExpression()); assertEquals("doubleBoxed", copy.remove().getLookupable().getExpression()); } private FilterSpecCompiled makeFilterValues(Object... filterSpecArgs) { return SupportFilterSpecBuilder.build(eventType, filterSpecArgs); } }