diff --git a/src/main/kotlin/no/iktdev/eventi/Annotation.kt b/src/main/kotlin/no/iktdev/eventi/Annotation.kt new file mode 100644 index 0000000..86da2e3 --- /dev/null +++ b/src/main/kotlin/no/iktdev/eventi/Annotation.kt @@ -0,0 +1,5 @@ +package no.iktdev.eventi + +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.RUNTIME) +annotation class ListenerOrder(val value: Int) diff --git a/src/test/kotlin/no/iktdev/eventi/events/EventListenerRegistryTest.kt b/src/test/kotlin/no/iktdev/eventi/events/EventListenerRegistryTest.kt new file mode 100644 index 0000000..b166910 --- /dev/null +++ b/src/test/kotlin/no/iktdev/eventi/events/EventListenerRegistryTest.kt @@ -0,0 +1,61 @@ +package no.iktdev.eventi.events + +import no.iktdev.eventi.ListenerOrder +import no.iktdev.eventi.models.Event +import no.iktdev.eventi.testUtil.wipe +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test + +class EventListenerRegistryTest { + + @ListenerOrder(1) + class MockTest1() : EventListener() { + override fun onEvent(event: Event, history: List): Event? { + return null + } + } + + @ListenerOrder(2) + class MockTest2() : EventListener() { + override fun onEvent(event: Event, history: List): Event? { + return null + } + } + + @ListenerOrder(3) + class MockTest3() : EventListener() { + override fun onEvent(event: Event, history: List): Event? { + return null + } + } + + class MockTestRandom() : EventListener() { + override fun onEvent(event: Event, history: List): Event? { + return null + } + } + + @BeforeEach + fun clear() { + EventListenerRegistry.wipe() + } + + @Test + fun validateOrder() { + MockTestRandom() + MockTest1() + MockTest2() + MockTest3() + val listeners = EventListenerRegistry.getListeners() + // Assert + assertThat(listeners.map { it::class.simpleName }).containsExactly( + MockTest1::class.simpleName, // @ListenerOrder(1) + MockTest2::class.simpleName, // @ListenerOrder(2) + MockTest3::class.simpleName, // @ListenerOrder(3) + MockTestRandom::class.simpleName // no annotation → goes last + ) + } + +} \ No newline at end of file diff --git a/src/test/kotlin/no/iktdev/eventi/tasks/TaskListenerRegistryTest.kt b/src/test/kotlin/no/iktdev/eventi/tasks/TaskListenerRegistryTest.kt new file mode 100644 index 0000000..dfadac7 --- /dev/null +++ b/src/test/kotlin/no/iktdev/eventi/tasks/TaskListenerRegistryTest.kt @@ -0,0 +1,90 @@ +package no.iktdev.eventi.tasks + +import no.iktdev.eventi.ListenerOrder +import no.iktdev.eventi.events.EventListener +import no.iktdev.eventi.events.EventListenerRegistry +import no.iktdev.eventi.models.Event +import no.iktdev.eventi.models.Task +import no.iktdev.eventi.testUtil.wipe +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test + +class TaskListenerRegistryTest { + + + @ListenerOrder(1) + class MockTest1() : TaskListener() { + override fun getWorkerId(): String { + TODO("Not yet implemented") + } + override fun supports(task: Task): Boolean { + TODO("Not yet implemented") + } + override suspend fun onTask(task: Task): Event? { + TODO("Not yet implemented") + } + } + + @ListenerOrder(2) + class MockTest2() : TaskListener() { + override fun getWorkerId(): String { + TODO("Not yet implemented") + } + override fun supports(task: Task): Boolean { + TODO("Not yet implemented") + } + override suspend fun onTask(task: Task): Event? { + TODO("Not yet implemented") + } + } + + @ListenerOrder(3) + class MockTest3() : TaskListener() { + override fun getWorkerId(): String { + TODO("Not yet implemented") + } + override fun supports(task: Task): Boolean { + TODO("Not yet implemented") + } + override suspend fun onTask(task: Task): Event? { + TODO("Not yet implemented") + } + } + + class MockTestRandom() : TaskListener() { + override fun getWorkerId(): String { + TODO("Not yet implemented") + } + override fun supports(task: Task): Boolean { + TODO("Not yet implemented") + } + override suspend fun onTask(task: Task): Event? { + TODO("Not yet implemented") + } + } + + @BeforeEach + fun clear() { + TaskListenerRegistry.wipe() + } + + @Test + fun validateOrder() { + MockTestRandom() + MockTest1() + MockTest2() + MockTest3() + val listeners = TaskListenerRegistry.getListeners() + // Assert + assertThat(listeners.map { it::class.simpleName }).containsExactly( + MockTest1::class.simpleName, // @ListenerOrder(1) + MockTest2::class.simpleName, // @ListenerOrder(2) + MockTest3::class.simpleName, // @ListenerOrder(3) + MockTestRandom::class.simpleName // no annotation → goes last + ) + } + + +} \ No newline at end of file