package kr.debop4j.core.guava.eventbus; import com.google.common.collect.Lists; import com.google.common.eventbus.AsyncEventBus; import com.google.common.eventbus.DeadEvent; import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe; import kr.debop4j.core.guava.eventbus.events.CashPurchaseEvent; import kr.debop4j.core.guava.eventbus.subscriber.*; import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; import java.util.List; import java.util.concurrent.CountDownLatch; import static org.junit.Assert.assertEquals; /** * kr.debop4j.core.guava.eventbus.EventBusTest * * @author 배성혁 ( sunghyouk.bae@gmail.com ) * @since 12. 12. 10. */ @Slf4j public class EventBusTest { private EventPublisher eventPublisher; private CashPurchaseEventSubscriber cashPurchaseEventSubscriber; private CreditPurchaseEventSubscriber creditPurchaseEventSubscriber; private PurchaseEventSubscriber purchaseEventSubscriber; private EventBus eventBus; private AsyncEventBus asyncEventBus; private LongProcessSubscriber longProcessSubscriber; private DeadEventSubscriber deadEventSubscriber; private AllEventSubscriber allEventSubscriber; private MultiHandlerSubscriber multiHandlerSubscriber; private CountDownLatch doneSignal; private int numberLongEvents = 10; @Before public void setUp() { eventBus = new EventBus(); deadEventSubscriber = new DeadEventSubscriber(); eventBus.register(deadEventSubscriber); eventPublisher = new EventPublisher(eventBus); cashPurchaseEventSubscriber = new CashPurchaseEventSubscriber(eventBus); creditPurchaseEventSubscriber = new CreditPurchaseEventSubscriber(eventBus); purchaseEventSubscriber = new PurchaseEventSubscriber(eventBus); multiHandlerSubscriber = new MultiHandlerSubscriber(eventBus); } @Test public void cashPurchaseEventReceived() { generateCashPurchaseEvent(); assertEquals(1, cashPurchaseEventSubscriber.getHandledEvents().size()); assertEquals(0, creditPurchaseEventSubscriber.getHandledEvents().size()); assertEquals(CashPurchaseEvent.class, cashPurchaseEventSubscriber.getHandledEvents().get(0).getClass()); assertEquals(0, deadEventSubscriber.deadEvents.size()); } private void generateSimpleEvent() { eventPublisher.createSimpleEvent("simpleEvent"); } private void generateAllPurchaseEvents() { generateCashPurchaseEvent(); generateCreditPurchaseEvent(); } private void generateCreditPurchaseEvent() { eventPublisher.createCreditPurchaseEvent("Plane Tickets", "123456789", 25900L); } private void generateCashPurchaseEvent() { eventPublisher.createCashPurchaseEvent("Jeep Wrangler", 25000L); } private class DeadEventSubscriber { List<DeadEvent> deadEvents = Lists.newArrayList(); @Subscribe public void handleDeadEvent(DeadEvent deadEvent) { deadEvents.add(deadEvent); } } }