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 }