/*
* class: StateMachineTester
*
* Version $Id: StateMachineTester.java 8584 2006-08-10 23:06:37Z duns $
*
* Date: February 9 2003
*
* (c) 2003 LBNL
*/
package org.freehep.record.loop.test;
import org.freehep.record.loop.event.ConfigurationEvent;
import org.freehep.record.loop.event.RecordEvent;
import org.freehep.record.loop.event.RecordListener;
import org.freehep.record.loop.event.RecordSuppliedEvent;
import junit.framework.*;
/**
This class can be used to check that a <code>{@link
org.freehep.record.loop.SequentialRecordLoop SequentialRecordLoop}</code>
implementation follows the correct state machine.
*
* @version $Id: StateMachineTester.java 8584 2006-08-10 23:06:37Z duns $
* @author patton
*/
public class StateMachineTester
implements RecordListener
{
// public static final member data
// protected static final member data
// static final member data
// private static final member data
/** An illegal state. */
public static final byte ILLEGAL_STATE = 0;
/** The object is contructed and ready for use. */
public static final byte READY_STATE = ILLEGAL_STATE + 1;
/** The object has been configured. */
public static final byte CONFIGURED_STATE = READY_STATE + 1;
/** The objects is processing records. */
public static final byte PROCESSING_STATE = CONFIGURED_STATE + 1;
/** The object has been suspended. */
public static final byte SUSPENDED_STATE = PROCESSING_STATE + 1;
// private static member data
// private instance member data
/** The current state of this class. */
private byte state;
// constructors
/**
* Create an instance of this class.
*/
public StateMachineTester()
{
state = READY_STATE;
}
// instance member function (alphabetic)
public void configure(ConfigurationEvent event)
{
Assert.assertTrue("Illegal configure transition",
READY_STATE == state);
setState(CONFIGURED_STATE);
}
public void finish(RecordEvent event)
{
Assert.assertTrue("Illegal finish transition",
(SUSPENDED_STATE == state));
setState(READY_STATE);
}
/**
* @return true if the state matches the specifed state
*/
protected boolean isState(byte state)
{
return state == this.state;
}
public void recordSupplied(RecordSuppliedEvent event)
{
Assert.assertTrue("Illegal recordSupplied transition",
(CONFIGURED_STATE == state) ||
(PROCESSING_STATE == state));
setState(PROCESSING_STATE);
}
public void reconfigure(ConfigurationEvent event)
{
Assert.assertTrue("Illegal reconfigure transition",
SUSPENDED_STATE == state);
setState(CONFIGURED_STATE);
}
public void resume(RecordEvent event)
{
Assert.assertTrue("Illegal resume transition",
SUSPENDED_STATE == state);
setState(CONFIGURED_STATE);
}
/**
* Sets the state of the Checker
*/
protected void setState(byte state)
{
this.state = state;
}
public void suspend(RecordEvent event)
{
Assert.assertTrue("Illegal suspend transition",
(CONFIGURED_STATE == state) ||
(PROCESSING_STATE == state));
setState(SUSPENDED_STATE);
}
// static member functions (alphabetic)
// Description of this object.
// public String toString() {}
// public static void main(String args[]) {}
}