001 /*****************************************************************************
002 * Copyright (C) PicoContainer Organization. All rights reserved. *
003 * ------------------------------------------------------------------------- *
004 * The software in this package is published under the terms of the BSD *
005 * style license a copy of which has been included with this distribution in *
006 * the LICENSE.txt file. *
007 * *
008 * Original code by *
009 *****************************************************************************/
010 package org.picocontainer.behaviors;
011
012 import org.picocontainer.tck.AbstractComponentFactoryTestCase;
013 import org.picocontainer.testmodel.SimpleTouchable;
014 import org.picocontainer.testmodel.Touchable;
015 import org.picocontainer.behaviors.CachingBehaviorFactory;
016 import org.picocontainer.injectors.ConstructorInjectionFactory;
017 import org.picocontainer.DefaultPicoContainer;
018 import org.picocontainer.ComponentFactory;
019 import org.picocontainer.Characteristics;
020
021 import java.util.Map;
022 import java.util.HashMap;
023
024 /**
025 * @author <a href="Rafal.Krzewski">rafal@caltha.pl</a>
026 * @version $Revision: 3682 $
027 */
028 public class CachingBehaviorFactoryTestCase extends AbstractComponentFactoryTestCase {
029 protected void setUp() throws Exception {
030 picoContainer = new DefaultPicoContainer(createComponentFactory());
031 }
032
033 protected ComponentFactory createComponentFactory() {
034 return new CachingBehaviorFactory().forThis(new ConstructorInjectionFactory());
035 }
036
037 public void testContainerReturnsSameInstanceEachCall() {
038 picoContainer.addComponent(Touchable.class, SimpleTouchable.class);
039 Touchable t1 = picoContainer.getComponent(Touchable.class);
040 Touchable t2 = picoContainer.getComponent(Touchable.class);
041 assertSame(t1, t2);
042 }
043
044 public void testContainerCanFollowNOCACHEDirectiveSelectively() {
045 picoContainer.addComponent(Touchable.class, SimpleTouchable.class);
046 picoContainer.change(Characteristics.NO_CACHE);
047 picoContainer.addComponent(Map.class, HashMap.class);
048 assertSame(picoContainer.getComponent(Touchable.class), picoContainer.getComponent(Touchable.class));
049 final Map component = picoContainer.getComponent(Map.class);
050 final Map component1 = picoContainer.getComponent(Map.class);
051 assertNotSame(component, component1);
052 }
053
054 public void testContainerCachesAsAContrastToTheAbove() {
055 picoContainer.addComponent(Touchable.class, SimpleTouchable.class);
056 picoContainer.addComponent(Map.class, HashMap.class);
057 assertSame(picoContainer.getComponent(Touchable.class), picoContainer.getComponent(Touchable.class));
058 final Map component = picoContainer.getComponent(Map.class);
059 final Map component1 = picoContainer.getComponent(Map.class);
060 assertSame(component, component1);
061 }
062
063
064 }