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