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