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.injectors;
011    
012    import org.picocontainer.DefaultPicoContainer;
013    import org.picocontainer.PicoBuilder;
014    import org.picocontainer.MutablePicoContainer;
015    import org.picocontainer.Characteristics;
016    import org.picocontainer.lifecycle.NullLifecycleStrategy;
017    import org.picocontainer.monitors.NullComponentMonitor;
018    
019    import junit.framework.TestCase;
020    
021    public class MethodInjectionTestCase extends TestCase {
022    
023        public static class Foo {
024            private Bar bar;
025            private String string;
026    
027            public void inject(Bar bar, String string) {
028                this.bar = bar;
029                this.string = string;
030            }
031        }
032    
033        public static class Bar {
034        }
035    
036        public void testMethodInjection() {
037            DefaultPicoContainer pico = new DefaultPicoContainer(new MethodInjection());
038            pico.addComponent("hello");
039            pico.addComponent(Foo.class);
040            pico.addComponent(Bar.class);
041            Foo foo = pico.getComponent(Foo.class);
042            assertNotNull(foo.bar);
043            assertNotNull(foo.string);
044            assertEquals("MethodInjector-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
045        }
046    
047        public void testMethodInjectionViaCharacteristics() {
048            DefaultPicoContainer pico = new DefaultPicoContainer();
049            pico.addComponent("hello");
050            pico.as(Characteristics.METHOD_INJECTION).addComponent(Foo.class);
051            pico.addComponent(Bar.class);
052            Foo foo = pico.getComponent(Foo.class);
053            assertNotNull(foo.bar);
054            assertNotNull(foo.string);
055            assertEquals("MethodInjector-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
056        }
057    
058        public void testMethodInjectionViaAdapter() {
059            DefaultPicoContainer pico = new DefaultPicoContainer(new MethodInjection());
060            pico.addComponent("hello");
061            pico.addAdapter(new MethodInjector(Foo.class, Foo.class, null, new NullComponentMonitor(), new NullLifecycleStrategy(), "inject"));
062            pico.addComponent(Bar.class);
063            Foo foo = pico.getComponent(Foo.class);
064            assertNotNull(foo.bar);
065            assertNotNull(foo.string);
066            assertEquals("MethodInjector-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
067        }
068    
069        public void testMethodInjectionByBuilder() {
070            MutablePicoContainer pico = new PicoBuilder().withMethodInjection().build();
071            pico.addComponent("hello");
072            pico.addComponent(Foo.class);
073            pico.addComponent(Bar.class);
074            Foo foo = pico.getComponent(Foo.class);
075            assertNotNull(foo.bar);
076            assertNotNull(foo.string);
077            assertEquals("MethodInjector-class org.picocontainer.injectors.MethodInjectionTestCase$Foo", pico.getComponentAdapter(Foo.class).toString());
078        }
079    
080    }