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 package org.picocontainer.defaults;
009
010 import junit.framework.TestCase;
011 import org.picocontainer.ComponentAdapter;
012 import org.picocontainer.ComponentMonitor;
013 import org.picocontainer.Parameter;
014 import org.picocontainer.PicoContainer;
015 import org.picocontainer.PicoInitializationException;
016 import org.picocontainer.PicoIntrospectionException;
017 import org.picocontainer.PicoVerificationException;
018 import org.picocontainer.PicoVisitor;
019
020 import java.lang.reflect.Constructor;
021
022 /**
023 * Test AbstractComponentAdapter behaviour
024 * @author Jörg Schaible
025 */
026 public class ComponentAdapterTestCase
027 extends TestCase {
028
029 private static class TestComponentAdapter extends AbstractComponentAdapter {
030 TestComponentAdapter(Object componentKey, Class componentImplementation, ComponentMonitor componentMonitor) throws AssignabilityRegistrationException {
031 super(componentKey, componentImplementation, componentMonitor);
032 }
033 TestComponentAdapter(Object componentKey, Class componentImplementation) throws AssignabilityRegistrationException {
034 super(componentKey, componentImplementation);
035 }
036 public Object getComponentInstance(PicoContainer container) throws PicoInitializationException, PicoIntrospectionException {
037 return null;
038 }
039 public void verify(PicoContainer container) throws PicoVerificationException {
040 }
041
042 }
043
044 private static class TestMonitoringComponentAdapter extends MonitoringComponentAdapter {
045 TestMonitoringComponentAdapter(ComponentMonitor componentMonitor) throws AssignabilityRegistrationException {
046 super(componentMonitor);
047 }
048 public Object getComponentInstance(PicoContainer container) throws PicoInitializationException, PicoIntrospectionException {
049 return null;
050 }
051 public void verify(PicoContainer container) throws PicoVerificationException {
052 }
053 public Object getComponentKey() {
054 return null;
055 }
056 public Class getComponentImplementation() {
057 return null;
058 }
059 public void accept(PicoVisitor visitor) {
060 }
061 }
062
063 private static class TestInstantiatingComponentAdapter extends InstantiatingComponentAdapter {
064 TestInstantiatingComponentAdapter(Object componentKey, Class componentImplementation, Parameter[] parameters, boolean allowNonPublicClasses) {
065 super(componentKey, componentImplementation, parameters, allowNonPublicClasses);
066 }
067 protected Constructor getGreediestSatisfiableConstructor(PicoContainer container) throws PicoIntrospectionException, UnsatisfiableDependenciesException, AmbiguousComponentResolutionException, AssignabilityRegistrationException, NotConcreteRegistrationException {
068 return null;
069 }
070 public Object getComponentInstance(PicoContainer container) throws PicoInitializationException, PicoIntrospectionException {
071 return null;
072 }
073 }
074
075 public void testComponentImplementationMayNotBeNull() {
076 try {
077 new TestComponentAdapter("Key", null);
078 fail("NullPointerException expected");
079 } catch (NullPointerException e) {
080 assertEquals("componentImplementation", e.getMessage());
081 }
082 }
083
084 public void testComponentKeyCanBeNullButNotRequested() {
085 ComponentAdapter componentAdapter = new TestComponentAdapter(null, String.class);
086 try {
087 componentAdapter.getComponentKey();
088 fail("NullPointerException expected");
089 } catch (NullPointerException e) {
090 assertEquals("componentKey", e.getMessage());
091 }
092 }
093
094 public void testComponentMonitorMayNotBeNull() {
095 try {
096 new TestComponentAdapter("Key", String.class, null);
097 fail("NullPointerException expected");
098 } catch (NullPointerException e) {
099 assertEquals("monitor", e.getMessage());
100 }
101 try {
102 new TestMonitoringComponentAdapter(null);
103 fail("NullPointerException expected");
104 } catch (NullPointerException e) {
105 assertEquals("monitor", e.getMessage());
106 }
107 }
108
109 public void testParameterMayNotBeNull() throws Exception {
110 try {
111 new TestInstantiatingComponentAdapter("Key", String.class, new Parameter[]{new ConstantParameter("Value"), null}, false);
112 fail("Thrown " + NullPointerException.class.getName() + " expected");
113 } catch (final NullPointerException e) {
114 assertTrue(e.getMessage().endsWith("1 is null"));
115 }
116 }
117
118 public void testStringRepresentation() {
119 ComponentAdapter componentAdapter = new TestComponentAdapter("Key", Integer.class);
120 assertEquals(TestComponentAdapter.class.getName() + "[Key]", componentAdapter.toString());
121 }
122 }