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 }