001    package org.picocontainer.doc.caching;
002    
003    import junit.framework.TestCase;
004    import org.picocontainer.alternatives.CachingPicoContainer;
005    import org.picocontainer.alternatives.ImplementationHidingCachingPicoContainer;
006    import org.picocontainer.defaults.DefaultPicoContainer;
007    import org.picocontainer.defaults.ConstructorInjectionComponentAdapterFactory;
008    import org.picocontainer.defaults.CachingComponentAdapter;
009    import org.picocontainer.defaults.CachingComponentAdapterFactory;
010    
011    import java.util.List;
012    import java.util.ArrayList;
013    
014    /**
015     * Created by IntelliJ IDEA.
016     * User: paul
017     * Date: Aug 27, 2005
018     * Time: 9:46:23 AM
019     * To change this template use File | Settings | File Templates.
020     */
021    public class BasicCachingExampleTestCase extends TestCase {
022    
023        public void testCachingContainerCaches() {
024    
025            // START SNIPPET: caching
026            CachingPicoContainer pico = new CachingPicoContainer();
027            pico.registerComponentImplementation(List.class, ArrayList.class);
028            // other resitrations
029    
030            Object one = pico.getComponentInstanceOfType(List.class);
031            Object two = pico.getComponentInstanceOfType(List.class);
032    
033            assertSame("instances should be the same", one, two);
034            // END SNIPPET: caching
035    
036        }
037    
038        public void testCachingContainerWithCAFStillCaches() {
039    
040            // START SNIPPET: caching2
041            CachingPicoContainer pico = new CachingPicoContainer(new ConstructorInjectionComponentAdapterFactory());
042            pico.registerComponentImplementation(List.class, ArrayList.class);
043            // other resitrations
044    
045            Object one = pico.getComponentInstanceOfType(List.class);
046            Object two = pico.getComponentInstanceOfType(List.class);
047    
048            assertSame("instances should be the same", one, two);
049            // END SNIPPET: caching2
050    
051        }
052    
053        public void testDefaulCaching() {
054            // START SNIPPET: default
055            DefaultPicoContainer pico = new DefaultPicoContainer();
056            pico.registerComponentImplementation(List.class, ArrayList.class);
057            // other resitrations
058    
059            Object one = pico.getComponentInstanceOfType(List.class);
060            Object two = pico.getComponentInstanceOfType(List.class);
061    
062            assertSame("instances should be the same by default", one, two);
063            // END SNIPPET: default
064    
065        }
066    
067        public void testDefaulCachingtheHardWay() {
068            // START SNIPPET: default2
069            DefaultPicoContainer pico = new DefaultPicoContainer(
070                            new CachingComponentAdapterFactory(new ConstructorInjectionComponentAdapterFactory()));
071            pico.registerComponentImplementation(List.class, ArrayList.class);
072            // other resitrations
073    
074            Object one = pico.getComponentInstanceOfType(List.class);
075            Object two = pico.getComponentInstanceOfType(List.class);
076    
077            assertSame("instances should be the same", one, two);
078            // END SNIPPET: default2
079    
080        }
081    
082        public void testDefaultWithCAFNonCaching() {
083    
084            // START SNIPPET: default-noncaching
085            DefaultPicoContainer pico = new DefaultPicoContainer(new ConstructorInjectionComponentAdapterFactory());
086            pico.registerComponentImplementation(List.class, ArrayList.class);
087            // other resitrations
088    
089            Object one = pico.getComponentInstanceOfType(List.class);
090            Object two = pico.getComponentInstanceOfType(List.class);
091    
092            assertNotSame("instances should NOT be the same", one, two);
093            // END SNIPPET: default-noncaching
094    
095        }
096    
097        public void testImplementationHidingCaching() {
098    
099            // START SNIPPET: implhiding
100            ImplementationHidingCachingPicoContainer pico = new ImplementationHidingCachingPicoContainer();
101            pico.registerComponentImplementation(List.class, ArrayList.class);
102            // other resitrations
103    
104            Object one = pico.getComponentInstanceOfType(List.class);
105            Object two = pico.getComponentInstanceOfType(List.class);
106    
107            assertSame("instances should be the same", one, two);
108    
109            assertTrue("should not be castable back to implementation",
110                            (one instanceof ArrayList) == false);
111            // END SNIPPET: implhiding
112    
113        }
114    
115        public void testFlushingOfCache() {
116            // START SNIPPET: caching
117            CachingPicoContainer pico = new CachingPicoContainer();
118            CachingComponentAdapter cca = (CachingComponentAdapter) pico.registerComponentImplementation(List.class, ArrayList.class);
119            // other resitrations
120    
121            Object one = pico.getComponentInstanceOfType(List.class);
122            cca.flush();
123            Object two = pico.getComponentInstanceOfType(List.class);
124    
125            assertNotSame("instances should NOT be the same", one, two);
126            // END SNIPPET: caching
127    
128        }
129    
130    
131    }