001    package org.picocontainer.defaults.issues;
002    
003    import org.junit.Test;import static org.junit.Assert.assertFalse;import static org.junit.Assert.assertEquals;
004    import org.picocontainer.Startable;
005    import org.picocontainer.DefaultPicoContainer;
006    import org.picocontainer.ComponentAdapter;
007    import org.picocontainer.Characteristics;
008    import org.picocontainer.injectors.SetterInjection;
009    import org.picocontainer.behaviors.Cached;
010    
011    import java.util.List;
012    
013    public class Issue0354TestCase {
014    
015            @Test
016        public void testGenericInjectionWithSetterInjection() {
017            DefaultPicoContainer pico = new DefaultPicoContainer(new SetterInjection());
018            pico.addComponent(new Cod());
019            pico.addComponent(new Shark());
020            pico.addComponent(GenericBowl.class);
021            //pico.addComponent(ArrayList.class);
022            //pico.addComponent(ArrayList.class, ArrayList.class, new CollectionComponentParameter(Fish.class, false));
023    
024            GenericBowl bowl = pico.getComponent(GenericBowl.class);
025            assertEquals(2, bowl.fishes.size());
026        }
027    
028            @Test
029        public void testGenericInjectionWithConstructorInjection() {
030            DefaultPicoContainer pico = new DefaultPicoContainer();
031            pico.addComponent(new Cod());
032            pico.addComponent(new Shark());
033            pico.addComponent(GenericBowl.class);
034    
035            GenericBowl bowl = pico.getComponent(GenericBowl.class);
036            assertEquals(2, bowl.fishes.size());
037        }
038    
039        public static interface Fish {
040        }
041    
042        public static class Cod implements Fish {
043        }
044    
045        public static class Shark implements Fish {
046        }
047    
048        public static class GenericBowl {
049            List<Fish> fishes;
050    
051            public void setFishes(List<Fish> fishes) {
052                this.fishes = fishes;
053            }
054    
055            public GenericBowl() {
056            }
057    
058            public GenericBowl(List<Fish> fishes) {
059                this.fishes = fishes;
060            }
061        }
062    
063    }