/* *************************************************************************************** * 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.view.window; import com.espertech.esper.client.EventBean; import com.espertech.esper.client.scopetest.EPAssertionUtil; import com.espertech.esper.core.support.SupportStatementContextFactory; import com.espertech.esper.epl.expression.core.ExprNode; import com.espertech.esper.epl.expression.time.ExprTimePeriodEvalDeltaConstGivenDelta; import com.espertech.esper.supportunit.bean.SupportBean; import com.espertech.esper.supportunit.epl.SupportExprNodeFactory; import com.espertech.esper.supportunit.event.SupportEventBeanFactory; import com.espertech.esper.supportunit.view.SupportBeanClassView; import com.espertech.esper.supportunit.view.SupportStreamImpl; import com.espertech.esper.supportunit.view.SupportViewDataChecker; import junit.framework.TestCase; public class TestExternallyTimedWindowView extends TestCase { private ExternallyTimedWindowView myView; private SupportBeanClassView childView; public void setUp() throws Exception { // Set up timed window view and a test child view, set the time window size to 1 second ExprNode node = SupportExprNodeFactory.makeIdentNodeBean("longPrimitive"); myView = new ExternallyTimedWindowView(new ExternallyTimedWindowViewFactory(), node, node.getExprEvaluator(), new ExprTimePeriodEvalDeltaConstGivenDelta(1000), null, SupportStatementContextFactory.makeAgentInstanceViewFactoryContext()); childView = new SupportBeanClassView(SupportBean.class); myView.addView(childView); } public void testIncorrectUse() throws Exception { try { myView = new ExternallyTimedWindowView(null, SupportExprNodeFactory.makeIdentNodeBean("theString"), null, new ExprTimePeriodEvalDeltaConstGivenDelta(0), null, SupportStatementContextFactory.makeAgentInstanceViewFactoryContext()); } catch (IllegalArgumentException ex) { // Expected exception } } public void testViewPush() { // Set up a feed for the view under test - it will have a depth of 3 trades SupportStreamImpl stream = new SupportStreamImpl(SupportBean.class, 3); stream.addView(myView); EventBean[] a = makeBeans("a", 10000, 1); stream.insert(a); SupportViewDataChecker.checkOldData(childView, null); SupportViewDataChecker.checkNewData(childView, new EventBean[]{a[0]}); EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{a[0]}, myView.iterator()); EventBean[] b = makeBeans("b", 10500, 2); stream.insert(b); SupportViewDataChecker.checkOldData(childView, null); SupportViewDataChecker.checkNewData(childView, new EventBean[]{b[0], b[1]}); EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{a[0], b[0], b[1]}, myView.iterator()); EventBean[] c = makeBeans("c", 10900, 1); stream.insert(c); SupportViewDataChecker.checkOldData(childView, null); SupportViewDataChecker.checkNewData(childView, new EventBean[]{c[0]}); EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{a[0], b[0], b[1], c[0]}, myView.iterator()); EventBean[] d = makeBeans("d", 10999, 1); stream.insert(d); SupportViewDataChecker.checkOldData(childView, null); SupportViewDataChecker.checkNewData(childView, new EventBean[]{d[0]}); EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{a[0], b[0], b[1], c[0], d[0]}, myView.iterator()); EventBean[] e = makeBeans("e", 11000, 2); stream.insert(e); SupportViewDataChecker.checkOldData(childView, new EventBean[]{a[0]}); SupportViewDataChecker.checkNewData(childView, new EventBean[]{e[0], e[1]}); EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{b[0], b[1], c[0], d[0], e[0], e[1]}, myView.iterator()); EventBean[] f = makeBeans("f", 11500, 1); stream.insert(f); SupportViewDataChecker.checkOldData(childView, new EventBean[]{b[0], b[1]}); SupportViewDataChecker.checkNewData(childView, new EventBean[]{f[0]}); EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{c[0], d[0], e[0], e[1], f[0]}, myView.iterator()); EventBean[] g = makeBeans("g", 11899, 1); stream.insert(g); SupportViewDataChecker.checkOldData(childView, null); SupportViewDataChecker.checkNewData(childView, new EventBean[]{g[0]}); EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{c[0], d[0], e[0], e[1], f[0], g[0]}, myView.iterator()); EventBean[] h = makeBeans("h", 11999, 3); stream.insert(h); SupportViewDataChecker.checkOldData(childView, new EventBean[]{c[0], d[0]}); SupportViewDataChecker.checkNewData(childView, new EventBean[]{h[0], h[1], h[2]}); EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{e[0], e[1], f[0], g[0], h[0], h[1], h[2]}, myView.iterator()); EventBean[] i = makeBeans("i", 13001, 1); stream.insert(i); SupportViewDataChecker.checkOldData(childView, new EventBean[]{e[0], e[1], f[0], g[0], h[0], h[1], h[2]}); SupportViewDataChecker.checkNewData(childView, new EventBean[]{i[0]}); EPAssertionUtil.assertEqualsExactOrder(new EventBean[]{i[0]}, myView.iterator()); } private EventBean[] makeBeans(String id, long timestamp, int numBeans) { EventBean[] beans = new EventBean[numBeans]; for (int i = 0; i < numBeans; i++) { SupportBean bean = new SupportBean(); bean.setLongPrimitive(timestamp); bean.setTheString(id + 1); beans[i] = SupportEventBeanFactory.createObject(bean); } return beans; } }