From 6743d42792dfaa13fb09b792d8a2907ea813b4f7 Mon Sep 17 00:00:00 2001 From: Marco Primi Date: Sun, 4 Feb 2018 17:25:53 -0800 Subject: [PATCH] Add getter for state actions State has getters for entry and exit actions but no getter for state actions. - Add State::getStateActions() in State - Implement in AbstractState - Update tests https://github.com/spring-projects/spring-statemachine/issues/502 --- .../statemachine/state/AbstractState.java | 5 ++++ .../statemachine/state/State.java | 7 ++++++ .../AbstractStateMachineTests.java | 17 ++++++++++++++ .../DefaultStateConfigurerTests.java | 23 +++++++++++++++++++ 4 files changed, 52 insertions(+) diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/AbstractState.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/AbstractState.java index 36a461de..e29b2485 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/AbstractState.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/AbstractState.java @@ -234,6 +234,11 @@ public abstract class AbstractState extends LifecycleObjectSupport impleme return entryActions; } + @Override + public Collection> getStateActions() { + return stateActions; + } + @Override public Collection> getExitActions() { return exitActions; diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/State.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/State.java index 03e3472d..4013eb63 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/State.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/State.java @@ -108,6 +108,13 @@ public interface State { */ Collection> getEntryActions(); + /** + * Gets {@link Action}s executed once in this state. + * + * @return the state actions + */ + Collection> getStateActions(); + /** * Gets {@link Action}s executed exiting from this state. * diff --git a/spring-statemachine-core/src/test/java/org/springframework/statemachine/AbstractStateMachineTests.java b/spring-statemachine-core/src/test/java/org/springframework/statemachine/AbstractStateMachineTests.java index 59c66f0e..9c9467c7 100644 --- a/spring-statemachine-core/src/test/java/org/springframework/statemachine/AbstractStateMachineTests.java +++ b/spring-statemachine-core/src/test/java/org/springframework/statemachine/AbstractStateMachineTests.java @@ -159,6 +159,23 @@ public abstract class AbstractStateMachineTests { } + public static class TestStateAction extends AbstractTestAction { + + public TestStateAction() { + super(); + } + + public TestStateAction(String message) { + super(message); + } + + @Override + public String toString() { + return "TestStateAction [message=" + message + "]"; + } + + } + public static class TestAction extends AbstractTestAction { } diff --git a/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/configurers/DefaultStateConfigurerTests.java b/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/configurers/DefaultStateConfigurerTests.java index ab85ec25..7e2cc310 100644 --- a/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/configurers/DefaultStateConfigurerTests.java +++ b/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/configurers/DefaultStateConfigurerTests.java @@ -27,6 +27,7 @@ import org.junit.Test; import org.springframework.statemachine.AbstractStateMachineTests.TestEntryAction; import org.springframework.statemachine.AbstractStateMachineTests.TestEvents; import org.springframework.statemachine.AbstractStateMachineTests.TestExitAction; +import org.springframework.statemachine.AbstractStateMachineTests.TestStateAction; import org.springframework.statemachine.AbstractStateMachineTests.TestStates; import org.springframework.statemachine.action.Action; import org.springframework.statemachine.config.builders.StateMachineStateBuilder; @@ -97,6 +98,7 @@ public class DefaultStateConfigurerTests { assertThat(builder.data.iterator().next().getState(), is(TestStates.S1)); assertThat(builder.data.iterator().next().getEntryActions(), nullValue()); + assertThat(builder.data.iterator().next().getStateActions(), nullValue()); assertThat(builder.data.iterator().next().getExitActions(), notNullValue()); } @@ -113,9 +115,27 @@ public class DefaultStateConfigurerTests { assertThat(builder.data.iterator().next().getState(), is(TestStates.S2)); assertThat(builder.data.iterator().next().getExitActions(), nullValue()); + assertThat(builder.data.iterator().next().getStateActions(), nullValue()); assertThat(builder.data.iterator().next().getEntryActions(), notNullValue()); } + @Test + public void testStateActions() throws Exception { + Collection> stateActions = Arrays.asList(testStateAction()); + + DefaultStateConfigurer configurer = new DefaultStateConfigurer(); + TestStateMachineStateBuilder builder = new TestStateMachineStateBuilder(); + configurer.state(TestStates.S2, stateActions); + configurer.configure(builder); + assertThat(builder.data, notNullValue()); + assertThat(builder.data.size(), is(1)); + + assertThat(builder.data.iterator().next().getState(), is(TestStates.S2)); + assertThat(builder.data.iterator().next().getExitActions(), nullValue()); + assertThat(builder.data.iterator().next().getStateActions(), notNullValue()); + assertThat(builder.data.iterator().next().getEntryActions(), nullValue()); + } + @Test public void testEndStateNoState() throws Exception { DefaultStateConfigurer configurer = new DefaultStateConfigurer(); @@ -169,4 +189,7 @@ public class DefaultStateConfigurerTests { return new TestExitAction(); } + private Action testStateAction() { + return new TestStateAction(); + } }