/* AWE - Amanzi Wireless Explorer
* http://awe.amanzi.org
* (C) 2008-2009, AmanziTel AB
*
* This library is provided under the terms of the Eclipse Public License
* as described at http://www.eclipse.org/legal/epl-v10.html. Any use,
* reproduction or distribution of the library constitutes recipient's
* acceptance of this agreement.
*
* This library is distributed WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.amanzi.awe.ui.manager;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Map;
import java.util.Set;
import org.amanzi.awe.ui.events.EventStatus;
import org.amanzi.awe.ui.events.impl.AWEStartedEvent;
import org.amanzi.awe.ui.listener.IAWEEventListenter;
import org.amanzi.awe.ui.listener.IAWEEventListenter.Priority;
import org.amanzi.awe.ui.manager.internal.Listener1;
import org.amanzi.awe.ui.manager.internal.Listener2;
import org.amanzi.awe.ui.manager.internal.Listener3;
import org.amanzi.testing.AbstractIntegrationTest;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* TODO Purpose of
* <p>
* </p>
*
* @author Nikolay Lagutko (nikolay.lagutko@amanzitel.com)
* @since 1.0.0
*/
public class AWEEventManagerTest extends AbstractIntegrationTest {
/** String UNEXPECTED_SIZE_OF_LISTENERS field */
private static final String UNEXPECTED_SIZE_OF_LISTENERS = "Unexpected size of listeners";
private AWEEventManager eventManager;
@Override
@Before
public void setUp() {
super.setUp();
eventManager = AWEEventManager.getManager();
eventManager.getListeners(Priority.NORMAL).clear();
}
@Override
@After
public void tearDown() {
eventManager.getListeners(Priority.NORMAL).clear();
super.tearDown();
}
@Test
public void testCheckAddListener() {
Listener1 listener = new Listener1();
eventManager.addListener(listener, EventStatus.AWE_STARTED);
Map<EventStatus, Set<IAWEEventListenter>> listenersMap = eventManager.getListeners(Priority.NORMAL);
assertEquals("Unexpected size of listened events", 1, listenersMap.size());
Set<IAWEEventListenter> listenerList = listenersMap.get(EventStatus.AWE_STARTED);
assertNotNull("Unexpected listeners list for AWE STARTED", listenerList);
assertEquals(UNEXPECTED_SIZE_OF_LISTENERS, 1, listenerList.size());
assertTrue("Unexpected listener", listenerList.contains(listener));
}
@Test
public void testCheckAddMultiEventListener() {
Listener1 listener = new Listener1();
eventManager.addListener(listener, EventStatus.values());
Map<EventStatus, Set<IAWEEventListenter>> listenersMap = eventManager.getListeners(Priority.NORMAL);
assertEquals("Unexpected size of listened events", EventStatus.values().length, listenersMap.size());
for (EventStatus singleStatus : EventStatus.values()) {
Set<IAWEEventListenter> listenerList = listenersMap.get(singleStatus);
assertNotNull("Unexpected listeners list for " + singleStatus, listenerList);
assertEquals(UNEXPECTED_SIZE_OF_LISTENERS, 1, listenerList.size());
assertTrue("Unexpected listener", listenerList.contains(listener));
}
}
@Test
public void testCheckAddMultiEventListeners() {
Listener1 listener1 = new Listener1();
Listener2 listener2 = new Listener2();
Listener3 listener3 = new Listener3();
eventManager.addListener(listener1, EventStatus.AWE_STARTED);
eventManager.addListener(listener2, EventStatus.PROJECT_CHANGED);
eventManager.addListener(listener3, EventStatus.AWE_STARTED, EventStatus.PROJECT_CHANGED);
Map<EventStatus, Set<IAWEEventListenter>> listenersMap = eventManager.getListeners(Priority.NORMAL);
assertEquals("Unexpected size of listened events", 2, listenersMap.size());
// check awe started
Set<IAWEEventListenter> listenerList = listenersMap.get(EventStatus.AWE_STARTED);
assertNotNull("Unexpected listeners list for AWE_STARTED", listenerList);
assertEquals(UNEXPECTED_SIZE_OF_LISTENERS, 2, listenerList.size());
assertTrue("Unexpected listener1", listenerList.contains(listener1));
assertTrue("Unexpected listener3", listenerList.contains(listener3));
// check project changed
listenerList = listenersMap.get(EventStatus.PROJECT_CHANGED);
assertNotNull("Unexpected listeners list for PROJECT CHANGED", listenerList);
assertEquals(UNEXPECTED_SIZE_OF_LISTENERS, 2, listenerList.size());
assertTrue("Unexpected listener2", listenerList.contains(listener2));
assertTrue("Unexpected listener3", listenerList.contains(listener3));
}
@Test
public void testCheckEventFiring() {
IAWEEventListenter listener1 = mock(IAWEEventListenter.class);
when(listener1.getPriority()).thenReturn(Priority.NORMAL);
IAWEEventListenter listener2 = mock(IAWEEventListenter.class);
when(listener2.getPriority()).thenReturn(Priority.NORMAL);
IAWEEventListenter listener3 = mock(IAWEEventListenter.class);
when(listener3.getPriority()).thenReturn(Priority.NORMAL);
eventManager.addListener(listener1, EventStatus.AWE_STARTED);
eventManager.addListener(listener2, EventStatus.PROJECT_CHANGED);
eventManager.addListener(listener3, EventStatus.AWE_STARTED, EventStatus.PROJECT_CHANGED);
eventManager.fireAWEStartedEvent();
verify(listener1).onEvent(eq(new AWEStartedEvent(null)));
verify(listener2, never()).onEvent(eq(new AWEStartedEvent(null)));
verify(listener3).onEvent(eq(new AWEStartedEvent(null)));
}
@Test
public void testCheckDuplicatedListener() {
Listener1 listener = new Listener1();
eventManager.addListener(listener, EventStatus.AWE_STARTED);
Set<IAWEEventListenter> listeners = eventManager.getListeners(Priority.NORMAL).get(EventStatus.AWE_STARTED);
eventManager.addListener(listener, EventStatus.AWE_STARTED);
assertEquals("size should not increase since listener is duplicated", listeners.size(),
eventManager.getListeners(Priority.NORMAL).get(EventStatus.AWE_STARTED).size());
}
}