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 }