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.monitors; 011 012 import static org.junit.Assert.assertEquals; 013 import static org.picocontainer.monitors.ComponentMonitorHelper.ctorToString; 014 import static org.picocontainer.monitors.ComponentMonitorHelper.format; 015 import static org.picocontainer.monitors.ComponentMonitorHelper.methodToString; 016 import static org.picocontainer.monitors.ComponentMonitorHelper.parmsToString; 017 018 import java.io.StringWriter; 019 import java.io.Writer; 020 import java.lang.reflect.Constructor; 021 import java.lang.reflect.Method; 022 import java.lang.reflect.Type; 023 import java.util.HashMap; 024 import java.util.Map; 025 026 import org.junit.Assert; 027 import org.junit.Before; 028 import org.junit.Test; 029 import org.picocontainer.ComponentMonitor; 030 import org.picocontainer.PicoCompositionException; 031 import org.picocontainer.PicoContainer; 032 import org.picocontainer.PicoLifecycleException; 033 import org.picocontainer.adapters.AbstractAdapter; 034 import org.picocontainer.containers.TransientPicoContainer; 035 036 /** 037 * @author Aslak Hellesøy 038 * @author Mauro Talevi 039 */ 040 @SuppressWarnings("serial") 041 public class WriterComponentMonitorTestCase { 042 043 private Writer out; 044 private ComponentMonitor componentMonitor; 045 private static final String NL = System.getProperty("line.separator"); 046 private Constructor constructor; 047 private Method method; 048 049 @Before 050 public void setUp() throws Exception { 051 out = new StringWriter(); 052 constructor = getClass().getConstructor((Class[])null); 053 method = getClass().getDeclaredMethod("setUp", (Class[])null); 054 componentMonitor = new WriterComponentMonitor(out); 055 } 056 057 @Test public void testShouldTraceInstantiating() { 058 componentMonitor.instantiating(null, null, constructor); 059 assertEquals(format(ComponentMonitorHelper.INSTANTIATING, ctorToString(constructor)) +NL, out.toString()); 060 } 061 062 @Test public void testShouldTraceInstantiatedWithInjected() { 063 Object[] injected = new Object[0]; 064 Object instantiated = new Object(); 065 componentMonitor.instantiated(null, null, constructor, instantiated, injected, 543); 066 Assert.assertEquals(format(ComponentMonitorHelper.INSTANTIATED, 067 ctorToString(constructor), 068 (long)543, 069 instantiated.getClass().getName(), parmsToString(injected)) +NL, out.toString()); 070 } 071 072 @Test public void testShouldTraceInstantiationFailed() { 073 componentMonitor.instantiationFailed(null, null, constructor, new RuntimeException("doh")); 074 Assert.assertEquals(format(ComponentMonitorHelper.INSTANTIATION_FAILED, 075 ctorToString(constructor), "doh") +NL, out.toString()); 076 } 077 078 @Test public void testShouldTraceInvoking() { 079 componentMonitor.invoking(null, null, method, this); 080 Assert.assertEquals(format(ComponentMonitorHelper.INVOKING, 081 methodToString(method), this) +NL, out.toString()); 082 } 083 084 @Test public void testShouldTraceInvoked() { 085 componentMonitor.invoked(null, null, method, this, 543); 086 Assert.assertEquals(format(ComponentMonitorHelper.INVOKED, 087 methodToString(method), this, 088 (long)543) +NL, out.toString()); 089 } 090 091 @Test public void testShouldTraceInvocatiationFailed() { 092 componentMonitor.invocationFailed(method, this, new RuntimeException("doh")); 093 Assert.assertEquals(format(ComponentMonitorHelper.INVOCATION_FAILED, 094 methodToString(method), this, "doh") +NL, out.toString()); 095 } 096 097 @Test public void testShouldTraceLifecycleInvocationFailed() { 098 try { 099 componentMonitor.lifecycleInvocationFailed(new TransientPicoContainer(), 100 new AbstractAdapter(Map.class, HashMap.class) { 101 public Object getComponentInstance(PicoContainer container) throws PicoCompositionException { 102 return getComponentInstance(container, null); 103 } 104 105 public Object getComponentInstance(PicoContainer container, Type into) 106 throws PicoCompositionException { 107 return "x"; 108 } 109 110 public void verify(PicoContainer container) 111 throws PicoCompositionException{ 112 } 113 114 public String getDescriptor() { 115 return null; 116 } 117 }, 118 method, 119 "fooooo", 120 new RuntimeException("doh")); 121 Assert.fail("should have barfed"); 122 } catch (PicoLifecycleException e) { 123 //expected 124 } 125 Assert.assertEquals(format(ComponentMonitorHelper.LIFECYCLE_INVOCATION_FAILED, 126 methodToString(method), "fooooo", "doh") + NL, 127 out.toString()); 128 } 129 130 @Test public void testNoComponent() { 131 132 componentMonitor.noComponentFound(new TransientPicoContainer(), "foo"); 133 Assert.assertEquals(format(ComponentMonitorHelper.NO_COMPONENT, 134 "foo") +NL, out.toString()); 135 } 136 137 138 }