/* * ************************************************************************************* * 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.collection; import com.espertech.esper.client.EventBean; import com.espertech.esper.client.scopetest.EPAssertionUtil; import com.espertech.esper.support.event.EventFactoryHelper; import junit.framework.TestCase; import java.util.ArrayDeque; import java.util.Iterator; import java.util.Map; public class TestTimeWindowIterator extends TestCase { private Map<String, EventBean> events; public void setUp() { events = EventFactoryHelper.makeEventMap(new String[] {"a", "b", "c", "d", "e", "f", "g"}); } public void testEmpty() { ArrayDeque<TimeWindowPair> testWindow = new ArrayDeque<TimeWindowPair>(); Iterator<EventBean> it = new TimeWindowIterator(testWindow); EPAssertionUtil.assertEqualsExactOrder(null, it); } public void testOneElement() { ArrayDeque<TimeWindowPair> testWindow = new ArrayDeque<TimeWindowPair>(); ArrayDeque<EventBean> list = new ArrayDeque<EventBean>(); list.add(events.get("a")); addToWindow(testWindow, 10L, list); Iterator it = new TimeWindowIterator(testWindow); EPAssertionUtil.assertEqualsExactOrder(new Object[]{events.get("a")}, it); } public void testTwoInOneEntryElement() { ArrayDeque<TimeWindowPair> testWindow = new ArrayDeque<TimeWindowPair>(); ArrayDeque<EventBean> list = new ArrayDeque<EventBean>(); list.add(events.get("a")); list.add(events.get("b")); addToWindow(testWindow, 10L, list); Iterator<EventBean> it = new TimeWindowIterator(testWindow); EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{events.get("a"), events.get("b")}, it); } public void testTwoSeparateEntryElement() { ArrayDeque<TimeWindowPair> testWindow = new ArrayDeque<TimeWindowPair>(); ArrayDeque<EventBean> list2 = new ArrayDeque<EventBean>(); list2.add(events.get("b")); addToWindow(testWindow, 5L, list2); // Actually before list1 ArrayDeque<EventBean> list1 = new ArrayDeque<EventBean>(); list1.add(events.get("a")); addToWindow(testWindow, 10L, list1); Iterator it = new TimeWindowIterator(testWindow); EPAssertionUtil.assertEqualsExactOrder(new Object[]{events.get("b"), events.get("a")}, it); } public void testTwoByTwoEntryElement() { ArrayDeque<TimeWindowPair> testWindow = new ArrayDeque<TimeWindowPair>(); ArrayDeque<EventBean> list1 = new ArrayDeque<EventBean>(); list1.add(events.get("a")); list1.add(events.get("b")); addToWindow(testWindow, 10L, list1); ArrayDeque<EventBean> list2 = new ArrayDeque<EventBean>(); list2.add(events.get("c")); list2.add(events.get("d")); addToWindow(testWindow, 15L, list2); Iterator it = new TimeWindowIterator(testWindow); EPAssertionUtil.assertEqualsExactOrder(new Object[]{events.get("a"), events.get("b"), events.get("c"), events.get("d")}, it); } public void testMixedEntryElement() { ArrayDeque<TimeWindowPair> testWindow = new ArrayDeque<TimeWindowPair>(); ArrayDeque<EventBean> list1 = new ArrayDeque<EventBean>(); list1.add(events.get("a")); addToWindow(testWindow, 10L, list1); ArrayDeque<EventBean> list2 = new ArrayDeque<EventBean>(); list2.add(events.get("c")); list2.add(events.get("d")); addToWindow(testWindow, 15L, list2); ArrayDeque<EventBean> list3 = new ArrayDeque<EventBean>(); list3.add(events.get("e")); list3.add(events.get("f")); list3.add(events.get("g")); addToWindow(testWindow, 20L, list3); Iterator it = new TimeWindowIterator(testWindow); EPAssertionUtil.assertEqualsExactOrder(new Object[]{events.get("a"), events.get("c"), events.get("d"), events.get("e"), events.get("f"), events.get("g")}, it); } public void testEmptyList() { ArrayDeque<TimeWindowPair> testWindow = new ArrayDeque<TimeWindowPair>(); ArrayDeque<EventBean> list1 = new ArrayDeque<EventBean>(); addToWindow(testWindow, 10L, list1); Iterator it = new TimeWindowIterator(testWindow); EPAssertionUtil.assertEqualsExactOrder((Object[]) null, it); } public void testTwoEmptyList() { ArrayDeque<TimeWindowPair> testWindow = new ArrayDeque<TimeWindowPair>(); ArrayDeque<EventBean> list1 = new ArrayDeque<EventBean>(); addToWindow(testWindow, 10L, list1); ArrayDeque<EventBean> list2 = new ArrayDeque<EventBean>(); addToWindow(testWindow, 20L, list2); Iterator it = new TimeWindowIterator(testWindow); EPAssertionUtil.assertEqualsExactOrder((Object[]) null, it); } public void testThreeEmptyList() { ArrayDeque<TimeWindowPair> testWindow = new ArrayDeque<TimeWindowPair>(); ArrayDeque<EventBean> list1 = new ArrayDeque<EventBean>(); addToWindow(testWindow, 10L, list1); ArrayDeque<EventBean> list2 = new ArrayDeque<EventBean>(); addToWindow(testWindow, 20L, list2); ArrayDeque<EventBean> list3 = new ArrayDeque<EventBean>(); addToWindow(testWindow, 30L, list3); Iterator it = new TimeWindowIterator(testWindow); EPAssertionUtil.assertEqualsExactOrder((Object[]) null, it); } public void testEmptyListFrontTail() { ArrayDeque<TimeWindowPair> testWindow = new ArrayDeque<TimeWindowPair>(); ArrayDeque<EventBean> list1 = new ArrayDeque<EventBean>(); addToWindow(testWindow, 10L, list1); ArrayDeque<EventBean> list2 = new ArrayDeque<EventBean>(); list2.add(events.get("c")); list2.add(events.get("d")); addToWindow(testWindow, 15L, list2); ArrayDeque<EventBean> list3 = new ArrayDeque<EventBean>(); addToWindow(testWindow, 20L, list3); Iterator it = new TimeWindowIterator(testWindow); EPAssertionUtil.assertEqualsExactOrder(new Object[]{events.get("c"), events.get("d")}, it); } public void testEmptyListSprinkle() { ArrayDeque<TimeWindowPair> testWindow = new ArrayDeque<TimeWindowPair>(); ArrayDeque<EventBean> list1 = new ArrayDeque<EventBean>(); list1.add(events.get("a")); addToWindow(testWindow, 10L, list1); ArrayDeque<EventBean> list2 = new ArrayDeque<EventBean>(); addToWindow(testWindow, 15L, list2); ArrayDeque<EventBean> list3 = new ArrayDeque<EventBean>(); list3.add(events.get("c")); list3.add(events.get("d")); addToWindow(testWindow, 20L, list3); ArrayDeque<EventBean> list4 = new ArrayDeque<EventBean>(); addToWindow(testWindow, 40L, list4); Iterator it = new TimeWindowIterator(testWindow); EPAssertionUtil.assertEqualsExactOrder(new Object[]{events.get("a"), events.get("c"), events.get("d")}, it); } public void testEmptyListFront() { ArrayDeque<TimeWindowPair> testWindow = new ArrayDeque<TimeWindowPair>(); ArrayDeque<EventBean> list1 = new ArrayDeque<EventBean>(); addToWindow(testWindow, 10L, list1); ArrayDeque<EventBean> list2 = new ArrayDeque<EventBean>(); list2.add(events.get("a")); addToWindow(testWindow, 15L, list2); ArrayDeque<EventBean> list3 = new ArrayDeque<EventBean>(); list3.add(events.get("c")); list3.add(events.get("d")); addToWindow(testWindow, 20L, list3); ArrayDeque<EventBean> list4 = new ArrayDeque<EventBean>(); list4.add(events.get("e")); addToWindow(testWindow, 40L, list4); Iterator it = new TimeWindowIterator(testWindow); EPAssertionUtil.assertEqualsExactOrder(new Object[]{events.get("a"), events.get("c"), events.get("d"), events.get("e")}, it); } public void testObjectAndNull() { ArrayDeque<TimeWindowPair> testWindow = new ArrayDeque<TimeWindowPair>(); ArrayDeque<EventBean> list1 = new ArrayDeque<EventBean>(); list1.add(events.get("c")); list1.add(events.get("d")); addToWindow(testWindow, 10L, list1); addToWindow(testWindow, 20L, events.get("a")); addToWindow(testWindow, 30L, null); ArrayDeque<EventBean> list3 = new ArrayDeque<EventBean>(); list3.add(events.get("e")); addToWindow(testWindow, 40L, list3); Iterator it = new TimeWindowIterator(testWindow); EPAssertionUtil.assertEqualsExactOrder(new Object[]{events.get("c"), events.get("d"), events.get("a"), events.get("e")}, it); } private void addToWindow(ArrayDeque<TimeWindowPair> testWindow, long key, Object value) { testWindow.add(new TimeWindowPair (key, value)); } }