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.doc.tutorial.blocks;
011    
012    import junit.framework.TestCase;
013    
014    import org.picocontainer.MutablePicoContainer;
015    import org.picocontainer.Parameter;
016    import org.picocontainer.DefaultPicoContainer;
017    import org.picocontainer.monitors.NullComponentMonitor;
018    import org.picocontainer.lifecycle.NullLifecycleStrategy;
019    import org.picocontainer.behaviors.CachingBehaviorFactory;
020    import org.picocontainer.behaviors.CachingBehavior;
021    import org.picocontainer.injectors.ConstructorInjector;
022    import org.picocontainer.adapters.InstanceAdapter;
023    import org.picocontainer.injectors.SetterInjector;
024    import org.picocontainer.injectors.SetterInjectionFactory;
025    import org.picocontainer.behaviors.SynchronizedBehavior;
026    import org.picocontainer.behaviors.SynchronizedBehaviorFactory;
027    import org.picocontainer.doc.introduction.Apple;
028    import org.picocontainer.doc.introduction.Juicer;
029    import org.picocontainer.doc.introduction.Peeler;
030    
031    
032    /**
033     * Test case for the snippets used in "Component Adapters and Factories"
034     * 
035     * @author Jörg Schaible
036     */
037    public class BuildingBlocksTestCase extends TestCase {
038        public void testRegisterConvenient() {
039            // START SNIPPET: register-convenient
040            MutablePicoContainer picoContainer = new DefaultPicoContainer();
041            picoContainer.addComponent(Juicer.class);
042            picoContainer.addComponent("My Peeler", Peeler.class);
043            picoContainer.addComponent(new Apple());
044            // END SNIPPET: register-convenient
045            // START SNIPPET: register-direct
046            picoContainer.addAdapter(new InstanceAdapter("Another Apple", new Apple(), new NullLifecycleStrategy(),
047                                                                            new NullComponentMonitor()));
048            // END SNIPPET: register-direct
049        }
050    
051        public void testRegisterEquivalentConvenient() {
052            MutablePicoContainer picoContainer = new DefaultPicoContainer();
053            // START SNIPPET: register-equivalent-convenient
054            picoContainer.addComponent(Juicer.class);
055            // END SNIPPET: register-equivalent-convenient
056        }
057    
058        public void testRegisterEquivalentAtLength() {
059            MutablePicoContainer picoContainer = new DefaultPicoContainer();
060            // START SNIPPET: register-equivalent-at-length
061            picoContainer.addAdapter(
062                    new CachingBehavior(
063                            new ConstructorInjector(Juicer.class, Juicer.class, null, new NullComponentMonitor(), new NullLifecycleStrategy())));
064            // END SNIPPET: register-equivalent-at-length
065        }
066    
067        public void testRegisterDifferentComponentAdapterFactory() {
068    
069            // START SNIPPET: register-different-componentFactory
070            MutablePicoContainer picoContainer = new DefaultPicoContainer(
071                    new SynchronizedBehaviorFactory().forThis(new CachingBehaviorFactory().forThis(new SetterInjectionFactory())));
072            // END SNIPPET: register-different-componentFactory
073        }
074    
075        public void testRegisterEquivalentAtLength2() {
076            MutablePicoContainer picoContainer = new DefaultPicoContainer();
077            // START SNIPPET: register-equivalent-at-length2
078            picoContainer.addAdapter(
079                    new SynchronizedBehavior(
080                            new CachingBehavior(
081                                    new SetterInjector(
082                                            JuicerBean.class, JuicerBean.class, (Parameter[])null, new NullComponentMonitor(), new NullLifecycleStrategy()))));
083            // END SNIPPET: register-equivalent-at-length2
084        }
085    }