    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.assertFalse;
    013    import static org.junit.Assert.assertTrue;
    014
    015    import org.junit.Test;
    016    import org.picocontainer.DefaultPicoContainer;
    017    import org.picocontainer.MutablePicoContainer;
    018    import org.picocontainer.PicoCompositionException;
    019
    020    /**
    021     * Test case for issue http://jira.codehaus.org/browse/PICO-280
    022     */
    023    public 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    }