001    package org.picocontainer.defaults;
002    
003    import junit.framework.TestCase;
004    
005    /**
006     * Uncomment all the tests in this class (as well as the obvious places in
007     * ConstructorInjectionComponentAdapter) in order to run with generics support
008     * Requires JDK 1.5 with generics enabled.
009     * 
010     * @author Aslak Hellesøy
011     * @version $Revision: 1272 $
012     */
013    public class GenericsTestCase extends TestCase {
014        public void testDummy() {
015    
016        }
017    
018        /*
019        private MutablePicoContainer pico;
020        private Shark shark;
021        private Cod cod;
022        private Bowl bowl;
023    
024        protected void setUp() throws Exception {
025            pico = new DefaultPicoContainer();
026    
027            shark = new Shark();
028            cod = new Cod();
029    
030            pico.registerComponentInstance("shark", shark);
031            pico.registerComponentInstance(cod);
032            pico.registerComponentImplementation(Bowl.class);
033    
034            bowl = (Bowl) pico.getComponentInstance(Bowl.class);
035        }
036    
037        public static interface Fish {
038        }
039    
040        public static class Cod implements Fish{
041        }
042    
043        public static class Shark implements Fish{
044        }
045    
046        public static class Bowl {
047            private final Collection<Fish> fishes;
048            private final Set<Cod> cods;
049            private final Map<String, Fish> stringFishMap;
050            private final Map<Object, Shark> objectSharkMap;
051    
052            public Bowl(Collection<Fish> fishes, Set<Cod> cods, Map<String,Fish> stringFishMap, Map<Object,Shark> objectSharkMap) {
053                this.fishes = fishes;
054                this.cods = cods;
055                this.stringFishMap = stringFishMap;
056                this.objectSharkMap = objectSharkMap;
057            }
058    
059            public Collection<Fish> getFishes() {
060                return fishes;
061            }
062    
063            public Set<Cod> getCods() {
064                return cods;
065            }
066    
067            public Map<String,Fish> getStringFishMap() {
068                return stringFishMap;
069            }
070    
071            public Map<Object, Shark> getObjectSharkMap() {
072                return objectSharkMap;
073            }
074        }
075    
076        public void testShouldCreateBowlWithFishCollection() {
077            Collection<Fish> fishes = bowl.getFishes();
078            assertEquals(2, fishes.size());
079            assertTrue(fishes.contains(shark));
080            assertTrue(fishes.contains(cod));
081    
082            Set<Cod> cods = bowl.getCods();
083            assertEquals(1, cods.size());
084            assertTrue(cods.contains(cod));
085        }
086    
087        public void testShouldFilterMapByKeyType() {
088            Map<String, Fish> fishMap = bowl.getStringFishMap();
089            assertEquals(1, fishMap.size());
090            assertSame(shark, fishMap.get("shark"));
091        }
092    
093        public void testShouldFilterMapByValueType() {
094            Map<Object, Shark> fishMap = bowl.getObjectSharkMap();
095            assertEquals(1, fishMap.size());
096            assertSame(shark, fishMap.get("shark"));
097        }
098    
099        public static class UngenericCollectionBowl {
100            public UngenericCollectionBowl(Collection fish) {
101            }
102        }
103    
104        public void testShouldNotInstantiateCollectionForUngenericCollectionParameters() {
105            pico.registerComponentImplementation(UngenericCollectionBowl.class);
106            try {
107                pico.getComponentInstance(UngenericCollectionBowl.class);
108                fail();
109            } catch (UnsatisfiableDependenciesException e) {
110                // expected
111            }
112        }
113    
114        public static class UngenericMapBowl {
115            public UngenericMapBowl(Map fish) {
116            }
117        }
118    
119        public void testShouldNotInstantiateMapForUngenericMapParameters() {
120            pico.registerComponentImplementation(UngenericMapBowl.class);
121            try {
122                pico.getComponentInstance(UngenericMapBowl.class);
123                fail();
124            } catch (UnsatisfiableDependenciesException e) {
125                // expected
126            }
127        }
128    
129        public static class AnotherGenericCollectionBowl {
130            private final Collection<String> strings;
131    
132            public AnotherGenericCollectionBowl(Collection<String> strings) {
133                this.strings = strings;
134            }
135    
136            public Collection<String> getStrings() {
137                return strings;
138            }
139        }
140    
141        public void testShouldInstantiateAmptyCollectionForAnotherGenericCollection() {
142            pico.registerComponentImplementation(AnotherGenericCollectionBowl.class);
143            AnotherGenericCollectionBowl anotherGenericCollectionBowl = (AnotherGenericCollectionBowl) pico.getComponentInstance(AnotherGenericCollectionBowl.class);
144            assertEquals(0, anotherGenericCollectionBowl.getStrings().size());
145        }
146    */
147    }