/*
* *************************************************************************************
* Copyright (C) 2008 EsperTech, Inc. All rights reserved. *
* http://esper.codehaus.org *
* 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.event;
import com.espertech.esper.client.EventBean;
import com.espertech.esper.client.EventPropertyGetter;
import com.espertech.esper.client.EventType;
import com.espertech.esper.client.scopetest.EPAssertionUtil;
import com.espertech.esper.collection.MultiKeyUntyped;
import com.espertech.esper.collection.UniformPair;
import com.espertech.esper.support.bean.SupportBean;
import com.espertech.esper.support.event.SupportEventBeanFactory;
import com.espertech.esper.support.event.SupportEventTypeFactory;
import junit.framework.TestCase;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
public class TestEventBeanUtility extends TestCase
{
public void testArrayOp()
{
EventBean[] testEvent = makeEventArray(new String[] {"a1", "a2", "a3"});
EPAssertionUtil.assertEqualsAnyOrder(new Object[]{testEvent[0]},
EventBeanUtility.addToArray(new EventBean[0], testEvent[0]));
EPAssertionUtil.assertEqualsAnyOrder(new Object[]{testEvent[0], testEvent[1]},
EventBeanUtility.addToArray(new EventBean[]{testEvent[0]}, testEvent[1]));
EPAssertionUtil.assertEqualsAnyOrder(new Object[]{testEvent[0], testEvent[1], testEvent[2]},
EventBeanUtility.addToArray(new EventBean[]{testEvent[0], testEvent[1]}, testEvent[2]));
System.out.println(EventBeanUtility.printEvents(testEvent));
}
public void testArrayOpAdd()
{
EventBean[] testEvent = makeEventArray(new String[] {"a1", "a2", "a3"});
EPAssertionUtil.assertEqualsAnyOrder(new Object[]{testEvent[0], testEvent[1], testEvent[2]},
EventBeanUtility.addToArray(new EventBean[]{testEvent[0]}, Arrays.asList(new EventBean[]{testEvent[1], testEvent[2]})));
EPAssertionUtil.assertEqualsAnyOrder(new Object[]{testEvent[1], testEvent[2]},
EventBeanUtility.addToArray(new EventBean[]{}, Arrays.asList(new EventBean[]{testEvent[1], testEvent[2]})));
EPAssertionUtil.assertEqualsAnyOrder(new Object[]{testEvent[0]},
EventBeanUtility.addToArray(new EventBean[]{testEvent[0]}, Arrays.asList(new EventBean[0])));
}
public void testFlattenList()
{
// test many arrays
EventBean[] testEvents = makeEventArray(new String[] {"a1", "a2", "b1", "b2", "b3", "c1", "c2"});
ArrayDeque<UniformPair<EventBean[]>> eventVector = new ArrayDeque<UniformPair<EventBean[]>>();
eventVector.add(new UniformPair<EventBean[]>(null, new EventBean[] {testEvents[0], testEvents[1]}));
eventVector.add(new UniformPair<EventBean[]>(new EventBean[] {testEvents[2]}, null));
eventVector.add(new UniformPair<EventBean[]>(null, new EventBean[] {testEvents[3], testEvents[4], testEvents[5]}));
eventVector.add(new UniformPair<EventBean[]>(new EventBean[] {testEvents[6]}, null));
UniformPair<EventBean[]> events = EventBeanUtility.flattenList(eventVector);
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{testEvents[2], testEvents[6]}, events.getFirst());
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{testEvents[0], testEvents[1], testEvents[3], testEvents[4], testEvents[5]}, events.getSecond());
// test just one array
eventVector.clear();
eventVector.add(new UniformPair<EventBean[]>(new EventBean[] {testEvents[2]}, null));
events = EventBeanUtility.flattenList(eventVector);
EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{testEvents[2]}, events.getFirst());
EPAssertionUtil.assertEqualsExactOrder((Object[]) null, events.getSecond());
// test empty vector
eventVector.clear();
events = EventBeanUtility.flattenList(eventVector);
assertNull(events);
}
public void testFlatten()
{
// test many arrays
EventBean[] testEvents = makeEventArray(new String[] {"a1", "a2", "b1", "b2", "b3", "c1", "c2"});
ArrayDeque<EventBean[]> eventVector = new ArrayDeque<EventBean[]>();
eventVector.add(new EventBean[] {testEvents[0], testEvents[1]});
eventVector.add(new EventBean[] {testEvents[2]});
eventVector.add(new EventBean[] {testEvents[3], testEvents[4], testEvents[5]});
eventVector.add(new EventBean[] {testEvents[6]});
EventBean[] events = EventBeanUtility.flatten(eventVector);
assertEquals(7, events.length);
for (int i = 0; i < testEvents.length; i++)
{
assertEquals(events[i], testEvents[i]);
}
// test just one array
eventVector.clear();
eventVector.add(new EventBean[] {testEvents[2]});
events = EventBeanUtility.flatten(eventVector);
assertEquals(events[0], testEvents[2]);
// test empty vector
eventVector.clear();
events = EventBeanUtility.flatten(eventVector);
assertNull(events);
}
public void testAppend()
{
EventBean[] setOne = makeEventArray(new String[] {"a1", "a2"});
EventBean[] setTwo = makeEventArray(new String[] {"b1", "b2", "b3"});
EventBean[] total = EventBeanUtility.append(setOne, setTwo);
assertEquals(setOne[0], total[0]);
assertEquals(setOne[1], total[1]);
assertEquals(setTwo[0], total[2]);
assertEquals(setTwo[1], total[3]);
assertEquals(setTwo[2], total[4]);
setOne = makeEventArray(new String[] {"a1"});
setTwo = makeEventArray(new String[] {"b1"});
total = EventBeanUtility.append(setOne, setTwo);
assertEquals(setOne[0], total[0]);
assertEquals(setTwo[0], total[1]);
}
public void testToArray()
{
// Test list with 2 elements
List<EventBean> eventList = makeEventList(new String[] {"a1", "a2"});
EventBean[] array = EventBeanUtility.toArray(eventList);
assertEquals(2, array.length);
assertEquals(eventList.get(0), array[0]);
assertEquals(eventList.get(1), array[1]);
// Test list with 1 element
eventList = makeEventList(new String[] {"a1"});
array = EventBeanUtility.toArray(eventList);
assertEquals(1, array.length);
assertEquals(eventList.get(0), array[0]);
// Test empty list
eventList = makeEventList(new String[0]);
array = EventBeanUtility.toArray(eventList);
assertNull(array);
// Test null
array = EventBeanUtility.toArray(null);
assertNull(array);
}
public void testGetPropertyArray()
{
// try 2 properties
EventPropertyGetter[] getters = makeGetters();
EventBean theEvent = SupportEventBeanFactory.createObject(new SupportBean("a", 10));
Object[] properties = EventBeanUtility.getPropertyArray(theEvent, getters);
assertEquals(2, properties.length);
assertEquals("a", properties[0]);
assertEquals(10, properties[1]);
// try no properties
properties = EventBeanUtility.getPropertyArray(theEvent, new EventPropertyGetter[0]);
assertEquals(0, properties.length);
}
public void testMultiKey()
{
// try 2 properties
EventPropertyGetter[] getters = makeGetters();
EventBean theEvent = SupportEventBeanFactory.createObject(new SupportBean("a", 10));
MultiKeyUntyped multikey = EventBeanUtility.getMultiKey(theEvent, getters);
assertEquals(2, multikey.getKeys().length);
assertEquals("a", multikey.getKeys()[0]);
assertEquals(10, multikey.getKeys()[1]);
// try no properties
multikey = EventBeanUtility.getMultiKey(theEvent, new EventPropertyGetter[0]);
assertEquals(0, multikey.getKeys().length);
}
private EventPropertyGetter[] makeGetters()
{
EventType eventType = SupportEventTypeFactory.createBeanType(SupportBean.class);
EventPropertyGetter[] getters = new EventPropertyGetter[2];
getters[0] = eventType.getGetter("theString");
getters[1] = eventType.getGetter("intPrimitive");
return getters;
}
private EventBean[] makeEventArray(String[] texts)
{
EventBean[] events = new EventBean[texts.length];
for (int i = 0; i < texts.length; i++)
{
events[i] = SupportEventBeanFactory.createObject(texts[i]);
}
return events;
}
private List<EventBean> makeEventList(String[] texts)
{
List<EventBean> events = new LinkedList<EventBean>();
for (int i = 0; i < texts.length; i++)
{
events.add(SupportEventBeanFactory.createObject(texts[i]));
}
return events;
}
}