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 import org.picocontainer.tck.AbstractComponentFactoryTestCase;
013 import org.picocontainer.testmodel.SimpleTouchable;
014 import org.picocontainer.testmodel.Touchable;
015 import org.picocontainer.injectors.ConstructorInjectionFactory;
016 import org.picocontainer.behaviors.OptInCachingBehaviorFactory;
017 import org.picocontainer.DefaultPicoContainer;
018 import org.picocontainer.ComponentFactory;
019 import org.picocontainer.Characteristics;
020
021 import java.util.Map;
022 import java.util.HashMap;
023
024 /**
025 * @author <a href="Rafal.Krzewski">rafal@caltha.pl</a>
026 * @version $Revision: 3660 $
027 */
028 public class OptInCachingBehaviorFactoryTestCase extends AbstractComponentFactoryTestCase {
029 protected void setUp() throws Exception {
030 picoContainer = new DefaultPicoContainer(createComponentFactory());
031 }
032
033 protected ComponentFactory createComponentFactory() {
034 return new OptInCachingBehaviorFactory().forThis(new ConstructorInjectionFactory());
035 }
036
037 public void testContainerReturnsSameInstanceEachCall() {
038 picoContainer.addComponent(Touchable.class, SimpleTouchable.class);
039 Touchable t1 = picoContainer.getComponent(Touchable.class);
040 Touchable t2 = picoContainer.getComponent(Touchable.class);
041 assertNotSame(t1, t2);
042 }
043
044 public void testContainerCanFollowNOCACHEDirectiveSelectively() {
045 picoContainer.addComponent(Touchable.class, SimpleTouchable.class);
046 picoContainer.change(Characteristics.CACHE);
047 picoContainer.addComponent(Map.class, HashMap.class);
048 assertNotSame(picoContainer.getComponent(Touchable.class), picoContainer.getComponent(Touchable.class));
049 assertSame(picoContainer.getComponent(Map.class), picoContainer.getComponent(Map.class));
050 }
051
052 public void testContainerCanFollowSINGLETONDirectiveSelectively() {
053 picoContainer.addComponent(Touchable.class, SimpleTouchable.class);
054 picoContainer.change(Characteristics.SINGLE);
055 picoContainer.addComponent(Map.class, HashMap.class);
056 assertNotSame(picoContainer.getComponent(Touchable.class), picoContainer.getComponent(Touchable.class));
057 assertSame(picoContainer.getComponent(Map.class), picoContainer.getComponent(Map.class));
058 }
059
060
061
062 }