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 *****************************************************************************/
010package org.picocontainer.defaults.issues;
011
012import static org.junit.Assert.assertFalse;
013import static org.junit.Assert.assertTrue;
014
015import org.junit.Test;
016import org.picocontainer.DefaultPicoContainer;
017import org.picocontainer.MutablePicoContainer;
018import org.picocontainer.PicoCompositionException;
019
020/**
021 * Test case for issue http://jira.codehaus.org/browse/PICO-280
022 */
023public class Issue0280TestCase {
024
025        @Test
026        public void testShouldFailIfInstantiationInChildContainerFails() {
027                MutablePicoContainer parent = new DefaultPicoContainer();
028                MutablePicoContainer child = new DefaultPicoContainer(parent);
029
030                parent.addComponent(CommonInterface.class, ParentImplementation.class);
031                child.addComponent(CommonInterface.class, ChildImplementation.class);
032
033                parent.start();
034
035                try {
036                        Object result = child.getComponent(CommonInterface.class);
037
038                        // should never get here
039                        assertFalse(result.getClass() == ParentImplementation.class);
040                } catch (Exception e) {
041                        assertTrue(e.getClass() == PicoCompositionException.class);
042                }
043
044        }
045
046        public interface CommonInterface {
047
048        }
049
050        public static class ParentImplementation implements CommonInterface {
051        }
052
053        public static class ChildImplementation implements CommonInterface {
054                public ChildImplementation() {
055                        throw new PicoCompositionException("Problem during initialization");
056                }
057        }
058
059}