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 }