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 }