/* * Copyright 2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.statemachine.access; import static org.hamcrest.Matchers.sameInstance; import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.UUID; import org.junit.Test; import org.springframework.messaging.Message; import org.springframework.statemachine.ExtendedState; import org.springframework.statemachine.StateMachine; import org.springframework.statemachine.StateMachineContext; import org.springframework.statemachine.listener.StateMachineListener; import org.springframework.statemachine.monitor.StateMachineMonitor; import org.springframework.statemachine.state.State; import org.springframework.statemachine.support.StateMachineInterceptor; import org.springframework.statemachine.transition.Transition; public class StateMachineAccessTests { @Test public void testDoWithAllRegionsSetRelay() { MockStateMachine mock = new MockStateMachine(); final StateMachine<String, String> stateMachine = mock; stateMachine.getStateMachineAccessor().doWithAllRegions(new StateMachineFunction<StateMachineAccess<String, String>>() { @Override public void apply(StateMachineAccess<String, String> function) { function.setRelay(stateMachine); } }); assertThat(mock.relay, sameInstance(stateMachine)); } @Test public void testGetAllRegionsSetRelay() { MockStateMachine mock = new MockStateMachine(); final StateMachine<String, String> stateMachine = mock; stateMachine.getStateMachineAccessor().withAllRegions().stream() .forEach(access -> access.setRelay(stateMachine)); assertThat(mock.relay, sameInstance(stateMachine)); } private static class MockStateMachine implements StateMachine<String, String>, StateMachineAccess<String, String> { StateMachine<String, String> relay; @Override public StateMachineAccessor<String, String> getStateMachineAccessor() { return new StateMachineAccessor<String, String>() { @Override public void doWithAllRegions(StateMachineFunction<StateMachineAccess<String, String>> stateMachineAccess) { stateMachineAccess.apply(MockStateMachine.this); } @Override public List<StateMachineAccess<String, String>> withAllRegions() { List<StateMachineAccess<String, String>> list = new ArrayList<StateMachineAccess<String,String>>(); list.add(MockStateMachine.this); return list; } @Override public void doWithRegion(StateMachineFunction<StateMachineAccess<String, String>> stateMachineAccess) { } @Override public StateMachineAccess<String, String> withRegion() { return null; } }; } @Override public void addStateMachineInterceptor(StateMachineInterceptor<String, String> interceptor) { } @Override public void addStateMachineMonitor(StateMachineMonitor<String, String> monitor) { } @Override public void setRelay(StateMachine<String, String> stateMachine) { this.relay = stateMachine; } @Override public void setParentMachine(StateMachine<String, String> stateMachine) { } @Override public void resetStateMachine(StateMachineContext<String, String> stateMachineContext) { } @Override public void start() { } @Override public void stop() { } @Override public boolean sendEvent(Message<String> event) { return false; } @Override public boolean sendEvent(String event) { return false; } @Override public State<String, String> getState() { return null; } @Override public Collection<State<String, String>> getStates() { return null; } @Override public Collection<Transition<String, String>> getTransitions() { return null; } @Override public boolean isComplete() { return false; } @Override public void setStateMachineError(Exception exception) { } @Override public boolean hasStateMachineError() { return false; } @Override public void addStateListener(StateMachineListener<String, String> listener) { } @Override public void removeStateListener(StateMachineListener<String, String> listener) { } @Override public State<String, String> getInitialState() { return null; } @Override public ExtendedState getExtendedState() { return null; } @Override public void setInitialEnabled(boolean enabled) { } @Override public UUID getUuid() { return null; } @Override public String getId() { return null; } @Override public void setForwardedInitialEvent(Message<String> message) { } } }