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 }