package org.limewire.core.impl.tests; import org.limewire.core.impl.CoreGlueModule; import org.limewire.gnutella.tests.LimeTestUtils.BlockingConnectionFactoryModule; import org.limewire.inject.GuiceUtils; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Module; import com.google.inject.Stage; import com.google.inject.util.Modules; import com.limegroup.gnutella.LifecycleManager; import com.limegroup.gnutella.LimeWireCoreModule; public class CoreGlueTestUtils { /** * Creates the Guice injector with the limewire default modules and the * test module that can override bindings in the former modules. * * @param module the test modules that can override bindings * @param callbackClass the class that is used as a callback * @return the injector */ public static Injector createInjector(Module...modules) { return createInjector(Stage.DEVELOPMENT, modules); } public static Injector createInjector(Stage stage, Module...modules) { Module combinedReplacements = Modules.combine(modules); Module combinedOriginals = Modules.combine(new LimeWireCoreModule(null), new CoreGlueModule(), new BlockingConnectionFactoryModule()); Module replaced = Modules.override(combinedOriginals).with(combinedReplacements); return Guice.createInjector(stage, replaced); } /** * Creates the Guice injector with the limewire default modules and the * test module that can override bindings in the former modules. * <p> * Also starts the {@link LifecycleManager}. * * @param module the test modules that can override bindings * @param callbackClass the class that is used as a callback * @return the injector */ public static Injector createInjectorAndStart(Module...modules) { // Use PRODUCTION to ensure all Services are created. Injector injector = createInjector(Stage.DEVELOPMENT, modules); GuiceUtils.loadEagerSingletons(injector); LifecycleManager lifecycleManager = injector.getInstance(LifecycleManager.class); lifecycleManager.start(); return injector; } }