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 the committers                                           *
009     *****************************************************************************/
010    
011    package org.picocontainer.alternatives;
012    
013    import java.util.ArrayList;
014    import java.util.Iterator;
015    import java.util.List;
016    
017    import org.picocontainer.MutablePicoContainer;
018    import org.picocontainer.PicoContainer;
019    import org.picocontainer.alternatives.ImmutablePicoContainerTestCase.UnsatisfiableIterator;
020    import org.picocontainer.defaults.ConstructorInjectionComponentAdapterFactory;
021    import org.picocontainer.defaults.DefaultPicoContainer;
022    import org.picocontainer.tck.AbstractPicoContainerTestCase;
023    
024    /**
025     * @author Paul Hammant
026     * @version $Revision: 3140 $
027     */
028    public class CachingPicoContainerTestCase extends AbstractPicoContainerTestCase {
029    
030        protected MutablePicoContainer createImplementationHidingPicoContainer() {
031            return new CachingPicoContainer();
032        }
033    
034        protected MutablePicoContainer createPicoContainer(PicoContainer parent) {
035            return new CachingPicoContainer(parent);
036        }
037    
038        public void testUsageOfADifferentComponentAdapterFactory() {
039            // Jira bug 212 - logical opposite
040            MutablePicoContainer parent = new DefaultPicoContainer();
041            CachingPicoContainer pico = new CachingPicoContainer(new ConstructorInjectionComponentAdapterFactory(), parent);
042            pico.registerComponentImplementation(List.class, ArrayList.class);
043            List list1 = (List) pico.getComponentInstanceOfType(List.class);
044            List list2 = (List) pico.getComponentInstanceOfType(List.class);
045            assertNotNull(list1);
046            assertNotNull(list2);
047            assertTrue(list1 == list2);
048        }
049    
050    
051        public void testComponentAdaptersListsAreNotCached() {
052            MutablePicoContainer parent = new DefaultPicoContainer();
053            CachingPicoContainer pico = new CachingPicoContainer(new ConstructorInjectionComponentAdapterFactory(), parent);
054            pico.registerComponentImplementation(List.class, ArrayList.class);
055            List list1 = (List) pico.getComponentAdaptersOfType(List.class);
056            List list2 = (List) pico.getComponentAdaptersOfType(List.class);
057            assertNotNull(list1);
058            assertNotNull(list2);
059            assertTrue(list1 != list2);
060        }    
061        
062    
063        public void testDelegationOfVerify() {        
064            DefaultPicoContainer mpc = new DefaultPicoContainer();
065            mpc.registerComponentImplementation(Iterator.class, UnsatisfiableIterator.class);
066            CachingPicoContainer pico = new CachingPicoContainer(mpc);
067            pico.verify();
068    
069        }
070        
071    }