001 /*****************************************************************************
002 * Copyright (C) PicoContainer Organization. All rights reserved. *
003 * ------------------------------------------------------------------------- *
004 * The software in this package is published under the terms of the BSD *
005 * style license a copy of which has been included with this distribution in *
006 * the LICENSE.txt file. *
007 * *
008 * Original code by *
009 *****************************************************************************/
010 package org.picocontainer.tck;
011
012 import org.picocontainer.PicoException;
013 import org.picocontainer.MutablePicoContainer;
014
015 import java.util.Map;
016 import java.util.HashMap;
017 import java.io.IOException;
018 import java.awt.event.ActionListener;
019 import java.awt.event.ActionEvent;
020
021 /**
022 * @author Paul Hammant
023 * @version $Revision: 3603 $
024 */
025 public abstract class AbstractImplementationHidingPicoContainerTestCase extends AbstractPicoContainerTestCase {
026
027
028 public void testInstanceIsNotAutomaticallyHidden() {
029 MutablePicoContainer pc = createImplementationHidingPicoContainer();
030 pc.addComponent(Map.class, new HashMap());
031 Map map = pc.getComponent(Map.class);
032 assertNotNull(map);
033 assertTrue(map instanceof HashMap);
034 }
035
036 protected abstract MutablePicoContainer createImplementationHidingPicoContainer();
037
038
039 public void testImplementaionIsAutomaticallyHidden() {
040 MutablePicoContainer pc = createImplementationHidingPicoContainer();
041 pc.addComponent(Map.class, HashMap.class);
042 Map map = pc.getComponent(Map.class);
043 assertNotNull(map);
044 assertFalse(map instanceof HashMap);
045 }
046
047 public void testNonInterfaceImplementaionIsAutomaticallyHidden() {
048 MutablePicoContainer pc = createImplementationHidingPicoContainer();
049 pc.addComponent(HashMap.class, HashMap.class);
050 Map map = pc.getComponent(HashMap.class);
051 assertNotNull(map);
052 assertTrue(map instanceof HashMap);
053 }
054
055 public void testNonInterfaceImplementaionWithParametersIsAutomaticallyHidden() {
056 MutablePicoContainer pc = createImplementationHidingPicoContainer();
057 pc.addComponent(HashMap.class, HashMap.class);
058 Map map = pc.getComponent(HashMap.class);
059 assertNotNull(map);
060 assertTrue(map instanceof HashMap);
061 }
062
063
064 public void testImplementaionWithParametersIsAutomaticallyHidden() {
065 MutablePicoContainer pc = createImplementationHidingPicoContainer();
066 pc.addComponent(Map.class, HashMap.class);
067 Map map = pc.getComponent(Map.class);
068 assertNotNull(map);
069 assertFalse(map instanceof HashMap);
070 }
071
072 public void testSerializedContainerCanRetrieveImplementation() throws PicoException,
073 IOException, ClassNotFoundException {
074 try {
075 super.testSerializedContainerCanRetrieveImplementation();
076 fail("The ImplementationHidingPicoContainer should not be able to retrieve the component impl");
077 } catch (ClassCastException cce) {
078 // expected.
079 }
080 }
081
082 public void testExceptionThrowingFromHiddenComponent() {
083 MutablePicoContainer pc = createImplementationHidingPicoContainer();
084 pc.addComponent(ActionListener.class, Burp.class);
085 try {
086 ActionListener ac = pc.getComponent(ActionListener.class);
087 ac.actionPerformed(null);
088 fail("Oh no.");
089 } catch (RuntimeException e) {
090 assertEquals("woohoo", e.getMessage());
091 }
092 }
093
094 public static class Burp implements ActionListener {
095
096 public void actionPerformed(ActionEvent e) {
097 throw new RuntimeException("woohoo");
098 }
099 }
100
101 }