diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/configurers/DefaultStateConfigurer.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/configurers/DefaultStateConfigurer.java index 033e4d9a..2bf64f03 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/configurers/DefaultStateConfigurer.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/configurers/DefaultStateConfigurer.java @@ -120,6 +120,7 @@ public class DefaultStateConfigurer @Override public StateConfigurer end(S end) { this.end = end; + state(end); return this; } diff --git a/spring-statemachine-core/src/test/java/org/springframework/statemachine/RegionMachineTests.java b/spring-statemachine-core/src/test/java/org/springframework/statemachine/RegionMachineTests.java index 08bbc051..90f86cbc 100644 --- a/spring-statemachine-core/src/test/java/org/springframework/statemachine/RegionMachineTests.java +++ b/spring-statemachine-core/src/test/java/org/springframework/statemachine/RegionMachineTests.java @@ -259,8 +259,8 @@ public class RegionMachineTests extends AbstractStateMachineTests { context.getBean(StateMachineSystemConstants.DEFAULT_ID_STATEMACHINE, EnumStateMachine.class); assertThat(machine, notNullValue()); Collection states = TestUtils.readField("states", machine); - assertThat(states.size(), is(2)); - assertThat(states, containsInAnyOrder(instanceOf(EnumState.class), instanceOf(RegionState.class))); + assertThat(states.size(), is(3)); + assertThat(states, containsInAnyOrder(instanceOf(EnumState.class), instanceOf(EnumState.class), instanceOf(RegionState.class))); machine.start(); machine.sendEvent(TestEvents.E1); assertThat(machine.getState().getIds(), containsInAnyOrder(TestStates.S2, TestStates.S20, TestStates.S30)); 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 f0677783..c89953a4 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 @@ -68,7 +68,7 @@ public class DefaultStateConfigurerTests { assertThat(builder.data.size(), is(1)); assertThat(builder.data.iterator().next().getState(), is(TestStates.SI)); } - + @Test public void testParentSet() throws Exception { DefaultStateConfigurer configurer = new DefaultStateConfigurer(); @@ -81,12 +81,12 @@ public class DefaultStateConfigurerTests { assertThat(builder.data.iterator().next().getState(), is(TestStates.S1)); assertThat((TestStates)builder.data.iterator().next().getParent(), is(TestStates.SI)); } - + @Test public void testActionsInitialFirst() throws Exception { @SuppressWarnings("unchecked") Collection> exitActions = Arrays.asList(testExitAction()); - + DefaultStateConfigurer configurer = new DefaultStateConfigurer(); TestStateMachineStateBuilder builder = new TestStateMachineStateBuilder(); configurer.initial(TestStates.S1); @@ -94,7 +94,7 @@ public class DefaultStateConfigurerTests { configurer.configure(builder); assertThat(builder.data, notNullValue()); assertThat(builder.data.size(), is(1)); - + assertThat(builder.data.iterator().next().getState(), is(TestStates.S1)); assertThat(builder.data.iterator().next().getEntryActions(), nullValue()); assertThat(builder.data.iterator().next().getExitActions(), notNullValue()); @@ -104,27 +104,50 @@ public class DefaultStateConfigurerTests { public void testActionsJustState() throws Exception { @SuppressWarnings("unchecked") Collection> entryActions = Arrays.asList(testEntryAction()); - + DefaultStateConfigurer configurer = new DefaultStateConfigurer(); TestStateMachineStateBuilder builder = new TestStateMachineStateBuilder(); configurer.state(TestStates.S2, entryActions, null); 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().getEntryActions(), notNullValue()); } - + + @Test + public void testEndStateNoState() throws Exception { + DefaultStateConfigurer configurer = new DefaultStateConfigurer(); + TestStateMachineStateBuilder builder = new TestStateMachineStateBuilder(); + configurer.end(TestStates.SF); + configurer.configure(builder); + assertThat(builder.data, notNullValue()); + assertThat(builder.data.size(), is(1)); + assertThat(builder.data.iterator().next().getState(), is(TestStates.SF)); + } + + @Test + public void testEndStateAsState() throws Exception { + DefaultStateConfigurer configurer = new DefaultStateConfigurer(); + TestStateMachineStateBuilder builder = new TestStateMachineStateBuilder(); + configurer.state(TestStates.SF); + configurer.end(TestStates.SF); + configurer.configure(builder); + assertThat(builder.data, notNullValue()); + assertThat(builder.data.size(), is(1)); + assertThat(builder.data.iterator().next().getState(), is(TestStates.SF)); + } + private static class TestStateMachineStateBuilder extends StateMachineStateBuilder { - + Collection> data; - + @Override public void addStateData(Collection> stateDatas) { this.data = stateDatas; - } + } } private Action testEntryAction() { @@ -134,5 +157,5 @@ public class DefaultStateConfigurerTests { private Action testExitAction() { return new TestExitAction(); } - + } diff --git a/spring-statemachine-core/src/test/java/org/springframework/statemachine/state/EndStateTests.java b/spring-statemachine-core/src/test/java/org/springframework/statemachine/state/EndStateTests.java index a654fa0f..c21a252f 100644 --- a/spring-statemachine-core/src/test/java/org/springframework/statemachine/state/EndStateTests.java +++ b/spring-statemachine-core/src/test/java/org/springframework/statemachine/state/EndStateTests.java @@ -160,19 +160,16 @@ public class EndStateTests extends AbstractStateMachineTests { .withStates() .parent(TestStates3.TASKS) .initial(TestStates3.T1) - .state(TestStates3.T1E) .end(TestStates3.T1E) .and() .withStates() .parent(TestStates3.TASKS) .initial(TestStates3.T2) - .state(TestStates3.T2E) .end(TestStates3.T2E) .and() .withStates() .parent(TestStates3.TASKS) .initial(TestStates3.T3) - .state(TestStates3.T3E) .end(TestStates3.T3E); }