Add capabilities to provide ActionError in Transition
- Add classes directory to be ignored by git - Doesn't yet handle actions defined for entry, exit or do behariour. - Docs to come when features around error actions are fully implemented. - Fixes #240
This commit is contained in:
committed by
Janne Valkealahti
parent
062bc9aa0e
commit
4c34e46ccf
@@ -15,10 +15,6 @@
|
||||
*/
|
||||
package org.springframework.statemachine.action;
|
||||
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -35,6 +31,10 @@ import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter
|
||||
import org.springframework.statemachine.config.builders.StateMachineStateConfigurer;
|
||||
import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer;
|
||||
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
* Tests for state machine actions.
|
||||
*
|
||||
@@ -54,13 +54,18 @@ public class ActionTests extends AbstractStateMachineTests {
|
||||
|
||||
TestCountAction testAction1 = ctx.getBean("testAction1", TestCountAction.class);
|
||||
TestCountAction testAction2 = ctx.getBean("testAction2", TestCountAction.class);
|
||||
TestCountAction testAction3 = ctx.getBean("testAction3", TestCountAction.class);
|
||||
TestCountAction testAction3 = ctx.getBean("testAction3", TestCountAction.class);
|
||||
TestCountAction testAction4 = ctx.getBean("testAction4", TestCountAction.class);
|
||||
TestCountAction testErrorAction = ctx.getBean("testErrorAction", TestCountAction.class);
|
||||
machine.sendEvent(MessageBuilder.withPayload(TestEvents.E1).build());
|
||||
machine.sendEvent(MessageBuilder.withPayload(TestEvents.E2).build());
|
||||
machine.sendEvent(MessageBuilder.withPayload(TestEvents.E3).build());
|
||||
machine.sendEvent(MessageBuilder.withPayload(TestEvents.E3).build());
|
||||
machine.sendEvent(MessageBuilder.withPayload(TestEvents.E4).build());
|
||||
assertThat(testAction1.count, is(1));
|
||||
assertThat(testAction2.count, is(1));
|
||||
assertThat(testAction3.count, is(1));
|
||||
assertThat(testAction3.count, is(1));
|
||||
assertThat(testAction4.count, is(0));
|
||||
assertThat(testErrorAction.count, is(1));
|
||||
ctx.close();
|
||||
}
|
||||
|
||||
@@ -95,8 +100,9 @@ public class ActionTests extends AbstractStateMachineTests {
|
||||
.initial(TestStates.S1)
|
||||
.state(TestStates.S1)
|
||||
.state(TestStates.S2)
|
||||
.state(TestStates.S3)
|
||||
.state(TestStates.S4);
|
||||
.state(TestStates.S3)
|
||||
.state(TestStates.S4)
|
||||
.state(TestStates.S10);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -118,7 +124,13 @@ public class ActionTests extends AbstractStateMachineTests {
|
||||
.source(TestStates.S3)
|
||||
.target(TestStates.S4)
|
||||
.event(TestEvents.E3)
|
||||
.action(testAction3());
|
||||
.action(testAction3())
|
||||
.and()
|
||||
.withExternal()
|
||||
.source(TestStates.S4)
|
||||
.target(TestStates.S10)
|
||||
.event(TestEvents.E4)
|
||||
.action(testAction4(), testErrorAction());
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -131,8 +143,23 @@ public class ActionTests extends AbstractStateMachineTests {
|
||||
return new TestCountAction();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public TestCountAction testAction3() {
|
||||
@Bean
|
||||
public TestCountAction testAction3() {
|
||||
return new TestCountAction();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public TestCountAction testAction4() {
|
||||
return new TestCountAction() {
|
||||
@Override
|
||||
public void execute(StateContext<TestStates, TestEvents> context) {
|
||||
throw new RuntimeException("Fake Error");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Bean
|
||||
public TestCountAction testErrorAction() {
|
||||
return new TestCountAction();
|
||||
}
|
||||
|
||||
|
||||
@@ -15,16 +15,6 @@
|
||||
*/
|
||||
package org.springframework.statemachine.config.model;
|
||||
|
||||
import static org.hamcrest.Matchers.contains;
|
||||
import static org.hamcrest.Matchers.containsInAnyOrder;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.core.task.SyncTaskExecutor;
|
||||
@@ -40,6 +30,12 @@ import org.springframework.statemachine.listener.StateMachineListener;
|
||||
import org.springframework.statemachine.security.SecurityRule;
|
||||
import org.springframework.statemachine.transition.TransitionKind;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static org.hamcrest.Matchers.contains;
|
||||
import static org.hamcrest.Matchers.containsInAnyOrder;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
public class StateMachineModelTests {
|
||||
|
||||
@Test
|
||||
@@ -72,7 +68,7 @@ public class StateMachineModelTests {
|
||||
|
||||
|
||||
Collection<TransitionData<String, String>> transitions = new ArrayList<>();
|
||||
TransitionData<String, String> transitionData1 = new TransitionData<String, String>("S1", "S2", null, "E1", null, null, null, null, TransitionKind.EXTERNAL, null);
|
||||
TransitionData<String, String> transitionData1 = new TransitionData<String, String>("S1", "S2", null, "E1", null, null, null, null, TransitionKind.EXTERNAL, null, null);
|
||||
transitions.add(transitionData1);
|
||||
Map<String, List<ChoiceData<String, String>>> choices = new HashMap<>();
|
||||
Map<String, List<JunctionData<String, String>>> junctions = new HashMap<>();
|
||||
|
||||
@@ -15,15 +15,6 @@
|
||||
*/
|
||||
package org.springframework.statemachine.support;
|
||||
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.expression.ExpressionParser;
|
||||
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
||||
@@ -36,6 +27,7 @@ import org.springframework.statemachine.StateContext;
|
||||
import org.springframework.statemachine.StateMachine;
|
||||
import org.springframework.statemachine.access.StateMachineAccessor;
|
||||
import org.springframework.statemachine.action.Action;
|
||||
import org.springframework.statemachine.action.Actions;
|
||||
import org.springframework.statemachine.listener.StateMachineListener;
|
||||
import org.springframework.statemachine.security.SecurityRule;
|
||||
import org.springframework.statemachine.state.EnumState;
|
||||
@@ -44,6 +36,11 @@ import org.springframework.statemachine.transition.Transition;
|
||||
import org.springframework.statemachine.transition.TransitionKind;
|
||||
import org.springframework.statemachine.trigger.Trigger;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
public class StateContextExpressionMethodsTests {
|
||||
|
||||
@Test
|
||||
@@ -133,6 +130,10 @@ public class StateContextExpressionMethodsTests {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Action<SpelStates, SpelEvents> getErrorAction() {
|
||||
return Actions.emptyAction();
|
||||
}
|
||||
}
|
||||
|
||||
private static class MockStatemachine implements StateMachine<SpelStates, SpelEvents> {
|
||||
|
||||
Reference in New Issue
Block a user