Should not define terminate state as state

- Fix so that we don't need to define terminate
  state as state. Simple defining it as end() is
  enough.
- Fixes #65
This commit is contained in:
Janne Valkealahti
2015-05-10 18:07:46 +01:00
parent 362df027b4
commit e21b9559da
4 changed files with 37 additions and 16 deletions

View File

@@ -120,6 +120,7 @@ public class DefaultStateConfigurer<S, E>
@Override
public StateConfigurer<S, E> end(S end) {
this.end = end;
state(end);
return this;
}

View File

@@ -259,8 +259,8 @@ public class RegionMachineTests extends AbstractStateMachineTests {
context.getBean(StateMachineSystemConstants.DEFAULT_ID_STATEMACHINE, EnumStateMachine.class);
assertThat(machine, notNullValue());
Collection<Object> 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));

View File

@@ -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<TestStates, TestEvents> configurer = new DefaultStateConfigurer<TestStates, TestEvents>();
@@ -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<Action<TestStates, TestEvents>> exitActions = Arrays.asList(testExitAction());
DefaultStateConfigurer<TestStates, TestEvents> configurer = new DefaultStateConfigurer<TestStates, TestEvents>();
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<Action<TestStates, TestEvents>> entryActions = Arrays.asList(testEntryAction());
DefaultStateConfigurer<TestStates, TestEvents> configurer = new DefaultStateConfigurer<TestStates, TestEvents>();
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<TestStates, TestEvents> configurer = new DefaultStateConfigurer<TestStates, TestEvents>();
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<TestStates, TestEvents> configurer = new DefaultStateConfigurer<TestStates, TestEvents>();
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<TestStates, TestEvents> {
Collection<StateData<TestStates, TestEvents>> data;
@Override
public void addStateData(Collection<StateData<TestStates, TestEvents>> stateDatas) {
this.data = stateDatas;
}
}
}
private Action<TestStates, TestEvents> testEntryAction() {
@@ -134,5 +157,5 @@ public class DefaultStateConfigurerTests {
private Action<TestStates, TestEvents> testExitAction() {
return new TestExitAction();
}
}

View File

@@ -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);
}