001 package org.picocontainer.defaults.issues;
002 import org.picocontainer.MutablePicoContainer;
003 import org.picocontainer.PicoInitializationException;
004 import org.picocontainer.defaults.DefaultPicoContainer;
005
006 import junit.framework.TestCase;
007
008 /**
009 * Test case for issue http://jira.codehaus.org/browse/PICO-280
010 */
011 public class Issue0280TestCase extends TestCase
012 {
013 public void testShouldFailIfInstantiationInChildContainerFails()
014 {
015 MutablePicoContainer parent = new DefaultPicoContainer();
016 MutablePicoContainer child = new DefaultPicoContainer(parent);
017
018 parent.registerComponentImplementation(CommonInterface.class, ParentImplementation.class);
019 child.registerComponentImplementation(CommonInterface.class, ChildImplementation.class);
020
021 parent.start();
022
023 try
024 {
025 Object result = child.getComponentInstanceOfType(CommonInterface.class);
026
027 // should never get here
028 assertFalse(result.getClass() == ParentImplementation.class);
029 }
030 catch (Exception e)
031 {
032 assertTrue(e.getClass() == PicoInitializationException.class);
033 }
034
035 }
036
037 public interface CommonInterface
038 {
039
040 }
041
042 public static class ParentImplementation implements CommonInterface
043 {
044 }
045
046 public static class ChildImplementation implements CommonInterface
047 {
048 public ChildImplementation()
049 {
050 throw new PicoInitializationException("Problem during initialization");
051 }
052 }
053
054 }