/*
* *************************************************************************************
* 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.pattern.observer;
import com.espertech.esper.core.service.StatementContext;
import com.espertech.esper.pattern.*;
import com.espertech.esper.schedule.SchedulingServiceImpl;
import com.espertech.esper.support.guard.SupportObserverEvaluator;
import com.espertech.esper.support.pattern.SupportPatternContextFactory;
import com.espertech.esper.support.schedule.SupportSchedulingServiceImpl;
import com.espertech.esper.support.view.SupportStatementContextFactory;
import com.espertech.esper.timer.TimeSourceServiceImpl;
import junit.framework.TestCase;
public class TestTimerIntervalObserver extends TestCase
{
private PatternContext context;
private PatternAgentInstanceContext agentContext;
private TimerIntervalObserver observer;
private SchedulingServiceImpl scheduleService;
private SupportObserverEvaluator evaluator;
private MatchedEventMap beginState;
public void setUp()
{
beginState = new MatchedEventMapImpl(new MatchedEventMapMeta(new String[0], false));
scheduleService = new SchedulingServiceImpl(new TimeSourceServiceImpl());
StatementContext stmtContext = SupportStatementContextFactory.makeContext(scheduleService);
context = new PatternContext(stmtContext, 1, new MatchedEventMapMeta(new String[0], false), false);
agentContext = SupportPatternContextFactory.makePatternAgentInstanceContext(scheduleService);
evaluator = new SupportObserverEvaluator(agentContext);
observer = new TimerIntervalObserver(1000, beginState, evaluator);
}
public void testStartAndObserve()
{
scheduleService.setTime(0);
observer.startObserve();
scheduleService.setTime(1000);
SupportSchedulingServiceImpl.evaluateSchedule(scheduleService);
assertEquals(beginState, evaluator.getAndClearMatchEvents().get(0));
// Test start again
observer.startObserve();
scheduleService.setTime(1999);
SupportSchedulingServiceImpl.evaluateSchedule(scheduleService);
assertEquals(0, evaluator.getMatchEvents().size());
scheduleService.setTime(2000);
SupportSchedulingServiceImpl.evaluateSchedule(scheduleService);
assertEquals(beginState, evaluator.getAndClearMatchEvents().get(0));
}
public void testStartAndStop()
{
// Start then stop
scheduleService.setTime(0);
observer.startObserve();
observer.stopObserve();
scheduleService.setTime(1000);
SupportSchedulingServiceImpl.evaluateSchedule(scheduleService);
assertEquals(0, evaluator.getAndClearMatchEvents().size());
// Test start again
observer.startObserve();
scheduleService.setTime(2500);
SupportSchedulingServiceImpl.evaluateSchedule(scheduleService);
assertEquals(beginState, evaluator.getAndClearMatchEvents().get(0));
observer.stopObserve();
observer.startObserve();
scheduleService.setTime(3500);
SupportSchedulingServiceImpl.evaluateSchedule(scheduleService);
assertEquals(beginState, evaluator.getAndClearMatchEvents().get(0));
}
public void testImmediateTrigger()
{
// Should fireStatementStopped right away, wait time set to zero
observer = new TimerIntervalObserver(0, beginState, evaluator);
scheduleService.setTime(0);
observer.startObserve();
assertEquals(beginState, evaluator.getAndClearMatchEvents().get(0));
scheduleService.setTime(10000000);
SupportSchedulingServiceImpl.evaluateSchedule(scheduleService);
assertEquals(0, evaluator.getAndClearMatchEvents().size());
}
public void testInvalid()
{
try
{
observer.startObserve();
observer.startObserve();
fail();
}
catch (IllegalStateException ex)
{
// Expected exception
}
}
}