package org.springframework.webflow.config; import junit.framework.TestCase; import org.springframework.context.ApplicationContext; import org.springframework.webflow.conversation.Conversation; import org.springframework.webflow.conversation.ConversationException; import org.springframework.webflow.conversation.ConversationId; import org.springframework.webflow.conversation.ConversationManager; import org.springframework.webflow.conversation.ConversationParameters; import org.springframework.webflow.core.collection.AttributeMap; import org.springframework.webflow.definition.FlowDefinition; import org.springframework.webflow.execution.FlowExecutionListenerAdapter; import org.springframework.webflow.execution.RequestContext; import org.springframework.webflow.executor.FlowExecutor; import org.springframework.webflow.executor.FlowExecutorImpl; import org.springframework.webflow.test.MockExternalContext; public abstract class AbstractFlowExecutorConfigurationTests extends TestCase { private ApplicationContext context; public void setUp() { context = initApplicationContext(); } protected abstract ApplicationContext initApplicationContext(); public void testConfigOk() { FlowExecutor executor = context.getBean("flowExecutor", FlowExecutor.class); executor.launchExecution("flow", null, new MockExternalContext()); FlowExecutor executor2 = context.getBean("flowExecutorSimpleRepo", FlowExecutor.class); executor2.launchExecution("flow", null, new MockExternalContext()); } public void testCustomConversationManager() { FlowExecutorImpl executor = context.getBean("flowExecutor", FlowExecutorImpl.class); try { executor.getExecutionRepository().parseFlowExecutionKey("e1s1"); fail("ExceptionThrowingConversationManager would have raised an exception"); } catch (UnsupportedOperationException e) { } } public static class ConfigurationListener extends FlowExecutionListenerAdapter { public void sessionCreating(RequestContext context, FlowDefinition definition) { AttributeMap<Object> attributes = context.getFlowExecutionContext().getAttributes(); assertEquals(4, attributes.size()); assertEquals(Boolean.FALSE, attributes.getBoolean("alwaysRedirectOnPause")); assertEquals(Boolean.TRUE, attributes.getBoolean("redirectInSameState")); assertEquals("bar", attributes.get("foo")); assertEquals(new Integer(2), attributes.get("bar")); } } public static class ExceptionThrowingConversationManager implements ConversationManager { public Conversation beginConversation(ConversationParameters params) throws ConversationException { throw new UnsupportedOperationException(); } public Conversation getConversation(ConversationId id) throws ConversationException { throw new UnsupportedOperationException(); } public ConversationId parseConversationId(String encodedId) throws ConversationException { throw new UnsupportedOperationException(); } } }