From 0f0a870c1efa6a11a1fd6efb18ebdda6fba1d327 Mon Sep 17 00:00:00 2001 From: Ben Hale Date: Fri, 23 Feb 2007 23:29:26 +0000 Subject: [PATCH] And the tests --- .../WebFlowConfigNamespaceHandlerTests.java | 416 +++++++++--------- 1 file changed, 220 insertions(+), 196 deletions(-) diff --git a/spring-webflow/src/test/java/org/springframework/webflow/config/WebFlowConfigNamespaceHandlerTests.java b/spring-webflow/src/test/java/org/springframework/webflow/config/WebFlowConfigNamespaceHandlerTests.java index f90a7691..8e36480a 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/config/WebFlowConfigNamespaceHandlerTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/config/WebFlowConfigNamespaceHandlerTests.java @@ -1,197 +1,221 @@ -/* - * Copyright 2004-2007 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.webflow.config; - -import junit.framework.TestCase; - -import org.springframework.beans.factory.BeanDefinitionStoreException; -import org.springframework.beans.factory.support.DefaultListableBeanFactory; -import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; -import org.springframework.core.io.ClassPathResource; -import org.springframework.webflow.conversation.ConversationManager; -import org.springframework.webflow.core.collection.AttributeMap; -import org.springframework.webflow.definition.registry.FlowDefinitionRegistry; -import org.springframework.webflow.engine.Flow; -import org.springframework.webflow.engine.impl.FlowExecutionImplFactory; -import org.springframework.webflow.engine.support.ApplicationViewSelector; -import org.springframework.webflow.execution.factory.ConditionalFlowExecutionListenerLoader; -import org.springframework.webflow.execution.factory.StaticFlowExecutionListenerLoader; -import org.springframework.webflow.execution.repository.continuation.ClientContinuationFlowExecutionRepository; -import org.springframework.webflow.execution.repository.continuation.ContinuationFlowExecutionRepository; -import org.springframework.webflow.execution.repository.support.AbstractConversationFlowExecutionRepository; -import org.springframework.webflow.execution.repository.support.SimpleFlowExecutionRepository; -import org.springframework.webflow.executor.FlowExecutorImpl; - -/** - * Unit tests for the WebFlowConfigNamespaceHandler and its BeanDefinitionParsers. - * - * @author Ben Hale - * @author Erwin Vervaet - */ -public class WebFlowConfigNamespaceHandlerTests extends TestCase { - - private DefaultListableBeanFactory beanFactory; - - protected void setUp() throws Exception { - super.setUp(); - this.beanFactory = new DefaultListableBeanFactory(); - XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this.beanFactory); - reader.loadBeanDefinitions(new ClassPathResource("org/springframework/webflow/config/webflow-config-namespace.xml")); - } - - public void testRegistryWithPath() { - FlowDefinitionRegistry registry = (FlowDefinitionRegistry)this.beanFactory.getBean("withPath"); - assertEquals("Incorrect number of flows loaded", 1, registry.getFlowDefinitionCount()); - } - - public void testRegistryWithoutPath() { - FlowDefinitionRegistry registry = (FlowDefinitionRegistry)this.beanFactory.getBean("withoutPath"); - assertEquals("Incorrect number of flows loaded", 0, registry.getFlowDefinitionCount()); - } - - public void testRegistryWithPathWithWildcards() { - FlowDefinitionRegistry registry = (FlowDefinitionRegistry)this.beanFactory.getBean("withPathWithWildcards"); - assertEquals("Incorrect number of flows loaded", 0, registry.getFlowDefinitionCount()); - } - - public void testDefaultExecutor() { - FlowExecutorImpl flowExecutor = (FlowExecutorImpl)this.beanFactory.getBean("defaultExecutor"); - assertTrue(flowExecutor.getExecutionRepository() instanceof ContinuationFlowExecutionRepository); - assertSame(this.beanFactory.getBean("withPathWithWildcards"), flowExecutor.getDefinitionLocator()); - AttributeMap attribs = ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionAttributes(); - assertEquals(1, attribs.size()); // defaults have been applied - assertEquals(new Boolean(true), attribs.get(ApplicationViewSelector.ALWAYS_REDIRECT_ON_PAUSE_ATTRIBUTE)); - } - - public void testSimpleExecutor() { - FlowExecutorImpl flowExecutor = (FlowExecutorImpl)this.beanFactory.getBean("simpleExecutor"); - assertSame(this.beanFactory.getBean("withPathWithWildcards"), flowExecutor.getDefinitionLocator()); - assertTrue(flowExecutor.getExecutionRepository() instanceof SimpleFlowExecutionRepository); - assertTrue(((SimpleFlowExecutionRepository)flowExecutor.getExecutionRepository()).isAlwaysGenerateNewNextKey()); - AttributeMap attribs = ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionAttributes(); - assertEquals(3, attribs.size()); - assertEquals(new Boolean(true), attribs.get(ApplicationViewSelector.ALWAYS_REDIRECT_ON_PAUSE_ATTRIBUTE)); - assertEquals("test", attribs.get("test")); - assertEquals(new Integer(1), attribs.get("test1")); - assertSame(StaticFlowExecutionListenerLoader.EMPTY_INSTANCE, - ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionListenerLoader()); - } - - public void testContinuationExecutor() { - FlowExecutorImpl flowExecutor = (FlowExecutorImpl)this.beanFactory.getBean("continuationExecutor"); - assertSame(this.beanFactory.getBean("withPathWithWildcards"), flowExecutor.getDefinitionLocator()); - assertTrue(flowExecutor.getExecutionRepository() instanceof ContinuationFlowExecutionRepository); - AttributeMap attribs = ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionAttributes(); - assertEquals(1, attribs.size()); - assertEquals(new Boolean(false), attribs.get(ApplicationViewSelector.ALWAYS_REDIRECT_ON_PAUSE_ATTRIBUTE)); - ConditionalFlowExecutionListenerLoader ll = (ConditionalFlowExecutionListenerLoader) - ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionListenerLoader(); - assertEquals(1, ll.getListeners(new Flow("test")).length); - assertSame(this.beanFactory.getBean("listener1"), ll.getListeners(new Flow("test"))[0]); - } - - public void testClientExecutor() { - FlowExecutorImpl flowExecutor = (FlowExecutorImpl)this.beanFactory.getBean("clientExecutor"); - assertSame(this.beanFactory.getBean("withPathWithWildcards"), flowExecutor.getDefinitionLocator()); - assertTrue(flowExecutor.getExecutionRepository() instanceof ClientContinuationFlowExecutionRepository); - AttributeMap attribs = ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionAttributes(); - assertEquals(1, attribs.size()); - assertEquals(new Boolean(true), attribs.get(ApplicationViewSelector.ALWAYS_REDIRECT_ON_PAUSE_ATTRIBUTE)); - ConditionalFlowExecutionListenerLoader ll = (ConditionalFlowExecutionListenerLoader) - ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionListenerLoader(); - assertEquals(2, ll.getListeners(new Flow("flow1")).length); - assertSame(this.beanFactory.getBean("listener1"), ll.getListeners(new Flow("flow1"))[0]); - assertSame(this.beanFactory.getBean("listener2"), ll.getListeners(new Flow("flow1"))[1]); - assertEquals(1, ll.getListeners(new Flow("flow2")).length); - assertSame(this.beanFactory.getBean("listener2"), ll.getListeners(new Flow("flow2"))[0]); - assertEquals(1, ll.getListeners(new Flow("flow3")).length); - assertSame(this.beanFactory.getBean("listener2"), ll.getListeners(new Flow("flow3"))[0]); - } - - public void testSingleKeyExecutor() { - FlowExecutorImpl flowExecutor = (FlowExecutorImpl)this.beanFactory.getBean("singleKeyExecutor"); - assertSame(this.beanFactory.getBean("withPathWithWildcards"), flowExecutor.getDefinitionLocator()); - assertTrue(flowExecutor.getExecutionRepository() instanceof SimpleFlowExecutionRepository); - assertFalse(((SimpleFlowExecutionRepository)flowExecutor.getExecutionRepository()).isAlwaysGenerateNewNextKey()); - AttributeMap attribs = ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionAttributes(); - assertEquals(1, attribs.size()); - assertEquals(new Boolean(true), attribs.get(ApplicationViewSelector.ALWAYS_REDIRECT_ON_PAUSE_ATTRIBUTE)); - assertSame(StaticFlowExecutionListenerLoader.EMPTY_INSTANCE, - ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionListenerLoader()); - } - - public void testDuplicateRepositoryType() { - DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); - XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory); - try { - reader.loadBeanDefinitions(new ClassPathResource("org/springframework/webflow/config/namespace-error-1.xml")); - fail("Should have thrown an BeanDefinitionStoreException exception"); - } catch (BeanDefinitionStoreException e) { - assertTrue("The nested exception should be an IllegalArgumentException", e.getCause() instanceof IllegalArgumentException); - } - } - - public void testConversationManagerRef() { - DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); - XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory); - try { - reader.loadBeanDefinitions(new ClassPathResource("org/springframework/webflow/config/namespace-error-2.xml")); - fail("Should have thrown a BeanDefinitionStoreException exception"); - } catch (BeanDefinitionStoreException e) { - assertTrue("The nested exception should be an IllegalArgumentException", e.getCause() instanceof IllegalArgumentException); - } - } - - public void testMaxContinuation() { - DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); - XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory); - try { - reader.loadBeanDefinitions(new ClassPathResource("org/springframework/webflow/config/namespace-error-3.xml")); - fail("Should have thrown a BeanDefinitionStoreException exception"); - } catch (BeanDefinitionStoreException e) { - assertTrue("The nested exception should be an IllegalArgumentException", e.getCause() instanceof IllegalArgumentException); - } - } - - public void testContinuationExtended() { - FlowExecutorImpl flowExecutor = (FlowExecutorImpl) this.beanFactory.getBean("continuationExtended"); - assertTrue("Repository type should be ContinuationFlowExecutionRepository", flowExecutor.getExecutionRepository() instanceof ContinuationFlowExecutionRepository); - } - - public void testClientExtended() { - FlowExecutorImpl flowExecutor = (FlowExecutorImpl) this.beanFactory.getBean("clientExtended"); - assertTrue("Repository type should be ClientContinuationFlowExecutionRepository", flowExecutor.getExecutionRepository() instanceof ClientContinuationFlowExecutionRepository); - } - - public void testSimpleExtended() { - FlowExecutorImpl flowExecutor = (FlowExecutorImpl) this.beanFactory.getBean("simpleExtended"); - assertTrue("Repository type should be SimpleFlowExecutionRepository", flowExecutor.getExecutionRepository() instanceof SimpleFlowExecutionRepository); - } - - public void testSinglekeyExtended() { - FlowExecutorImpl flowExecutor = (FlowExecutorImpl) this.beanFactory.getBean("singlekeyExtended"); - assertTrue("Repository type should be SimpleFlowExecutionRepository", flowExecutor.getExecutionRepository() instanceof SimpleFlowExecutionRepository); - } - - public void testConversationManagerExtended() { - FlowExecutorImpl flowExecutor = (FlowExecutorImpl) this.beanFactory.getBean("conversationManagerExtended"); - assertTrue("Repository type should be SimpleFlowExecutionRepository", flowExecutor.getExecutionRepository() instanceof SimpleFlowExecutionRepository); - AbstractConversationFlowExecutionRepository repository = (AbstractConversationFlowExecutionRepository) flowExecutor.getExecutionRepository(); - ConversationManager conversationManager = (ConversationManager) this.beanFactory.getBean("conversationManager"); - assertSame("The conversation manager in the repository should be the one explicitly wired", conversationManager, repository.getConversationManager()); - } - +/* + * Copyright 2004-2007 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.webflow.config; + +import junit.framework.TestCase; + +import org.springframework.beans.factory.parsing.Problem; +import org.springframework.beans.factory.parsing.ProblemReporter; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; +import org.springframework.core.io.ClassPathResource; +import org.springframework.webflow.conversation.ConversationManager; +import org.springframework.webflow.core.collection.AttributeMap; +import org.springframework.webflow.definition.registry.FlowDefinitionRegistry; +import org.springframework.webflow.engine.Flow; +import org.springframework.webflow.engine.impl.FlowExecutionImplFactory; +import org.springframework.webflow.engine.support.ApplicationViewSelector; +import org.springframework.webflow.execution.factory.ConditionalFlowExecutionListenerLoader; +import org.springframework.webflow.execution.factory.StaticFlowExecutionListenerLoader; +import org.springframework.webflow.execution.repository.continuation.ClientContinuationFlowExecutionRepository; +import org.springframework.webflow.execution.repository.continuation.ContinuationFlowExecutionRepository; +import org.springframework.webflow.execution.repository.support.AbstractConversationFlowExecutionRepository; +import org.springframework.webflow.execution.repository.support.SimpleFlowExecutionRepository; +import org.springframework.webflow.executor.FlowExecutorImpl; + +/** + * Unit tests for the WebFlowConfigNamespaceHandler and its BeanDefinitionParsers. + * + * @author Ben Hale + * @author Erwin Vervaet + * @author Christian Dupuis + */ +public class WebFlowConfigNamespaceHandlerTests extends TestCase { + + private DefaultListableBeanFactory beanFactory; + + protected void setUp() throws Exception { + super.setUp(); + this.beanFactory = new DefaultListableBeanFactory(); + XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this.beanFactory); + reader.loadBeanDefinitions(new ClassPathResource("org/springframework/webflow/config/webflow-config-namespace.xml")); + } + + public void testRegistryWithPath() { + FlowDefinitionRegistry registry = (FlowDefinitionRegistry)this.beanFactory.getBean("withPath"); + assertEquals("Incorrect number of flows loaded", 1, registry.getFlowDefinitionCount()); + } + + public void testRegistryWithoutPath() { + FlowDefinitionRegistry registry = (FlowDefinitionRegistry)this.beanFactory.getBean("withoutPath"); + assertEquals("Incorrect number of flows loaded", 0, registry.getFlowDefinitionCount()); + } + + public void testRegistryWithPathWithWildcards() { + FlowDefinitionRegistry registry = (FlowDefinitionRegistry)this.beanFactory.getBean("withPathWithWildcards"); + assertEquals("Incorrect number of flows loaded", 0, registry.getFlowDefinitionCount()); + } + + public void testDefaultExecutor() { + FlowExecutorImpl flowExecutor = (FlowExecutorImpl)this.beanFactory.getBean("defaultExecutor"); + assertTrue(flowExecutor.getExecutionRepository() instanceof ContinuationFlowExecutionRepository); + assertSame(this.beanFactory.getBean("withPathWithWildcards"), flowExecutor.getDefinitionLocator()); + AttributeMap attribs = ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionAttributes(); + assertEquals(1, attribs.size()); // defaults have been applied + assertEquals(new Boolean(true), attribs.get(ApplicationViewSelector.ALWAYS_REDIRECT_ON_PAUSE_ATTRIBUTE)); + } + + public void testSimpleExecutor() { + FlowExecutorImpl flowExecutor = (FlowExecutorImpl)this.beanFactory.getBean("simpleExecutor"); + assertSame(this.beanFactory.getBean("withPathWithWildcards"), flowExecutor.getDefinitionLocator()); + assertTrue(flowExecutor.getExecutionRepository() instanceof SimpleFlowExecutionRepository); + assertTrue(((SimpleFlowExecutionRepository)flowExecutor.getExecutionRepository()).isAlwaysGenerateNewNextKey()); + AttributeMap attribs = ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionAttributes(); + assertEquals(3, attribs.size()); + assertEquals(new Boolean(true), attribs.get(ApplicationViewSelector.ALWAYS_REDIRECT_ON_PAUSE_ATTRIBUTE)); + assertEquals("test", attribs.get("test")); + assertEquals(new Integer(1), attribs.get("test1")); + assertSame(StaticFlowExecutionListenerLoader.EMPTY_INSTANCE, + ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionListenerLoader()); + } + + public void testContinuationExecutor() { + FlowExecutorImpl flowExecutor = (FlowExecutorImpl)this.beanFactory.getBean("continuationExecutor"); + assertSame(this.beanFactory.getBean("withPathWithWildcards"), flowExecutor.getDefinitionLocator()); + assertTrue(flowExecutor.getExecutionRepository() instanceof ContinuationFlowExecutionRepository); + AttributeMap attribs = ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionAttributes(); + assertEquals(1, attribs.size()); + assertEquals(new Boolean(false), attribs.get(ApplicationViewSelector.ALWAYS_REDIRECT_ON_PAUSE_ATTRIBUTE)); + ConditionalFlowExecutionListenerLoader ll = (ConditionalFlowExecutionListenerLoader) + ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionListenerLoader(); + assertEquals(1, ll.getListeners(new Flow("test")).length); + assertSame(this.beanFactory.getBean("listener1"), ll.getListeners(new Flow("test"))[0]); + } + + public void testClientExecutor() { + FlowExecutorImpl flowExecutor = (FlowExecutorImpl)this.beanFactory.getBean("clientExecutor"); + assertSame(this.beanFactory.getBean("withPathWithWildcards"), flowExecutor.getDefinitionLocator()); + assertTrue(flowExecutor.getExecutionRepository() instanceof ClientContinuationFlowExecutionRepository); + AttributeMap attribs = ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionAttributes(); + assertEquals(1, attribs.size()); + assertEquals(new Boolean(true), attribs.get(ApplicationViewSelector.ALWAYS_REDIRECT_ON_PAUSE_ATTRIBUTE)); + ConditionalFlowExecutionListenerLoader ll = (ConditionalFlowExecutionListenerLoader) + ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionListenerLoader(); + assertEquals(2, ll.getListeners(new Flow("flow1")).length); + assertSame(this.beanFactory.getBean("listener1"), ll.getListeners(new Flow("flow1"))[0]); + assertSame(this.beanFactory.getBean("listener2"), ll.getListeners(new Flow("flow1"))[1]); + assertEquals(1, ll.getListeners(new Flow("flow2")).length); + assertSame(this.beanFactory.getBean("listener2"), ll.getListeners(new Flow("flow2"))[0]); + assertEquals(1, ll.getListeners(new Flow("flow3")).length); + assertSame(this.beanFactory.getBean("listener2"), ll.getListeners(new Flow("flow3"))[0]); + } + + public void testSingleKeyExecutor() { + FlowExecutorImpl flowExecutor = (FlowExecutorImpl)this.beanFactory.getBean("singleKeyExecutor"); + assertSame(this.beanFactory.getBean("withPathWithWildcards"), flowExecutor.getDefinitionLocator()); + assertTrue(flowExecutor.getExecutionRepository() instanceof SimpleFlowExecutionRepository); + assertFalse(((SimpleFlowExecutionRepository)flowExecutor.getExecutionRepository()).isAlwaysGenerateNewNextKey()); + AttributeMap attribs = ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionAttributes(); + assertEquals(1, attribs.size()); + assertEquals(new Boolean(true), attribs.get(ApplicationViewSelector.ALWAYS_REDIRECT_ON_PAUSE_ATTRIBUTE)); + assertSame(StaticFlowExecutionListenerLoader.EMPTY_INSTANCE, + ((FlowExecutionImplFactory)flowExecutor.getExecutionFactory()).getExecutionListenerLoader()); + } + + public void testDuplicateRepositoryType() { + DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); + XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory); + DefaultProblemReporter problemReporter = new DefaultProblemReporter(); + reader.setProblemReporter(problemReporter); + reader.loadBeanDefinitions(new ClassPathResource("org/springframework/webflow/config/namespace-error-1.xml")); + assertNotNull("Should have created an error", problemReporter.getLastProblem()); + assertTrue(problemReporter.getLastProblem().getMessage().contains("repositoryType")); + } + + public void testConversationManagerRef() { + DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); + XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory); + DefaultProblemReporter problemReporter = new DefaultProblemReporter(); + reader.setProblemReporter(problemReporter); + reader.loadBeanDefinitions(new ClassPathResource("org/springframework/webflow/config/namespace-error-2.xml")); + assertNotNull("Should have created an error", problemReporter.getLastProblem()); + assertTrue(problemReporter.getLastProblem().getMessage().contains("conversation")); + } + + public void testMaxContinuation() { + DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); + XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory); + DefaultProblemReporter problemReporter = new DefaultProblemReporter(); + reader.setProblemReporter(problemReporter); + reader.loadBeanDefinitions(new ClassPathResource("org/springframework/webflow/config/namespace-error-3.xml")); + assertNotNull("Should have created an error", problemReporter.getLastProblem()); + assertTrue(problemReporter.getLastProblem().getMessage().contains("continuation")); + } + + public void testContinuationExtended() { + FlowExecutorImpl flowExecutor = (FlowExecutorImpl) this.beanFactory.getBean("continuationExtended"); + assertTrue("Repository type should be ContinuationFlowExecutionRepository", flowExecutor.getExecutionRepository() instanceof ContinuationFlowExecutionRepository); + } + + public void testClientExtended() { + FlowExecutorImpl flowExecutor = (FlowExecutorImpl) this.beanFactory.getBean("clientExtended"); + assertTrue("Repository type should be ClientContinuationFlowExecutionRepository", flowExecutor.getExecutionRepository() instanceof ClientContinuationFlowExecutionRepository); + } + + public void testSimpleExtended() { + FlowExecutorImpl flowExecutor = (FlowExecutorImpl) this.beanFactory.getBean("simpleExtended"); + assertTrue("Repository type should be SimpleFlowExecutionRepository", flowExecutor.getExecutionRepository() instanceof SimpleFlowExecutionRepository); + } + + public void testSinglekeyExtended() { + FlowExecutorImpl flowExecutor = (FlowExecutorImpl) this.beanFactory.getBean("singlekeyExtended"); + assertTrue("Repository type should be SimpleFlowExecutionRepository", flowExecutor.getExecutionRepository() instanceof SimpleFlowExecutionRepository); + } + + public void testConversationManagerExtended() { + FlowExecutorImpl flowExecutor = (FlowExecutorImpl) this.beanFactory.getBean("conversationManagerExtended"); + assertTrue("Repository type should be SimpleFlowExecutionRepository", flowExecutor.getExecutionRepository() instanceof SimpleFlowExecutionRepository); + AbstractConversationFlowExecutionRepository repository = (AbstractConversationFlowExecutionRepository) flowExecutor.getExecutionRepository(); + ConversationManager conversationManager = (ConversationManager) this.beanFactory.getBean("conversationManager"); + assertSame("The conversation manager in the repository should be the one explicitly wired", conversationManager, repository.getConversationManager()); + } + + /** + * {@link ProblemReporter} implementation that simply stores the last reported error + */ + static class DefaultProblemReporter implements ProblemReporter { + + private Problem problem; + + public Problem getLastProblem() { + return this.problem; + } + + public void error(Problem problem) { + this.problem = problem; + } + + public void fatal(Problem problem) { + this.problem = problem; + + } + + public void warning(Problem problem) { + this.problem = problem; + } + } + } \ No newline at end of file