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    }