From b196c7c2fe06d84e862648a8bf25058f72c6c0b1 Mon Sep 17 00:00:00 2001 From: therealbush Date: Sat, 2 Apr 2022 00:17:29 -1000 Subject: Nearly done --- src/test/kotlin/Test.kt | 189 ------------------------------------- src/test/kotlin/TestKotlin.kt | 215 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 215 insertions(+), 189 deletions(-) delete mode 100644 src/test/kotlin/Test.kt create mode 100644 src/test/kotlin/TestKotlin.kt (limited to 'src/test/kotlin') diff --git a/src/test/kotlin/Test.kt b/src/test/kotlin/Test.kt deleted file mode 100644 index 2bdb445..0000000 --- a/src/test/kotlin/Test.kt +++ /dev/null @@ -1,189 +0,0 @@ -import me.bush.illnamethislater.Event -import me.bush.illnamethislater.EventBus -import me.bush.illnamethislater.listener -import org.apache.logging.log4j.Level -import org.apache.logging.log4j.LogManager -import org.apache.logging.log4j.core.config.Configurator -import org.junit.jupiter.api.Assertions -import org.junit.jupiter.api.BeforeAll -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.TestInstance -import org.junit.jupiter.api.TestInstance.Lifecycle -import kotlin.random.Random - -/** - * I don't know how to do these.... - * - * @author bush - * @since 1.0.0 - */ -@TestInstance(Lifecycle.PER_CLASS) -class Test { - private lateinit var eventBus: EventBus - private val logger = LogManager.getLogger() - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - @BeforeAll - fun setup() { - Configurator.setRootLevel(Level.ALL) - - // Test that init works - logger.info("Initializing") - eventBus = EventBus() - - // Ensure no npe - logger.info("Logging empty debug info") - eventBus.debugInfo() - - // Test that basic subscribing reflection works - logger.info("Subscribing") - eventBus.subscribe(this) - - logger.info("Testing Events") - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - // Tests debug info format - @Test - fun debugInfoTest() { - eventBus.debugInfo() - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - // Tests autoboxing and internal data structure against primitives. - @Test - fun primitiveListenerTest() { - val random = Random.nextInt() - eventBus.post(random) - Assertions.assertEquals(random, primitiveTestValue) - } - - private var primitiveTestValue = 0 - - val primitiveListener = listener { - primitiveTestValue = it - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - // Tests unsubscribing of listeners which don't belong to a subscriber. - @Test - fun freeListenerTest() { - // Register listener and keep the value - val listener = eventBus.register(listener { - freeListenerTestValue = it - }) - val valueOne = "i love bush's eventbus <3" - val valueTwo = "sdklasdjsakdsadlksadlksdl" - // Will change the value - eventBus.post(valueOne) - Assertions.assertEquals(valueOne, freeListenerTestValue) - // Remove the listener - eventBus.unregister(listener) - // No effect - eventBus.post(valueTwo) - // Value will not change - Assertions.assertEquals(valueOne, freeListenerTestValue) - } - - private var freeListenerTestValue: String? = null - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - // Tests priority and receiveCancelled functionality. - @Test - fun myEventListenerTest() { - val event = MyEvent() - eventBus.post(event) - Assertions.assertEquals(event.lastListener, "myEventListener3") - } - - // First to be called; highest priority. - val myEventListener0 = listener(priority = 10) { - Assertions.assertEquals(it.lastListener, "") - it.lastListener = "myEventListener0" - it.cancel() - } - - // Will not be called; second-highest priority, no receiveCancelled. - val myEventListener1 - get() = listener(priority = 0) { - Assertions.assertTrue(false) - } - - // Second to be called; has receiveCancelled and can un-cancel the event. - fun myEventListener2() = listener(priority = Int.MIN_VALUE + 100, receiveCancelled = true) { - Assertions.assertEquals(it.lastListener, "myEventListener0") - it.lastListener = "myEventListener2" - it.cancelled = false - } - - // Last to be called; does not have receiveCancelled, but the last listener un-cancelled the event. - fun myEventListener3() = listener(priority = Int.MIN_VALUE) { - Assertions.assertEquals(it.lastListener, "myEventListener2") - it.lastListener = "myEventListener3" - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - // Tests external event cancel state functionality. - @Test - fun externalEventListenerTest() { - - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - // Tests parallel invocation functionality. todo how will this work with cancellability - @Test - fun parallelListenerTest() { - - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - // Tests reflection against singleton object classes. - @Test - fun objectSubscriberTest() { - - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - // todo what else? - // todo ensure boolean functions return proper value (subscribe, unsubscribe, etc) -} - -// todo test changing cancellability -class MyEvent : Event() { - override val cancellable = true - - var lastListener = "" -} - -class ExternalEvent0 { - var canceled = false -} - -class ExternalEvent1 { - var cancelled = false -} - -// Should give us a warning about duplicates -class ExternalEvent2 { - var canceled = false - var cancelled = false -} diff --git a/src/test/kotlin/TestKotlin.kt b/src/test/kotlin/TestKotlin.kt new file mode 100644 index 0000000..2ae6313 --- /dev/null +++ b/src/test/kotlin/TestKotlin.kt @@ -0,0 +1,215 @@ +import me.bush.illnamethislater.Event +import me.bush.illnamethislater.EventBus +import me.bush.illnamethislater.listener +import org.apache.logging.log4j.Level +import org.apache.logging.log4j.LogManager +import org.apache.logging.log4j.core.config.Configurator +import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.TestInstance.Lifecycle +import kotlin.random.Random + +/** + * I don't know how to do these.... + * + * @author bush + * @since 1.0.0 + */ +@TestInstance(Lifecycle.PER_CLASS) +class Test { + private lateinit var eventBus: EventBus + private val logger = LogManager.getLogger() + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + @BeforeAll + fun setup() { + Configurator.setRootLevel(Level.ALL) + + // Test that init works + logger.info("Initializing") + eventBus = EventBus() + + // Ensure no npe + logger.info("Logging empty debug info") + eventBus.debugInfo() + + // Test that basic subscribing reflection works + logger.info("Subscribing") + eventBus.subscribe(this) + + logger.info("Testing Events") + } + + @AfterAll + fun unsubscribe() { + logger.info("Unsubscribing") + eventBus.unsubscribe(this) + eventBus.debugInfo() + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Tests debug info format + @Test + fun debugInfoTest() { + eventBus.debugInfo() + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Tests autoboxing and internal data structure against primitives. + @Test + fun primitiveListenerTest() { + val random = Random.nextInt() + eventBus.post(random) + Assertions.assertEquals(random, primitiveTestValue) + } + + private var primitiveTestValue = 0 + + val primitiveListener = listener { + primitiveTestValue = it + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Tests unsubscribing of listeners which don't belong to a subscriber. + @Test + fun freeListenerTest() { + // Register listener and keep the value + val listener = eventBus.register(listener { + freeListenerTestValue = it + }) + val valueOne = "i love bush's eventbus <3" + val valueTwo = "sdklasdjsakdsadlksadlksdl" + // Will change the value + eventBus.post(valueOne) + Assertions.assertEquals(valueOne, freeListenerTestValue) + // Remove the listener + eventBus.unregister(listener) + // No effect + eventBus.post(valueTwo) + // Value will not change + Assertions.assertEquals(valueOne, freeListenerTestValue) + } + + private var freeListenerTestValue: String? = null + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Tests priority and receiveCancelled functionality. + @Test + fun myEventListenerTest() { + val event = MyEvent() + eventBus.post(event) + Assertions.assertEquals(event.lastListener, "myEventListener3") + } + + // First to be called; highest priority. + val myEventListener0 = listener(priority = 10) { + Assertions.assertEquals(it.lastListener, "") + it.lastListener = "myEventListener0" + it.cancel() + } + + // Will not be called; second-highest priority, no receiveCancelled. + val myEventListener1 + get() = listener(priority = 0) { + Assertions.assertTrue(false) + } + + // Second to be called; has receiveCancelled and can un-cancel the event. + fun myEventListener2() = listener(priority = Int.MIN_VALUE + 100, receiveCancelled = true) { + Assertions.assertEquals(it.lastListener, "myEventListener0") + it.lastListener = "myEventListener2" + it.cancelled = false + } + + // Last to be called; does not have receiveCancelled, but the last listener un-cancelled the event. + fun myEventListener3() = listener(priority = Int.MIN_VALUE) { + Assertions.assertEquals(it.lastListener, "myEventListener2") + it.lastListener = "myEventListener3" + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Tests external event cancel state functionality. + @Test + fun externalEventListenerTest() { + var unchanged = "this will not change" + // Cancels the event + eventBus.register(listener(200) { + it.canceled = true + }) + // This shouldn't be called + eventBus.register(listener(100) { + unchanged = "changed" + }) + eventBus.post(ExternalEvent()) + Assertions.assertEquals(unchanged, "this will not change") + // Tests that duplicates are detected, and that both + // "canceled" and "cancelled" are detected as valid fields + eventBus.register(listener {}) + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Tests parallel invocation functionality. + @Test + fun parallelListenerTest() { + + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Tests reflection against singleton object classes. + @Test + fun objectSubscriberTest() { + eventBus.subscribe(ObjectSubscriber) + eventBus.post(Unit) + Assertions.assertTrue(ObjectSubscriber.willChange) + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + // todo test thread safety + // todo ensure boolean functions return proper value (subscribe, unsubscribe, etc) +} + +object ObjectSubscriber { + var willChange = false + + fun listener() = listener { + willChange = true + } +} + +class MyEvent : Event() { + override val cancellable = true + + var lastListener = "" + var someString = "donda" +} + +class ExternalEvent { + var canceled = false +} + +// Should give us a warning about duplicates +class ExternalDuplicates { + var canceled = false + var cancelled = false +} -- cgit