package org.springframework.webflow.engine.builder;
import junit.framework.TestCase;
import org.springframework.context.support.StaticApplicationContext;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.webflow.definition.FlowDefinition;
import org.springframework.webflow.engine.EndState;
import org.springframework.webflow.engine.Flow;
import org.springframework.webflow.engine.builder.support.AbstractFlowBuilder;
import org.springframework.webflow.test.MockFlowBuilderContext;
public class DefaultFlowHolderTests extends TestCase {
private DefaultFlowHolder holder;
private FlowAssembler assembler;
protected void setUp() {
MockFlowBuilderContext context = new MockFlowBuilderContext("flowId");
context.getFlowBuilderServices().setApplicationContext(new StaticApplicationContext());
FlowAssembler assembler = new FlowAssembler(new SimpleFlowBuilder(), context);
holder = new DefaultFlowHolder(assembler);
}
public void testGetFlowDefinition() {
FlowDefinition flow = holder.getFlowDefinition();
assertEquals("flowId", flow.getId());
assertEquals("end", flow.getStartState().getId());
}
public void testGetFlowDefinitionWithChangesRefreshed() {
assembler = new FlowAssembler(new ChangeDetectableFlowBuilder(), new MockFlowBuilderContext("flowId"));
holder = new DefaultFlowHolder(assembler);
FlowDefinition flow = holder.getFlowDefinition();
flow = holder.getFlowDefinition();
assertEquals("flowId", flow.getId());
assertEquals("end", flow.getStartState().getId());
}
public void testDestroyNotInitialized() {
holder.destroy();
}
public void testDestroy() {
holder.getFlowDefinition();
holder.destroy();
}
public class SimpleFlowBuilder extends AbstractFlowBuilder implements FlowBuilder {
public void buildStates() throws FlowBuilderException {
new EndState(getFlow(), "end");
}
protected Flow createFlow() {
return Flow.create(getContext().getFlowId(), getContext().getFlowAttributes());
}
}
public class ChangeDetectableFlowBuilder extends SimpleFlowBuilder {
private FileSystemResource resource = new FileSystemResource("file.txt");
public Resource getResource() {
return resource;
}
}
}