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 }