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.junit.Assert.assertNull;
014    import static org.picocontainer.tck.MockFactory.mockeryWithCountingNamingScheme;
015    
016    import java.lang.reflect.Constructor;
017    import java.lang.reflect.Method;
018    
019    import org.jmock.Mockery;
020    import org.jmock.integration.junit4.JMock;
021    import org.junit.Test;
022    import org.junit.runner.RunWith;
023    import org.picocontainer.ComponentAdapter;
024    import org.picocontainer.MutablePicoContainer;
025    import org.picocontainer.PicoLifecycleException;
026    
027    @RunWith(JMock.class)
028    public class NullComponentMonitorTestCase {
029    
030            private Mockery mockery = mockeryWithCountingNamingScheme();
031            
032        @Test public void testItAll() throws NoSuchMethodException {
033    
034            NullComponentMonitor ncm = new NullComponentMonitor();
035            ncm.instantiated(makePico(), makeCA(), makeConstructor(), "foo", new Object[0], 10);
036            assertEquals(makeConstructor(), ncm.instantiating(makePico(), makeCA(), makeConstructor()));
037            ncm.instantiationFailed(makePico(), makeCA(), makeConstructor(), new Exception());
038            ncm.invocationFailed(makeConstructor(), "foo", new Exception());
039            ncm.invoked(makePico(), makeCA(), makeMethod(), "foo", 10, new Object[0], null);
040            ncm.invoking(makePico(), makeCA(), makeMethod(), "foo", new Object[0]);
041            try {
042                ncm.lifecycleInvocationFailed(makePico(), makeCA(), makeMethod(), "foo", new RuntimeException());
043            } catch (PicoLifecycleException e) {
044                assertEquals(makeMethod(), e.getMethod());
045                assertEquals("foo", e.getInstance());
046                assertEquals("PicoLifecycleException: method 'public java.lang.String java.lang.String.toString()', instance 'foo, java.lang.RuntimeException", e.getMessage());
047            }
048            assertNull(ncm.noComponentFound(makePico(), String.class));
049    
050        }
051    
052        private MutablePicoContainer makePico() {
053            return mockery.mock(MutablePicoContainer.class);
054        }
055    
056        private ComponentAdapter makeCA() {
057            return mockery.mock(ComponentAdapter.class);
058        }
059    
060        private Constructor makeConstructor() {
061            return String.class.getConstructors()[0];
062        }
063    
064        private Method makeMethod() throws NoSuchMethodException {
065            return String.class.getMethod("toString");
066        }
067    
068    
069    }