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