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.junit.Test;
013 import org.picocontainer.DefaultPicoContainer;
014 import org.picocontainer.MutablePicoContainer;
015 import org.picocontainer.Parameter;
016 import org.picocontainer.annotations.Inject;
017 import org.picocontainer.monitors.NullComponentMonitor;
018
019 import java.lang.annotation.ElementType;
020 import java.lang.annotation.Retention;
021 import java.lang.annotation.RetentionPolicy;
022 import java.lang.annotation.Target;
023
024 import static org.junit.Assert.assertNotNull;
025
026 public class AnnotatedMethodInjectorTestCase {
027
028 public static class AnnotatedBurp {
029
030 private Wind wind;
031
032 @Inject
033 public void windyWind(Wind wind) {
034 this.wind = wind;
035 }
036 }
037
038 public static class SetterBurp {
039
040 private Wind wind;
041
042 public void setWind(Wind wind) {
043 this.wind = wind;
044 }
045 }
046
047 public static class Wind {
048 }
049
050 @Test public void testSetterMethodInjectionToContrastWithThatBelow() {
051
052 MutablePicoContainer pico = new DefaultPicoContainer();
053 pico.addAdapter(new SetterInjector(SetterBurp.class, SetterBurp.class, Parameter.DEFAULT, new NullComponentMonitor(),
054 "set", "", false, false));
055 pico.addComponent(Wind.class, new Wind());
056 SetterBurp burp = pico.getComponent(SetterBurp.class);
057 assertNotNull(burp);
058 assertNotNull(burp.wind);
059 }
060
061 @Test public void testNonSetterMethodInjection() {
062 MutablePicoContainer pico = new DefaultPicoContainer();
063 pico.addAdapter(new AnnotatedMethodInjector(AnnotatedBurp.class, AnnotatedBurp.class, Parameter.DEFAULT,
064 new NullComponentMonitor(),
065 Inject.class, false));
066 pico.addComponent(Wind.class, new Wind());
067 AnnotatedBurp burp = pico.getComponent(AnnotatedBurp.class);
068 assertNotNull(burp);
069 assertNotNull(burp.wind);
070 }
071
072 @Retention(RetentionPolicy.RUNTIME)
073 @Target(value={ ElementType.METHOD, ElementType.FIELD})
074 public @interface AlternativeInject {
075 }
076
077 public static class AnotherAnnotatedBurp {
078 private Wind wind;
079 @AlternativeInject
080 public void windyWind(Wind wind) {
081 this.wind = wind;
082 }
083 }
084
085
086 @Test public void testNonSetterMethodInjectionWithAlternativeAnnotation() {
087 MutablePicoContainer pico = new DefaultPicoContainer();
088 pico.addAdapter(new AnnotatedMethodInjector(AnotherAnnotatedBurp.class, AnotherAnnotatedBurp.class, Parameter.DEFAULT,
089 new NullComponentMonitor(),
090 AlternativeInject.class, false));
091 pico.addComponent(Wind.class, new Wind());
092 AnotherAnnotatedBurp burp = pico.getComponent(AnotherAnnotatedBurp.class);
093 assertNotNull(burp);
094 assertNotNull(burp.wind);
095 }
096
097
098 }