}
@Test
public void testDecisionFlow() throws Throwable {
SimpleFlow flow = new JsrFlow("job");
Decider decider = new Decider() {
@Override
public String decide(javax.batch.runtime.StepExecution[] executions)
throws Exception {
assertNotNull(executions);
return "SWITCH";
}
};
List<StateTransition> transitions = new ArrayList<StateTransition>();
transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "decision"));
StepState decision = new StepState(new StubDecisionStep("decision", decider));
transitions.add(StateTransition.createStateTransition(decision, "SWITCH", "step3"));
transitions.add(StateTransition.createStateTransition(decision, "step2"));
StepState step2 = new StepState(new StubStep("step2"));
transitions.add(StateTransition.createStateTransition(step2, ExitStatus.COMPLETED.getExitCode(), "end0"));
transitions.add(StateTransition.createStateTransition(step2, ExitStatus.FAILED.getExitCode(), "end1"));
transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0")));
transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.FAILED, "end1")));
StepState step3 = new StepState(new StubStep("step3"));
transitions.add(StateTransition.createStateTransition(step3, ExitStatus.FAILED.getExitCode(), "end2"));
transitions.add(StateTransition.createStateTransition(step3, ExitStatus.COMPLETED.getExitCode(), "end3"));
transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.FAILED, "end2")));
transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end3")));
flow.setStateTransitions(transitions);
job.setFlow(flow);
job.doExecute(jobExecution);
StepExecution stepExecution = getStepExecution(jobExecution, "step3");