blob: 27e8775d7ae8beb22a9d4c66a40ec53b8ec964ab [file] [log] [blame]
package com.google.inject.lifecycle;
import com.google.inject.Guice;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import junit.framework.TestCase;
/** @author dhanji@gmail.com (Dhanji R. Prasanna) */
public class ParallelizedBroadcastTest extends TestCase {
private static final AtomicInteger called = new AtomicInteger();
public final void testCallable() throws InterruptedException {
called.set(0);
Lifecycle lifecycle = Guice.createInjector(new LifecycleModule() {
@Override
protected void configureLifecycle() {
bind(Runnable.class).to(AClass.class);
// Does not get called because the key does not expose the callable.
bind(Object.class).to(AClass.class);
bind(BaseClass.class).to(AClass.class);
callable(Runnable.class);
}
}).getInstance(Lifecycle.class);
final ExecutorService executorService = Executors.newFixedThreadPool(3);
lifecycle
.broadcast(Runnable.class, executorService)
.run();
executorService.shutdown();
executorService.awaitTermination(5L, TimeUnit.SECONDS);
assertEquals(2, called.get());
}
public static class BaseClass implements Runnable {
public void run() {
called.incrementAndGet();
}
}
public static class AClass extends BaseClass implements Runnable {
public void run() {
super.run();
}
}
}