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 }