001 package org.picocontainer.injectors;
002
003 import org.junit.Test;
004 import org.picocontainer.*;
005 import org.picocontainer.monitors.NullComponentMonitor;
006 import org.picocontainer.monitors.WriterComponentMonitor;
007 import org.picocontainer.tck.AbstractComponentAdapterTest;
008 import org.picocontainer.testmodel.NullLifecycle;
009 import org.picocontainer.testmodel.SimpleTouchable;
010 import org.picocontainer.testmodel.Touchable;
011
012 import java.io.PrintWriter;
013 import java.util.Properties;
014
015 import static org.junit.Assert.assertEquals;
016 import static org.junit.Assert.assertTrue;
017
018 public class LifecycleAdapterTestCase {
019
020 private final ConstructorInjector INJECTOR = new ConstructorInjector(
021 Foo.class, Foo.class, new Parameter[0],
022 new NullComponentMonitor(), false);
023
024 private AbstractComponentAdapterTest.RecordingLifecycleStrategy strategy = new AbstractComponentAdapterTest.RecordingLifecycleStrategy(new StringBuffer());
025
026 AbstractInjectionFactory ais = new AbstractInjectionFactory() {
027 public <T> ComponentAdapter<T> createComponentAdapter(ComponentMonitor componentMonitor, LifecycleStrategy lifecycleStrategy, Properties componentProperties, Object componentKey, Class<T> componentImplementation, Parameter... parameters) throws PicoCompositionException {
028 return wrapLifeCycle(INJECTOR, lifecycleStrategy);
029 }
030 };
031
032 @Test
033 public void passesOnLifecycleOperations() {
034
035 LifecycleStrategy adapter = (LifecycleStrategy) ais.createComponentAdapter(new NullComponentMonitor(), strategy, new Properties(), null, null, new Parameter[0]);
036 assertEquals("org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter", adapter.getClass().getName());
037 Touchable touchable = new SimpleTouchable();
038 adapter.start(touchable);
039 adapter.stop(touchable);
040 adapter.dispose(touchable);
041 assertEquals("<start<stop<dispose", strategy.recording());
042 }
043
044 @Test
045 public void canHaveMonitorChanged() {
046 ComponentMonitorStrategy adapter = (ComponentMonitorStrategy) ais.createComponentAdapter(new NullComponentMonitor(), strategy, new Properties(), Foo.class, Foo.class, new Parameter[0]);
047 assertTrue(adapter.currentMonitor() instanceof NullComponentMonitor);
048 adapter.changeMonitor(new WriterComponentMonitor(new PrintWriter(System.out)));
049 assertTrue(adapter.currentMonitor() instanceof WriterComponentMonitor);
050
051 }
052
053 public static class Foo implements Startable {
054 public void start() {
055 }
056 public void stop() {
057 }
058 }
059
060 }