package org.springframework.webflow.execution.repository.snapshot; import junit.framework.TestCase; import org.springframework.webflow.definition.FlowDefinition; import org.springframework.webflow.definition.registry.FlowDefinitionConstructionException; import org.springframework.webflow.definition.registry.FlowDefinitionLocator; import org.springframework.webflow.definition.registry.NoSuchFlowDefinitionException; import org.springframework.webflow.engine.Flow; import org.springframework.webflow.engine.RequestControlContext; import org.springframework.webflow.engine.State; import org.springframework.webflow.engine.impl.FlowExecutionImpl; import org.springframework.webflow.engine.impl.FlowExecutionImplFactory; import org.springframework.webflow.execution.FlowExecutionException; import org.springframework.webflow.execution.FlowExecutionKeyFactory; import org.springframework.webflow.test.MockExternalContext; public class SerializedFlowExecutionSnapshotFactoryTests extends TestCase { private Flow flow; private SerializedFlowExecutionSnapshotFactory factory; private FlowExecutionKeyFactory executionKeyFactory; private FlowExecutionImplFactory executionFactory; public void setUp() { flow = new Flow("myFlow"); new State(flow, "state") { protected void doEnter(RequestControlContext context) throws FlowExecutionException { } }; FlowDefinitionLocator locator = new FlowDefinitionLocator() { public FlowDefinition getFlowDefinition(String flowId) throws NoSuchFlowDefinitionException, FlowDefinitionConstructionException { return flow; } }; executionFactory = new FlowExecutionImplFactory(); executionFactory.setExecutionKeyFactory(executionKeyFactory); factory = new SerializedFlowExecutionSnapshotFactory(executionFactory, locator); } public void testCreateSnapshot() { FlowExecutionImpl flowExecution = (FlowExecutionImpl) executionFactory.createFlowExecution(flow); flowExecution.start(null, new MockExternalContext()); flowExecution.getActiveSession().getScope().put("foo", "bar"); FlowExecutionSnapshot snapshot = factory.createSnapshot(flowExecution); FlowExecutionImpl flowExecution2 = (FlowExecutionImpl) factory.restoreExecution(snapshot, "myFlow", null, flowExecution.getConversationScope(), executionKeyFactory); assertNotSame(flowExecution, flowExecution2); assertEquals(flowExecution.getDefinition().getId(), flowExecution2.getDefinition().getId()); assertEquals(flowExecution.getActiveSession().getScope().get("foo"), flowExecution2.getActiveSession() .getScope().get("foo")); assertEquals(flowExecution.getActiveSession().getState().getId(), flowExecution2.getActiveSession().getState() .getId()); assertNull(flowExecution2.getKey()); assertSame(flowExecution.getConversationScope(), flowExecution2.getConversationScope()); } }