package info.magnolia.objectfactory; import org.junit.Test; import org.picocontainer.ComponentMonitor; import org.picocontainer.LifecycleStrategy; import org.picocontainer.MutablePicoContainer; import org.picocontainer.PicoBuilder; import org.picocontainer.PicoContainer; import org.picocontainer.monitors.NullComponentMonitor; import info.magnolia.objectfactory.configuration.ComponentProviderConfiguration; import info.magnolia.objectfactory.configuration.ImplementationConfiguration; import info.magnolia.objectfactory.pico.PicoComponentProvider; import info.magnolia.objectfactory.pico.PicoLifecycleStrategy; import static org.junit.Assert.*; public class StartableTest { public static class Alpha { } @AtStartup public static class Beta implements Startable { private Alpha alpha; public Beta(Alpha alpha) { this.alpha = alpha; } @Override public void start() { } @Override public void stop() { } } @Test public void isStarted() { MutablePicoContainer parent = makeContainer(null, "parent"); MutablePicoContainer container = makeContainer(parent, "bogus"); PicoComponentProvider provider = new PicoComponentProvider(container); parent.start(); ComponentProviderConfiguration configuration = new ComponentProviderConfiguration(); configuration.addImplementation(new ImplementationConfiguration(Beta.class, Beta.class)); configuration.addImplementation(new ImplementationConfiguration(Alpha.class, Alpha.class)); provider.configure(configuration); Beta beta = container.getComponent(Beta.class); assertNotNull(beta.alpha); } protected MutablePicoContainer makeContainer(PicoContainer parent, String name) { ComponentMonitor componentMonitor = new NullComponentMonitor(); LifecycleStrategy lifecycleStrategy = new PicoLifecycleStrategy(componentMonitor); PicoBuilder picoBuilder = new PicoBuilder(parent) .withConstructorInjection() .withCaching() .withMonitor(componentMonitor) .withLifecycle(lifecycleStrategy); if (parent != null) { picoBuilder.addChildToParent(); } MutablePicoContainer pico = picoBuilder.build(); pico.setName(name); return pico; } }