package eu.ggnet.statemachine; import org.junit.Test; import static eu.ggnet.statemachine.TimerStates.*; import static eu.ggnet.statemachine.TimerTransitions.*; import static org.junit.Assert.*; /** * * @author oliver.guenther */ public class StateMachineTest { @Test public void testMachine() throws InterruptedException { StateMachine<Timer> g = new StateMachine<>(new TimerStateCharacteristicsFactory()); g.add(OFF,TURN_ON,STOPPED_ON); g.add(OFF,PLUG_IN,STOPPED_PLUGEDIN); g.add(STOPPED_PLUGEDIN,TURN_ON,RUNNING); g.add(STOPPED_ON,PLUG_IN,RUNNING); g.add(RUNNING, TURN_OFF, STOPPED_PLUGEDIN); g.add(RUNNING,PLUG_OUT,STOPPED_ON); g.add(STOPPED_ON,TURN_OFF,OFF); g.add(STOPPED_PLUGEDIN,PLUG_OUT,OFF); g.add(OFF,TURN_AROUND,OFF); g.add(STOPPED_ON,TURN_AROUND,STOPPED_ON); g.add(STOPPED_PLUGEDIN,TURN_AROUND,STOPPED_PLUGEDIN); g.add(RUNNING,TURN_AROUND,RUNNING); Timer t = new Timer(false,false,false); assertEquals("Timer should be OFF",OFF, g.getState(t)); g.stateChange(t, TURN_ON); assertEquals(STOPPED_ON, g.getState(t)); try { g.stateChange(t, TURN_ON); fail("TURN_ON on State STOPPED_ON is not possible"); } catch(IllegalArgumentException e) {} g.stateChange(t, PLUG_IN); assertEquals(RUNNING, g.getState(t)); g.stateChange(t, TURN_AROUND); assertEquals(RUNNING, g.getState(t)); g.stateChange(t, TURN_OFF); assertEquals(STOPPED_PLUGEDIN, g.getState(t)); g.stateChange(t, TURN_AROUND); assertEquals(STOPPED_PLUGEDIN, g.getState(t)); g.stateChange(t, PLUG_OUT); assertEquals(OFF, g.getState(t)); g.stateChange(t, TURN_AROUND); assertEquals(OFF, g.getState(t)); } }