/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.core.notification;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author andrew00x
*/
public class EventServiceTest {
private EventService bus;
@BeforeMethod
public void setUp() {
bus = new EventService();
}
@Test
public void testSimpleEvent() {
final List<Object> events = new ArrayList<>();
bus.subscribe(new EventSubscriber<Date>() {
@Override
public void onEvent(Date event) {
events.add(event);
}
});
bus.subscribe(new EventSubscriber<String>() {
@Override
public void onEvent(String event) {
events.add(event);
}
});
bus.subscribe(new EventSubscriber<Long>() {
@Override
public void onEvent(Long event) {
events.add(event);
}
});
Date date = new Date();
bus.publish(date);
bus.publish("hello");
bus.publish(123L);
Assert.assertEquals(events.size(), 3);
Assert.assertTrue(events.contains(date));
Assert.assertTrue(events.contains("hello"));
Assert.assertTrue(events.contains(123L));
// ignored
bus.publish(new Object());
Assert.assertEquals(events.size(), 3);
}
static interface I {
}
static class Listener implements I, EventSubscriber<String> {
final List<String> events = new ArrayList<>();
@Override
public void onEvent(String event) {
events.add(event);
}
}
static class ExtListener extends Listener {
}
@Test
public void testRegisterHierarchicalListener() {
ExtListener listener = new ExtListener();
bus.subscribe(listener);
bus.publish("hello");
Assert.assertEquals(listener.events.size(), 1);
Assert.assertEquals(listener.events.get(0), "hello");
}
static class Event {
String data;
Event() {
this("event");
}
Event(String data) {
this.data = data;
}
@Override
public String toString() {
return data;
}
}
static class ExtEvent extends Event {
ExtEvent() {
super("ext_event");
}
}
@Test
public void testHierarchicalEvent() {
final List<String> events = new ArrayList<>();
// register two listeners.
// 1. Accept only Event type.
bus.subscribe(new EventSubscriber<Event>() {
@Override
public void onEvent(Event event) {
events.add(String.format("1:%s", event));
}
});
// 2. Accept Event and ExtEvent types.
bus.subscribe(new EventSubscriber<ExtEvent>() {
@Override
public void onEvent(ExtEvent event) {
events.add(String.format("2:%s", event));
}
});
bus.publish(new Event());
Assert.assertEquals(events.size(), 1);
Assert.assertEquals(events.get(0), "1:event");
events.clear();
bus.publish(new ExtEvent());
Assert.assertEquals(events.size(), 2);
Assert.assertTrue(events.contains("1:ext_event"));
Assert.assertTrue(events.contains("2:ext_event"));
}
@Test
public void testUnsubscribe() {
final List<String> events = new ArrayList<>();
EventSubscriber<Event> l = new EventSubscriber<Event>() {
@Override
public void onEvent(Event event) {
events.add(event.data);
}
};
bus.subscribe(l);
bus.publish(new Event());
Assert.assertEquals(events.size(), 1);
bus.unsubscribe(l);
events.clear();
bus.publish(new Event());
Assert.assertEquals(events.size(), 0);
}
}