    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.issues;
    011
    012    import static org.junit.Assert.fail;
    013
    014    import org.junit.Test;
    015    import org.picocontainer.DefaultPicoContainer;
    016    import org.picocontainer.MutablePicoContainer;
    017    import org.picocontainer.injectors.AbstractInjector;
    018
    019    public final class Issue0191TestCase {
    020
    021        static int sharkCount = 0 ;
    022        static int codCount = 0 ;
    023
    024        /*
    025          This bug as descripbed in the bug report, cannot be reproduced. Needs work.
    026        */
    027        @Test public void testTheBug()
    028        {
    029            MutablePicoContainer pico = new DefaultPicoContainer( ) ;
    030            pico.addComponent(Shark.class);
    031            pico.addComponent(Cod.class);
    032            try {
    033                pico.addComponent(Bowl.class);
    034                Bowl bowl = pico.getComponent(Bowl.class);
    035                fail("Should have barfed here with UnsatisfiableDependenciesException");
    036                Fish[] fishes = bowl.getFishes( ) ;
    037                for( int i = 0 ; i < fishes.length ; i++ )
    038                    System.out.println( "fish["+i+"]="+fishes[i] ) ;
    039            } catch (AbstractInjector.UnsatisfiableDependenciesException e) {
    040                // expected, well except that there is supposed to be a different bug here.
    041            }
    042        }
    043
    044
    045         class Bowl
    046        {
    047            private final Fish[] fishes;
    048            private final Cod[] cods;
    049            public Bowl(Fish[] fishes, Cod[] cods)
    050            {
    051                this.fishes = fishes;
    052                this.cods = cods;
    053            }
    054            public Fish[] getFishes()
    055            {
    056                return fishes;
    057            }
    058            public Cod[] getCods()
    059            {
    060                return cods;
    061            }
    062
    063        }
    064
    065        public interface Fish
    066        {
    067        }
    068
    069        final class Cod implements Fish
    070        {
    071            final int instanceNum ;
    072            public Cod( ) { instanceNum = codCount++ ; }
    073
    074            public String toString( ) {
    075                return "Cod #" + instanceNum ;
    076            }
    077        }
    078
    079        final class Shark implements Fish
    080        {
    081            final int instanceNum ;
    082            public Shark( ) { instanceNum = sharkCount++ ; }
    083
    084            public String toString( ) {
    085                return "Shark #" + instanceNum ;
    086            }
    087        }
    088
    089    }