001package org.picocontainer.defaults.issues;
002
003import org.junit.Test;import static org.junit.Assert.assertFalse;import static org.junit.Assert.assertEquals;
004import org.picocontainer.Startable;
005import org.picocontainer.DefaultPicoContainer;
006import org.picocontainer.ComponentAdapter;
007import org.picocontainer.Characteristics;
008import org.picocontainer.injectors.SetterInjection;
009import org.picocontainer.behaviors.Cached;
010
011import java.util.List;
012
013public 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}