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
048 private static class TestMonitoringComponentAdapter extends AbstractAdapter {
049 TestMonitoringComponentAdapter(ComponentMonitor componentMonitor) {
050 super(null, null, componentMonitor);
051 }
052 public Object getComponentInstance(PicoContainer container) throws PicoCompositionException {
053 return null;
054 }
055 public void verify(PicoContainer container) throws PicoVerificationException {
056 }
057 public Object getComponentKey() {
058 return null;
059 }
060 public Class getComponentImplementation() {
061 return null;
062 }
063 public void accept(PicoVisitor visitor) {
064 }
065 }
066
067 private static class TestInstantiatingAdapter extends AbstractInjector {
068 TestInstantiatingAdapter(Object componentKey, Class componentImplementation, Parameter... parameters) {
069 super(componentKey, componentImplementation, parameters, new NullComponentMonitor(), new NullLifecycleStrategy());
070 }
071 protected Constructor getGreediestSatisfiableConstructor(PicoContainer container) throws PicoCompositionException {
072 return null;
073 }
074
075 public void verify(PicoContainer container) throws PicoCompositionException {
076 }
077
078 public Object getComponentInstance(PicoContainer container) throws PicoCompositionException {
079 return null;
080 }
081 }
082
083 public void testComponentImplementationMayNotBeNull() {
084 try {
085 new TestAdapter("Key", null);
086 fail("NullPointerException expected");
087 } catch (NullPointerException e) {
088 assertEquals("componentImplementation", e.getMessage());
089 }
090 }
091
092 public void testComponentKeyCanBeNullButNotRequested() {
093 ComponentAdapter componentAdapter = new TestAdapter(null, String.class);
094 try {
095 componentAdapter.getComponentKey();
096 fail("NullPointerException expected");
097 } catch (NullPointerException e) {
098 assertEquals("componentKey", e.getMessage());
099 }
100 }
101
102 public void testComponentMonitorMayNotBeNull() {
103 try {
104 new TestAdapter("Key", String.class, null);
105 fail("NullPointerException expected");
106 } catch (NullPointerException e) {
107 assertEquals("ComponentMonitor==null", e.getMessage());
108 }
109 try {
110 new TestMonitoringComponentAdapter(null);
111 fail("NullPointerException expected");
112 } catch (NullPointerException e) {
113 assertEquals("ComponentMonitor==null", e.getMessage());
114 }
115 }
116
117 public void testParameterMayNotBeNull() throws Exception {
118 try {
119 new TestInstantiatingAdapter("Key", String.class, new Parameter[]{new ConstantParameter("Value"), null});
120 fail("Thrown " + NullPointerException.class.getName() + " expected");
121 } catch (final NullPointerException e) {
122 assertTrue(e.getMessage().endsWith("1 is null"));
123 }
124 }
125
126 public void testStringRepresentation() {
127 ComponentAdapter componentAdapter = new TestAdapter("Key", Integer.class);
128 assertEquals(TestAdapter.class.getName() + "[Key]", componentAdapter.toString());
129 }
130 }