Add simple unit test and fix event handler ordering

This commit is contained in:
Kai S. K. Engelbart 2020-09-03 09:52:00 +02:00
parent 9897de48a0
commit 4709b93d80
Signed by: kske
GPG Key ID: 8BEB13EC5DF7EF13
4 changed files with 52 additions and 2 deletions

View File

@ -76,7 +76,7 @@ public final class EventBus {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
var realParam = (Class<? extends IEvent>) param; var realParam = (Class<? extends IEvent>) param;
if (!bindings.containsKey(realParam)) if (!bindings.containsKey(realParam))
bindings.put(realParam, new HashSet<>()); bindings.put(realParam, new TreeSet<>());
bindings.get(realParam).add(new EventHandler(listener, method, annotation)); bindings.get(realParam).add(new EventHandler(listener, method, annotation));
} }

View File

@ -32,12 +32,14 @@ final class EventHandler implements Comparable<EventHandler> {
/** /**
* Compares this to another event handler based on {@link Event#priority()}. In case of equal * Compares this to another event handler based on {@link Event#priority()}. In case of equal
* priority a non-zero value based on hash codes is returned. * priority a non-zero value based on hash codes is returned.
* <p>
* This is used to retrieve event handlers in the correct order from a tree set.
* *
* @since 0.0.1 * @since 0.0.1
*/ */
@Override @Override
public int compareTo(EventHandler other) { public int compareTo(EventHandler other) {
int priority = annotation.priority() - other.annotation.priority(); int priority = other.annotation.priority() - annotation.priority();
if (priority == 0) if (priority == 0)
priority = listener.hashCode() - other.listener.hashCode(); priority = listener.hashCode() - other.listener.hashCode();
return priority == 0 ? hashCode() - other.hashCode() : priority; return priority == 0 ? hashCode() - other.hashCode() : priority;

View File

@ -0,0 +1,39 @@
package dev.kske.eventbus;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.*;
/**
* Tests the of the event bus library.
*
* @author Kai S. K. Engelbart
* @since 0.0.1
*/
class EventBusTest implements EventListener {
public EventBus eventBus = new EventBus();
int hits;
@BeforeEach
public void registerListener() {
eventBus.registerListener(this);
}
@Test
void testDispatch() {
eventBus.dispatch(new SimpleEvent());
}
@Event(priority = 50)
public void onSimpleEventSecond(SimpleEvent event) {
++hits;
assertEquals(2, hits);
}
@Event(priority = 150)
public void onSimpleEventFirst(SimpleEvent event) {
++hits;
assertEquals(1, hits);
}
}

View File

@ -0,0 +1,9 @@
package dev.kske.eventbus;
/**
* A simple event for testing purposes.
*
* @author Kai S. K. Engelbart
* @since 0.0.1
*/
public class SimpleEvent implements IEvent {}