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