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    }