001 package org.picocontainer.tck; 002 003 import org.picocontainer.Parameter; 004 import org.picocontainer.PicoException; 005 import org.picocontainer.PicoInitializationException; 006 import org.picocontainer.MutablePicoContainer; 007 008 import java.util.Map; 009 import java.util.HashMap; 010 import java.io.IOException; 011 import java.awt.event.ActionListener; 012 import java.awt.event.ActionEvent; 013 014 /** 015 * @author Paul Hammant 016 * @version $Revision: 2231 $ 017 */ 018 public abstract class AbstractImplementationHidingPicoContainerTestCase extends AbstractPicoContainerTestCase { 019 020 021 public void testInstanceIsNotAutomaticallyHidden() { 022 MutablePicoContainer pc = createImplementationHidingPicoContainer(); 023 pc.registerComponentInstance(Map.class, new HashMap()); 024 Map map = (Map) pc.getComponentInstance(Map.class); 025 assertNotNull(map); 026 assertTrue(map instanceof HashMap); 027 } 028 029 protected abstract MutablePicoContainer createImplementationHidingPicoContainer(); 030 031 032 public void testImplementaionIsAutomaticallyHidden() { 033 MutablePicoContainer pc = createImplementationHidingPicoContainer(); 034 pc.registerComponentImplementation(Map.class, HashMap.class); 035 Map map = (Map) pc.getComponentInstance(Map.class); 036 assertNotNull(map); 037 assertFalse(map instanceof HashMap); 038 } 039 040 public void testNonInterfaceImplementaionIsAutomaticallyHidden() { 041 MutablePicoContainer pc = createImplementationHidingPicoContainer(); 042 pc.registerComponentImplementation(HashMap.class, HashMap.class); 043 Map map = (Map) pc.getComponentInstance(HashMap.class); 044 assertNotNull(map); 045 assertTrue(map instanceof HashMap); 046 } 047 048 public void testNonInterfaceImplementaionWithParametersIsAutomaticallyHidden() { 049 MutablePicoContainer pc = createImplementationHidingPicoContainer(); 050 pc.registerComponentImplementation(HashMap.class, HashMap.class, new Parameter[0]); 051 Map map = (Map) pc.getComponentInstance(HashMap.class); 052 assertNotNull(map); 053 assertTrue(map instanceof HashMap); 054 } 055 056 057 public void testImplementaionWithParametersIsAutomaticallyHidden() { 058 MutablePicoContainer pc = createImplementationHidingPicoContainer(); 059 pc.registerComponentImplementation(Map.class, HashMap.class, new Parameter[0]); 060 Map map = (Map) pc.getComponentInstance(Map.class); 061 assertNotNull(map); 062 assertFalse(map instanceof HashMap); 063 } 064 065 public void testSerializedContainerCanRetrieveImplementation() throws PicoException, PicoInitializationException, 066 IOException, ClassNotFoundException { 067 try { 068 super.testSerializedContainerCanRetrieveImplementation(); 069 fail("The ImplementationHidingPicoContainer should not be able to retrieve the component impl"); 070 } catch (ClassCastException cce) { 071 // expected. 072 } 073 } 074 075 public void testExceptionThrowingFromHiddenComponent() { 076 MutablePicoContainer pc = createImplementationHidingPicoContainer(); 077 pc.registerComponentImplementation(ActionListener.class, Burp.class); 078 try { 079 ActionListener ac = (ActionListener) pc.getComponentInstance(ActionListener.class); 080 ac.actionPerformed(null); 081 fail("Oh no."); 082 } catch (RuntimeException e) { 083 assertEquals("woohoo", e.getMessage()); 084 } 085 } 086 087 public static class Burp implements ActionListener { 088 089 public void actionPerformed(ActionEvent e) { 090 throw new RuntimeException("woohoo"); 091 } 092 } 093 094 }