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 }