001    package org.picocontainer.defaults;
002    
003    import java.awt.event.ActionEvent;
004    import java.awt.event.ActionListener;
005    import java.awt.event.MouseEvent;
006    import java.awt.event.MouseListener;
007    
008    import junit.framework.TestCase;
009    
010    import org.picocontainer.ComponentAdapter;
011    import org.picocontainer.Parameter;
012    import org.picocontainer.PicoIntrospectionException;
013    import org.picocontainer.defaults.ComponentAdapterFactory;
014    import org.picocontainer.defaults.ConstructorInjectionComponentAdapter;
015    import org.picocontainer.defaults.ConstructorInjectionComponentAdapterFactory;
016    import org.picocontainer.defaults.ImplementationHidingComponentAdapter;
017    import org.picocontainer.defaults.ImplementationHidingComponentAdapterFactory;
018    
019    public class ImplementationHidingComponentAdapterTestCase extends TestCase {
020    
021        public void testMultipleInterfacesCanBeHidden() {
022            ComponentAdapter ca = new ConstructorInjectionComponentAdapter(new Class[]{ActionListener.class, MouseListener.class}, Footle.class);
023            ImplementationHidingComponentAdapter ihca = new ImplementationHidingComponentAdapter(ca, true);
024            Object comp = ihca.getComponentInstance(null);
025            assertNotNull(comp);
026            assertTrue(comp instanceof ActionListener);
027            assertTrue(comp instanceof MouseListener);
028        }
029    
030        public void testNonInterfaceInArrayCantBeHidden() {
031            ComponentAdapter ca = new ConstructorInjectionComponentAdapter(new Class[]{String.class}, Footle.class);
032            ImplementationHidingComponentAdapter ihca = new ImplementationHidingComponentAdapter(ca, true);
033            try {
034                ihca.getComponentInstance(null);
035                fail("PicoIntrospectionException expected");
036            } catch (PicoIntrospectionException e) {
037                // expected        
038            }
039        }
040    
041        public void testFactoryWithDefaultStrictMode(){
042            ComponentAdapterFactory factory = new ImplementationHidingComponentAdapterFactory(new ConstructorInjectionComponentAdapterFactory());        
043            ComponentAdapter ihca = factory.createComponentAdapter("ww", Footle.class, new Parameter[0]);
044            try {
045                ihca.getComponentInstance(null);
046                fail("PicoIntrospectionException expected");
047            } catch (PicoIntrospectionException e) {
048                // expected        
049            }
050        }
051        
052        public void testShouldThrowExceptionWhenAccessingNonInterfaceKeyedComponentInStrictMode() {
053            ComponentAdapter ca = new ConstructorInjectionComponentAdapter("ww", Footle.class);
054            ImplementationHidingComponentAdapter ihca = new ImplementationHidingComponentAdapter(ca, true);
055            try {
056                ihca.getComponentInstance(null);
057                fail("PicoIntrospectionException expected");
058            } catch (PicoIntrospectionException e) {
059                // expected        
060            }
061        }
062    
063        public class Footle implements ActionListener, MouseListener {
064            public void actionPerformed(ActionEvent e) {
065            }
066    
067            public void mouseClicked(MouseEvent e) {
068            }
069    
070            public void mouseEntered(MouseEvent e) {
071            }
072    
073            public void mouseExited(MouseEvent e) {
074            }
075    
076            public void mousePressed(MouseEvent e) {
077            }
078    
079            public void mouseReleased(MouseEvent e) {
080            }
081    
082        }
083    
084    }