/* * Copyright 2004-2012 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.definition.registry; import junit.framework.TestCase; import org.springframework.context.ApplicationContext; import org.springframework.webflow.core.collection.MutableAttributeMap; import org.springframework.webflow.definition.FlowDefinition; import org.springframework.webflow.definition.StateDefinition; /** * Unit tests for {@link FlowDefinitionRegistryImpl}. */ public class FlowDefinitionRegistryImplTests extends TestCase { private FlowDefinitionRegistryImpl registry = new FlowDefinitionRegistryImpl(); private FooFlow fooFlow; private BarFlow barFlow; protected void setUp() { fooFlow = new FooFlow(); barFlow = new BarFlow(); } public void testNoSuchFlowDefinition() { try { registry.getFlowDefinition("bogus"); fail("Should've bombed with NoSuchFlow"); } catch (NoSuchFlowDefinitionException e) { } } public void testNullFlowDefinitionId() { try { registry.getFlowDefinition(null); fail("Should have bombed with illegal argument"); } catch (IllegalArgumentException e) { } } public void testBlankFlowDefinitionId() { try { registry.getFlowDefinition(""); fail("Should have bombed with illegal argument"); } catch (IllegalArgumentException e) { } } public void testRegisterFlow() { registry.registerFlowDefinition(new StaticFlowDefinitionHolder(fooFlow)); assertTrue(registry.containsFlowDefinition("foo")); assertEquals(fooFlow, registry.getFlowDefinition("foo")); } public void testGetFlowIds() { registry.registerFlowDefinition(new StaticFlowDefinitionHolder(fooFlow)); registry.registerFlowDefinition(new StaticFlowDefinitionHolder(barFlow)); assertEquals("bar", registry.getFlowDefinitionIds()[0]); assertEquals("foo", registry.getFlowDefinitionIds()[1]); } public void testRegisterFlowSameIds() { registry.registerFlowDefinition(new StaticFlowDefinitionHolder(fooFlow)); FooFlow newFlow = new FooFlow(); registry.registerFlowDefinition(new StaticFlowDefinitionHolder(newFlow)); assertSame(newFlow, registry.getFlowDefinition("foo")); } public void testRegisterMultipleFlows() { registry.registerFlowDefinition(new StaticFlowDefinitionHolder(fooFlow)); registry.registerFlowDefinition(new StaticFlowDefinitionHolder(barFlow)); assertTrue(registry.containsFlowDefinition("foo")); assertTrue(registry.containsFlowDefinition("bar")); assertEquals(fooFlow, registry.getFlowDefinition("foo")); assertEquals(barFlow, registry.getFlowDefinition("bar")); } public void testParentHierarchy() { testRegisterMultipleFlows(); FlowDefinitionRegistryImpl child = new FlowDefinitionRegistryImpl(); child.setParent(registry); FooFlow fooFlow = new FooFlow(); child.registerFlowDefinition(new StaticFlowDefinitionHolder(fooFlow)); assertTrue(child.containsFlowDefinition("foo")); assertTrue(child.containsFlowDefinition("bar")); assertSame(fooFlow, child.getFlowDefinition("foo")); assertEquals(barFlow, child.getFlowDefinition("bar")); } public void testDestroy() { registry.registerFlowDefinition(new StaticFlowDefinitionHolder(fooFlow)); registry.registerFlowDefinition(new StaticFlowDefinitionHolder(barFlow)); assertEquals(fooFlow, registry.getFlowDefinition("foo")); assertEquals(barFlow, registry.getFlowDefinition("bar")); assertFalse(fooFlow.destroyed); assertFalse(barFlow.destroyed); registry.destroy(); assertTrue(fooFlow.destroyed); assertTrue(barFlow.destroyed); } private static class FooFlow implements FlowDefinition { private String id = "foo"; private boolean destroyed; public MutableAttributeMap<Object> getAttributes() { return null; } public String getCaption() { return null; } public String getDescription() { return null; } public String getId() { return id; } public StateDefinition getStartState() { return null; } public StateDefinition getState(String id) throws IllegalArgumentException { return null; } public String[] getPossibleOutcomes() { return null; } public ClassLoader getClassLoader() { return null; } public ApplicationContext getApplicationContext() { return null; } public boolean inDevelopment() { return false; } public void destroy() { destroyed = true; } } private static class BarFlow implements FlowDefinition { private String id = "bar"; private boolean destroyed; public MutableAttributeMap<Object> getAttributes() { return null; } public String getCaption() { return null; } public String getDescription() { return null; } public String getId() { return id; } public StateDefinition getStartState() { return null; } public StateDefinition getState(String id) throws IllegalArgumentException { return null; } public String[] getPossibleOutcomes() { return null; } public ClassLoader getClassLoader() { return null; } public ApplicationContext getApplicationContext() { return null; } public boolean inDevelopment() { return false; } public void destroy() { destroyed = true; } } }