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                                                          *
009     *****************************************************************************/
010    package org.picocontainer.behaviors;
011    
012    
013    import static org.junit.Assert.assertEquals;
014    
015    import org.junit.Test;
016    import org.picocontainer.Characteristics;
017    import org.picocontainer.ComponentAdapter;
018    import org.picocontainer.ComponentFactory;
019    import org.picocontainer.DefaultPicoContainer;
020    import org.picocontainer.adapters.InstanceAdapter;
021    import org.picocontainer.containers.EmptyPicoContainer;
022    import org.picocontainer.injectors.ConstructorInjection;
023    import org.picocontainer.injectors.ConstructorInjector;
024    import org.picocontainer.lifecycle.NullLifecycleStrategy;
025    import org.picocontainer.monitors.NullComponentMonitor;
026    import org.picocontainer.tck.AbstractComponentFactoryTest;
027    
028    
029    /**
030     * @author <a href="Rafal.Krzewski">rafal@caltha.pl</a>
031     */
032    public class CachingTestCase extends AbstractComponentFactoryTest {
033    
034        protected ComponentFactory createComponentFactory() {
035            return new Caching().wrap(new ConstructorInjection());
036        }
037    
038        @Test public void testAddComponentUsesCachingBehavior() {
039            DefaultPicoContainer pico =
040                new DefaultPicoContainer(new Caching().wrap(new ConstructorInjection()));
041            pico.addComponent("foo", String.class);
042            ComponentAdapter foo = pico.getComponentAdapter("foo");
043            assertEquals(Cached.class, foo.getClass());
044            assertEquals(ConstructorInjector.class, foo.getDelegate().getDelegate().getClass());
045        }
046    
047        @Test public void testAddComponentUsesCachingBehaviorWithRedundantCacheProperty() {
048            DefaultPicoContainer pico =
049                new DefaultPicoContainer(new Caching().wrap(new ConstructorInjection()));
050            pico.change(Characteristics.CACHE).addComponent("foo", String.class);
051            ComponentAdapter foo = pico.getComponentAdapter("foo");
052            assertEquals(Cached.class, foo.getClass());
053            assertEquals(ConstructorInjector.class, foo.getDelegate().getDelegate().getClass());
054        }
055    
056        @Test public void testAddComponentNoesNotUseCachingBehaviorWhenNoCachePropertyIsSpecified() {
057            DefaultPicoContainer pico =
058                new DefaultPicoContainer(new Caching().wrap(new ConstructorInjection()), new NullLifecycleStrategy(), new EmptyPicoContainer());
059            pico.change(Characteristics.NO_CACHE).addComponent("foo", String.class);
060            ComponentAdapter foo = pico.getComponentAdapter("foo");
061            assertEquals(ConstructorInjector.class, foo.getClass());
062        }
063    
064        @Test public void testAddAdapterUsesCachingBehavior() {
065            DefaultPicoContainer pico =
066                new DefaultPicoContainer(new Caching().wrap(new ConstructorInjection()));
067            pico.addAdapter(new InstanceAdapter("foo", "bar", new NullLifecycleStrategy(), new NullComponentMonitor()));
068            ComponentAdapter foo = pico.getComponentAdapter("foo");
069            assertEquals(Cached.class, foo.getClass());
070            assertEquals(InstanceAdapter.class, foo.getDelegate().getClass());
071        }
072    
073        @Test public void testAddAdapterUsesCachingBehaviorWithRedundantCacheProperty() {
074            DefaultPicoContainer pico =
075                new DefaultPicoContainer(new Caching().wrap(new ConstructorInjection()));
076            pico.change(Characteristics.CACHE).addAdapter(new InstanceAdapter("foo", "bar", new NullLifecycleStrategy(), new NullComponentMonitor()));
077            ComponentAdapter foo = pico.getComponentAdapter("foo");
078            assertEquals(Cached.class, foo.getClass());
079            assertEquals(InstanceAdapter.class, foo.getDelegate().getClass());
080        }
081    
082        @Test public void testAddAdapterNoesNotUseCachingBehaviorWhenNoCachePropertyIsSpecified() {
083            DefaultPicoContainer pico =
084                new DefaultPicoContainer(new Caching().wrap(new ConstructorInjection()));
085            pico.change(Characteristics.NO_CACHE).addAdapter(new InstanceAdapter("foo", "bar", new NullLifecycleStrategy(), new NullComponentMonitor()));
086            ComponentAdapter foo = pico.getComponentAdapter("foo");
087            assertEquals(InstanceAdapter.class, foo.getClass());
088        }    
089    
090    
091    }