001 package org.picocontainer.defaults.issues; 002 003 import org.jmock.MockObjectTestCase; 004 import org.jmock.Mock; 005 import org.picocontainer.ComponentMonitor; 006 import org.picocontainer.Startable; 007 import org.picocontainer.defaults.DefaultPicoContainerTestCase; 008 import org.picocontainer.defaults.DefaultPicoContainer; 009 010 import java.lang.reflect.Method; 011 012 public class Issue0265TestCase extends MockObjectTestCase { 013 014 public void testCanReallyChangeMonitor() throws SecurityException, NoSuchMethodException { 015 Method start = Startable.class.getMethod("start", null); 016 Method stop = Startable.class.getMethod("stop", null); 017 Mock mockMonitor1 = mock(ComponentMonitor.class, "Monitor1"); 018 Mock mockMonitor2 = mock(ComponentMonitor.class, "Monitor2"); 019 DefaultPicoContainer pico = new DefaultPicoContainer((ComponentMonitor) mockMonitor1.proxy()); 020 pico.registerComponentImplementation(DefaultPicoContainerTestCase.MyStartable.class); 021 mockMonitor1.expects(once()).method("instantiating"); 022 mockMonitor1.expects(once()).method("instantiated"); 023 mockMonitor1.expects(once()).method("invoking").with(eq(start), ANYTHING); 024 mockMonitor1.expects(once()).method("invoked").with(eq(start), ANYTHING, ANYTHING); 025 mockMonitor1.expects(once()).method("invoking").with(eq(stop), ANYTHING); 026 mockMonitor1.expects(once()).method("invoked").with(eq(stop), ANYTHING, ANYTHING); 027 pico.start(); 028 pico.stop(); 029 Startable startable = (Startable) pico.getComponentInstance(DefaultPicoContainerTestCase.MyStartable.class); 030 assertNotNull(startable); 031 pico.changeMonitor((ComponentMonitor) mockMonitor2.proxy()); 032 mockMonitor2.expects(once()).method("invoking").with(eq(start), ANYTHING); 033 mockMonitor2.expects(once()).method("invoked").with(eq(start), ANYTHING, ANYTHING); 034 mockMonitor2.expects(once()).method("invoking").with(eq(stop), ANYTHING); 035 mockMonitor2.expects(once()).method("invoked").with(eq(stop), ANYTHING, ANYTHING); 036 pico.start(); 037 pico.stop(); 038 } 039 040 }