001    package org.picocontainer.defaults.issues;
002    
003    import static org.junit.Assert.assertEquals;
004    
005    import org.junit.Test;
006    import org.picocontainer.DefaultPicoContainer;
007    import org.picocontainer.containers.CompositePicoContainer;
008    
009    public class Issue0384TestCase {
010    
011      public static interface AnInterface {
012    
013      }
014      public static interface AnInterface2 {
015    
016      }
017    
018      public static class Impl1 implements AnInterface {
019    
020      }
021    
022      public static class Impl2 implements AnInterface {
023    
024      }
025    
026      @Test
027      public void testComposition() throws Exception {
028        DefaultPicoContainer primary = new DefaultPicoContainer();
029        primary.addComponent(AnInterface.class, Impl1.class);
030    
031        DefaultPicoContainer secondary = new DefaultPicoContainer();
032        secondary.addComponent(AnInterface.class, Impl2.class);
033    
034        CompositePicoContainer composite = new CompositePicoContainer(primary, secondary);
035        DefaultPicoContainer child = new DefaultPicoContainer(composite);
036    
037        assertEquals(Impl1.class, child.getComponent(Impl1.class).getClass());
038        assertEquals(Impl2.class, child.getComponent(Impl2.class).getClass());
039        assertEquals(Impl1.class, child.getComponent(AnInterface.class).getClass());
040      }
041    
042    }