    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&oslash;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    }