package com.github.drapostolos.rdp4j;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
import org.mockito.Mockito;
public class NotifierTest {
@Test
public void canCheckIfListenerIsInstanceOfSpecificListenerInterface() throws Exception {
Set<Rdp4jListener> listeners = new HashSet<Rdp4jListener>();
DirectoryPollerListener listener = new DirectoryPollerListener() {
@Override
public void beforeStart(BeforeStartEvent event) {}
@Override
public void afterStop(AfterStopEvent event) {}
};
listeners.add(listener);
// when
ListenerNotifier notifier = new ListenerNotifier(listeners);
// then
assertThat(notifier.isInstanceOf(listener, DirectoryPollerListener.class)).isTrue();
assertThat(notifier.isInstanceOf(listener, DirectoryListener.class)).isFalse();
}
@Test
public void constructNotifierWithNoListener() throws Exception {
// when
ListenerNotifier n = new ListenerNotifier(new HashSet<Rdp4jListener>());
// then
assertThat(n.listeners.size()).isEqualTo(0);
}
@Test
public void constructNotifierWithOneListener() throws Exception {
// given
Set<Rdp4jListener> l = new HashSet<Rdp4jListener>();
l.add(new Rdp4jListener() {});
// when
ListenerNotifier n = new ListenerNotifier(l);
// then
assertThat(n.listeners.size()).isEqualTo(1);
}
@Test
public void AddAndRemoveListeners() throws Exception {
ListenerNotifier n = new ListenerNotifier(new HashSet<Rdp4jListener>());
assertThat(n.listeners.size()).isEqualTo(0);
Rdp4jListener l = new Rdp4jListener() {};
n.addListener(l);
assertThat(n.listeners.size()).isEqualTo(1);
n.removeListener(l);
assertThat(n.listeners.size()).isEqualTo(0);
}
@Test
public void addSameListenerTwice() throws Exception {
// given
ListenerNotifier n = new ListenerNotifier(new HashSet<Rdp4jListener>());
// when
Rdp4jListener l = new Rdp4jListener() {};
n.addListener(l);
n.addListener(l);
// then
assertThat(n.listeners.size()).isEqualTo(1);
}
@Test
public void notifyListenersOfFileAddedEvent() throws Exception {
// given
ListenerNotifier n = new ListenerNotifier(new HashSet<Rdp4jListener>());
DirectoryListener l1 = Mockito.mock(DirectoryListener.class);
IoErrorListener l2 = Mockito.mock(IoErrorListener.class);
DirectoryListener l3 = Mockito.mock(DirectoryListener.class);
IoErrorListener l4 = Mockito.mock(IoErrorListener.class);
n.addListener(l1);
n.addListener(l2);
n.addListener(l3);
n.addListener(l4);
// when
FileAddedEvent e = new FileAddedEvent(null, null, null);
n.fileAdded(e);
// n.notifyListeners(e);
// then
Mockito.verify(l1).fileAdded(e);
Mockito.verifyNoMoreInteractions(l1);
Mockito.verify(l3).fileAdded(e);
Mockito.verifyNoMoreInteractions(l3);
Mockito.verifyZeroInteractions(l2);
Mockito.verifyZeroInteractions(l4);
}
}