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