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 }