Add simple unit test and fix event handler ordering
This commit is contained in:
parent
9897de48a0
commit
4709b93d80
@ -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));
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
39
src/test/java/dev/kske/eventbus/EventBusTest.java
Normal file
39
src/test/java/dev/kske/eventbus/EventBusTest.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
9
src/test/java/dev/kske/eventbus/SimpleEvent.java
Normal file
9
src/test/java/dev/kske/eventbus/SimpleEvent.java
Normal 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 {}
|
Loading…
Reference in New Issue
Block a user