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.List;
015    
016    import org.picocontainer.MutablePicoContainer;
017    import org.picocontainer.PicoContainer;
018    import org.picocontainer.defaults.ConstructorInjectionComponentAdapterFactory;
019    import org.picocontainer.defaults.DefaultPicoContainer;
020    import org.picocontainer.tck.AbstractImplementationHidingPicoContainerTestCase;
021    import org.picocontainer.testmodel.SimpleTouchable;
022    
023    /**
024     * @author Paul Hammant
025     * @version $Revision: 2381 $
026     */
027    public class ImplementationHidingCachingPicoContainerTestCase extends AbstractImplementationHidingPicoContainerTestCase {
028    
029        protected MutablePicoContainer createImplementationHidingPicoContainer() {
030            return new ImplementationHidingCachingPicoContainer();
031        }
032    
033        protected MutablePicoContainer createPicoContainer(PicoContainer parent) {
034            return new ImplementationHidingCachingPicoContainer(parent);
035        }
036    
037        public void testUsageOfADifferentComponentAdapterFactory() {
038            // Jira bug 212 - logical opposite
039            MutablePicoContainer parent = new DefaultPicoContainer();
040            ImplementationHidingCachingPicoContainer pico = new ImplementationHidingCachingPicoContainer(new ConstructorInjectionComponentAdapterFactory(), parent);
041            pico.registerComponentImplementation(List.class, ArrayList.class);
042            List list1 = (List) pico.getComponentInstanceOfType(List.class);
043            List list2 = (List) pico.getComponentInstanceOfType(List.class);
044            assertNotNull(list1);
045            assertNotNull(list2);
046            assertFalse(list1 instanceof ArrayList);
047            assertFalse(list2 instanceof ArrayList);
048            assertSame(list1, list2);
049        }
050    
051    
052        public void testMakeChildContainer(){
053            MutablePicoContainer parent = new ImplementationHidingCachingPicoContainer();
054            parent.registerComponentImplementation("t1", SimpleTouchable.class);
055            MutablePicoContainer child = parent.makeChildContainer();
056            Object t1 = child.getParent().getComponentInstance("t1");        
057            assertNotNull(t1);
058            assertTrue(t1 instanceof SimpleTouchable);        
059        }
060    
061    }