001 package org.picocontainer.defaults.issues;
002
003 import org.junit.Test;import static org.junit.Assert.assertFalse;import static org.junit.Assert.assertEquals;
004 import static org.junit.Assert.assertNotNull;
005 import org.picocontainer.Startable;
006 import org.picocontainer.DefaultPicoContainer;
007 import org.picocontainer.ComponentAdapter;
008 import org.picocontainer.Characteristics;
009 import org.picocontainer.PicoException;
010 import org.picocontainer.PicoCompositionException;
011 import org.picocontainer.injectors.SetterInjection;
012 import org.picocontainer.injectors.Provider;
013 import org.picocontainer.injectors.ProviderAdapter;
014 import org.picocontainer.behaviors.Cached;
015
016 import java.util.List;
017
018 public class Issue0357TestCase {
019
020 public static class SimpleFoo {
021 public SimpleFoo() throws Exception {
022 throw new Exception("deliberate");
023 }
024 }
025
026 public static class SimpleProvider implements Provider {
027 public SimpleFoo provide() throws Exception {
028 return new SimpleFoo();
029 }
030 }
031
032 @Test(expected = PicoCompositionException.class)
033 // this method should throw an exception, but silently returns null (the issue)
034 public void testShouldThrowWhenProvideMethodThrowsForCheckedException() {
035 DefaultPicoContainer cont = new DefaultPicoContainer();
036 cont.addAdapter(new ProviderAdapter(new SimpleProvider()));
037 assertNotNull(cont.getComponent(SimpleFoo.class));
038 }
039
040 @Test(expected = PicoCompositionException.class)
041 public void testShouldThrowWhenConstructorThrowsForCheckedException() {
042 DefaultPicoContainer cont = new DefaultPicoContainer();
043 cont.addComponent(SimpleFoo.class);
044 assertNotNull(cont.getComponent(SimpleFoo.class));
045 }
046
047 public static class SimpleFooRuntime {
048 public SimpleFooRuntime() {
049 throw new RuntimeException("deliberate");
050 }
051 }
052
053 public static class SimpleProviderRuntime implements Provider {
054 public SimpleFooRuntime provide() {
055 return new SimpleFooRuntime();
056 }
057 }
058
059 @Test(expected = RuntimeException.class)
060 public void testShouldThrowWhenProvideMethodThrowsForRuntimeException() {
061 DefaultPicoContainer cont = new DefaultPicoContainer();
062 cont.addAdapter(new ProviderAdapter(new SimpleProviderRuntime()));
063 assertNotNull(cont.getComponent(SimpleFooRuntime.class));
064 }
065
066 }