/** * Gives the current {@link State} time to update. * @param context Reference to the context. */ public void handle(C context) { handle(null, context); }
/** * Gives the current {@link State} time to update. * @param context Reference to the context. */ public void handle(C context) { handle(null, context); }
@Override public void switchToRealTime() { checkState(stateMachine.isSupported(Trigger.REAL_TIME), "Can not switch to real time mode because clock is already stopped."); stateMachine.handle(Trigger.REAL_TIME, this); }
@Override protected final void tickImpl(TimeLapse time) { currentTime = Optional.of(time); preTick(time); stateMachine.handle(this); }
@Override protected final void tickImpl(TimeLapse time) { currentTime = Optional.of(time); preTick(time); stateMachine.handle(this); }
@Override public void switchToSimulatedTime() { checkState(stateMachine.isSupported(Trigger.SIMULATE), "Can not switch to simulated time mode because clock is already " + "stopped."); stateMachine.handle(Trigger.SIMULATE, this); }
@Override void doStart() { checkState(stateMachine.isSupported(Trigger.START), "%s can be started only once", getClass().getSimpleName()); final AffinityLock lock = AffinityLock.acquireLock(); LOGGER.info("Acquired lock to CPU {}.", lock.cpuId()); affinityLock = lock; stateMachine.handle(Trigger.START, this); }
@Override public void stop() { LOGGER.trace("stop"); checkState(stateMachine.isSupported(Trigger.STOP), "Can not stop time in current state: %s", stateMachine.getCurrentState().name()); final boolean rt = stateMachine.stateIs(realtimeState); stateMachine.handle(Trigger.STOP, this); if (!rt) { shutdownExecutor(); } }
fsm.handle(Events.START, CONTEXT); assertEquals(startState, fsm.getCurrentState()); fsm.handle(CONTEXT); assertEquals(startState, fsm.getCurrentState()); fsm.handle(Events.SPEZIAL, SPECIAL_CONTEXT); assertEquals(startState, fsm.getCurrentState()); assertEquals(2, history.getHistory().size()); fsm.handle(Events.SPEZIAL, CONTEXT); assertEquals(specialState, fsm.getCurrentState()); fsm.handle(Events.STOP, CONTEXT); assertEquals(specialState, fsm.getCurrentState()); fsm.handle(Events.START, CONTEXT); assertEquals(startState, fsm.getCurrentState());
assertTrue(history.getHistory().isEmpty()); fsm.handle(Events.RECURSIVE, CONTEXT); assertEquals(stopState, fsm.getCurrentState());
/** * Tests correct behavior for events which are not equal. */ @SuppressWarnings("static-method") @Test public void eventNotEqualBehavior() { final TestState state1 = new TestState("state1"); state1.name(); final TestState state2 = new TestState("state2"); final Object event1 = "event1"; final Object event2 = new Object(); final StateMachine<Object, Object> sm = StateMachine.create(state1)/* */ .addTransition(state1, event1, state2)/* */ .addTransition(state2, event2, state1)/* */ .build(); assertTrue(sm.isSupported(event1)); assertTrue(sm.isSupported("event1")); assertTrue(sm.isSupported(new StringBuilder("event").append(1) .toString())); assertFalse(sm.isSupported(event2)); sm.handle("event1", CONTEXT); assertTrue(sm.stateIs(state2)); assertTrue(sm.isSupported(event2)); assertFalse(sm.isSupported(new Object())); }
/** * Tests a subclass that changes the state machine. */ @Test public void testExtension() { final VehicleDTO v = VehicleDTO.builder() .startPosition(new Point(1, 1)) .speed(30d) .capacity(1) .availabilityTimeWindow(TimeWindow.create(0, minute(30))) .build(); final SubVehicle vehicle = new SubVehicle(v, allowDelayedRouteChanges); d = vehicle; PDPTWTestUtil.register(rm, pm, vehicle); tick(0, 1); assertEquals(vehicle.waitState, vehicle.stateMachine.getCurrentState()); vehicle.stateMachine.handle(ExtraEvent.TEST_EVENT, vehicle); assertEquals(vehicle.extraState, vehicle.stateMachine.getCurrentState()); tick(1, 2); assertEquals(vehicle.waitState, vehicle.stateMachine.getCurrentState()); }