package com.vladmihalcea.flexypool.event; import org.junit.Test; import org.mockito.Mockito; import java.util.Arrays; import java.util.Collections; import java.util.List; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.mockito.Mockito.when; /** * <code>EventPublisherTest</code> - EventPublisher Test * * @author Vlad Mihalcea */ public class EventPublisherTest { public static class FirstEvent extends Event { protected FirstEvent(String uniqueName) { super(uniqueName); } } public static class SecondEvent extends Event { protected SecondEvent(String uniqueName) { super(uniqueName); } } public static class FirstEventListener extends EventListener<FirstEvent> { private FirstEvent event; protected FirstEventListener() { super(FirstEvent.class); } @Override public void on(FirstEvent event) { this.event = event; } } public static class SecondEventListener extends EventListener<SecondEvent> { private SecondEvent event; protected SecondEventListener() { super(SecondEvent.class); } @Override public void on(SecondEvent event) { this.event = event; } } @Test public void testPublishWithNoListeners() { EventPublisher eventPublisher = new EventPublisher(); eventPublisher.publish(new ConnectionAcquireTimeoutEvent("123")); } @Test public void testPublishWithListeners() { FirstEventListener firstEventListener = new FirstEventListener(); SecondEventListener secondEventListener = new SecondEventListener(); EventPublisher eventPublisher = new EventPublisher( Arrays.asList(firstEventListener, secondEventListener) ); FirstEvent firstEvent = new FirstEvent("first"); SecondEvent secondEvent = new SecondEvent("second"); assertNull(firstEventListener.event); assertNull(secondEventListener.event); eventPublisher.publish(firstEvent); eventPublisher.publish(secondEvent); assertSame(firstEvent, firstEventListener.event); assertSame(secondEvent, secondEventListener.event); } @Test public void testNewInstance() { FirstEventListener firstEventListener = new FirstEventListener(); FirstEvent firstEvent = new FirstEvent("first"); EventListenerResolver eventListenerResolver = Mockito.mock(EventListenerResolver.class); List<FirstEventListener> eventListeners = Collections.<FirstEventListener>singletonList(firstEventListener); when(eventListenerResolver.resolveListeners()).thenReturn((List) eventListeners); EventPublisher eventPublisher = EventPublisher.newInstance(eventListenerResolver); assertNotNull(eventPublisher); assertNull(firstEventListener.event); eventPublisher.publish(firstEvent); assertSame(firstEvent, firstEventListener.event); } }