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 package org.picocontainer.defaults.issues;
009
010 import org.picocontainer.ComponentMonitor;
011 import org.picocontainer.DefaultPicoContainer;
012 import org.picocontainer.Startable;
013 import org.picocontainer.MutablePicoContainer;
014 import org.picocontainer.ComponentAdapter;
015 import org.picocontainer.monitors.NullComponentMonitor;
016 import org.picocontainer.lifecycle.ReflectionLifecycleStrategy;
017 import org.picocontainer.lifecycle.StartableLifecycleStrategy;
018 import org.junit.Test;
019
020 import java.lang.reflect.Method;
021
022 @SuppressWarnings("serial")
023 public class Issue0303TestCase {
024
025 public static class SwallowingComponentMonitor extends NullComponentMonitor {
026 @Override
027 public void lifecycleInvocationFailed(MutablePicoContainer container,
028 ComponentAdapter<?> componentAdapter, Method method, Object instance,
029 RuntimeException cause) {
030 // swallow it
031 }
032 }
033
034 public static class Starter implements Startable {
035
036 public void start() {
037 throw new RuntimeException("deliberate exception");
038 }
039
040 /**
041 * {@inheritDoc}
042 */
043 public void stop() {
044 // empty
045 }
046 }
047
048 @Test
049 public void testCanSwallowExceptionFromReflectionLifecycleStrategy() {
050 ComponentMonitor monitor = new SwallowingComponentMonitor();
051 DefaultPicoContainer container =
052 new DefaultPicoContainer(monitor, new StartableLifecycleStrategy(monitor), null);
053 container.addComponent(new Starter());
054 container.start();
055 }
056
057 @Test
058 // @Ignore("filed as PICO-313 on jira.codehaus.org")
059 public void testCanSwallowExceptionFromStarableLifecycleStrategy() {
060 ComponentMonitor monitor = new SwallowingComponentMonitor();
061 DefaultPicoContainer container =
062 new DefaultPicoContainer(monitor, new ReflectionLifecycleStrategy(monitor), null);
063 container.addComponent(new Starter());
064 container.start();
065 }
066 }