Archived
1
0
Fork 0

No longer use Spek

This commit is contained in:
Moritz Ruth 2020-09-09 23:26:13 +02:00
parent 0689944d77
commit 4be30418fb
3 changed files with 180 additions and 180 deletions

View file

@ -34,8 +34,8 @@ dependencies {
// Testing
testImplementation("io.strikt:strikt-core:0.26.1")
testImplementation("org.spekframework.spek2:spek-dsl-jvm:$spekVersion")
testRuntimeOnly("org.spekframework.spek2:spek-runner-junit5:$spekVersion")
testImplementation("org.junit.jupiter:junit-jupiter-api:5.6.2")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.6.2")
}
tasks {
@ -51,8 +51,6 @@ tasks {
}
test {
useJUnitPlatform {
includeEngines("spek2")
}
useJUnitPlatform()
}
}

View file

@ -1,18 +1,17 @@
package space.blokk.chat
import org.spekframework.spek2.Spek
import org.spekframework.spek2.style.specification.describe
import org.junit.jupiter.api.Test
import strikt.api.expectThat
import strikt.assertions.isEqualTo
object FormattingCodeTest : Spek({
describe("FormattingCode") {
it("correctly translates to a string") {
expectThat("${FormattingCode.AQUA}").isEqualTo("§b")
}
it("can be appended to another FormattingCode using the + operator") {
expectThat(FormattingCode.AQUA + FormattingCode.BLACK).isEqualTo("§b§0")
}
class FormattingCodeTest {
@Test
fun `correctly translates to a string`() {
expectThat("${FormattingCode.AQUA}").isEqualTo("§b")
}
})
@Test
fun `can be appended to another FormattingCode using the + operator`() {
expectThat(FormattingCode.AQUA + FormattingCode.BLACK).isEqualTo("§b§0")
}
}

View file

@ -4,199 +4,202 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import org.spekframework.spek2.Spek
import org.spekframework.spek2.style.specification.describe
import org.junit.jupiter.api.Test
import strikt.api.expectThat
import strikt.api.expectThrows
import strikt.assertions.*
import kotlin.system.measureTimeMillis
private abstract class TestEvent : Event()
abstract class TestEvent : Event()
private class FirstEvent : TestEvent()
private class SecondEvent : TestEvent()
object EventBusTest : Spek({
describe("EventBus") {
val eventBus by memoized { EventBus(TestEvent::class, CoroutineScope(Dispatchers.Default)) }
class EventBusTest {
val eventBus = EventBus(TestEvent::class, CoroutineScope(Dispatchers.Default))
it("calls the handler exactly 1 time when the event is emitted 1 time") {
var calledCount = 0
eventBus.register(object : Listener {
@EventHandler
fun onFirstEvent(event: FirstEvent) {
calledCount++
}
})
@Test
fun `calls the handler exactly 1 time when the event is emitted 1 time`() {
var calledCount = 0
eventBus.register(object : Listener {
@EventHandler
fun onFirstEvent(event: FirstEvent) {
calledCount++
}
})
runBlocking { eventBus.emit(FirstEvent()) }
expectThat(calledCount).isEqualTo(1)
runBlocking { eventBus.emit(FirstEvent()) }
expectThat(calledCount).isEqualTo(1)
}
@Test
fun `calls the handler exactly 3 times when the event is emitted 3 times`() {
var calledCount = 0
eventBus.register(object : Listener {
@EventHandler
fun onFirstEvent(event: FirstEvent) {
calledCount++
}
})
runBlocking {
eventBus.emit(FirstEvent())
eventBus.emit(FirstEvent())
eventBus.emit(FirstEvent())
}
it("calls the handler exactly 3 times when the event is emitted 3 times") {
var calledCount = 0
eventBus.register(object : Listener {
@EventHandler
fun onFirstEvent(event: FirstEvent) {
calledCount++
}
})
expectThat(calledCount).isEqualTo(3)
}
runBlocking {
eventBus.emit(FirstEvent())
eventBus.emit(FirstEvent())
eventBus.emit(FirstEvent())
@Test
fun `calls no handlers if no event is emitted`() {
var onFirstEventCalled = false
var onSecondEventCalled = false
eventBus.register(object : Listener {
@EventHandler
fun onFirstEvent(event: FirstEvent) {
onFirstEventCalled = true
}
expectThat(calledCount).isEqualTo(3)
}
@EventHandler
fun onSecondEvent(event: SecondEvent) {
onSecondEventCalled = true
}
})
it("calls no handlers if no event is emitted") {
var onFirstEventCalled = false
var onSecondEventCalled = false
eventBus.register(object : Listener {
@EventHandler
fun onFirstEvent(event: FirstEvent) {
onFirstEventCalled = true
}
// No emit
@EventHandler
fun onSecondEvent(event: SecondEvent) {
onSecondEventCalled = true
}
})
expectThat(onFirstEventCalled).isFalse()
expectThat(onSecondEventCalled).isFalse()
}
// No emit
expectThat(onFirstEventCalled).isFalse()
expectThat(onSecondEventCalled).isFalse()
}
it("calls handlers for supertypes of the emitted event") {
var onTestEventCalled = false
var onFirstEventCalled = false
eventBus.register(object : Listener {
@EventHandler
fun onTestEvent(event: TestEvent) {
onTestEventCalled = true
}
@EventHandler
fun onFirstEvent(event: FirstEvent) {
onFirstEventCalled = true
}
})
runBlocking { eventBus.emit(FirstEvent()) }
expectThat(onTestEventCalled).isTrue()
expectThat(onFirstEventCalled).isTrue()
}
it("stops calling handlers after they were unregistered") {
var called = false
val listener = eventBus.register(object : Listener {
@EventHandler
fun onFirstEvent(event: FirstEvent) {
called = true
}
})
eventBus.unregister(listener)
runBlocking { eventBus.emit(FirstEvent()) }
expectThat(called).isFalse()
}
it("throws an error if an event handler function has an invalid signature") {
expectThrows<EventBus.InvalidEventHandlerException> {
eventBus.register(object : Listener {
@EventHandler
fun onEvent(coolParam: String) {
}
})
@Test
fun `calls handlers for supertypes of the emitted event`() {
var onTestEventCalled = false
var onFirstEventCalled = false
eventBus.register(object : Listener {
@EventHandler
fun onTestEvent(event: TestEvent) {
onTestEventCalled = true
}
expectThrows<EventBus.InvalidEventHandlerException> {
eventBus.register(object : Listener {
@EventHandler
fun onFirstEvent(coolParam: String, event: FirstEvent) {
}
})
@EventHandler
fun onFirstEvent(event: FirstEvent) {
onFirstEventCalled = true
}
})
expectThrows<EventBus.InvalidEventHandlerException> {
eventBus.register(object : Listener {
@EventHandler
fun onFirstEvent(event: FirstEvent, coolParam: String) {
}
})
runBlocking { eventBus.emit(FirstEvent()) }
expectThat(onTestEventCalled).isTrue()
expectThat(onFirstEventCalled).isTrue()
}
@Test
fun `stops calling handlers after they were unregistered`() {
var called = false
val listener = eventBus.register(object : Listener {
@EventHandler
fun onFirstEvent(event: FirstEvent) {
called = true
}
}
})
it("calls handlers in the right order, sorted by priority") {
val order = mutableListOf<EventPriority>()
eventBus.unregister(listener)
eventBus.register(object : Listener {
@EventHandler(EventPriority.HIGHEST)
fun onFirstEventHighest(event: FirstEvent) {
order.add(EventPriority.HIGHEST)
}
runBlocking { eventBus.emit(FirstEvent()) }
expectThat(called).isFalse()
}
@EventHandler(EventPriority.LOW)
fun onFirstEventLow(event: FirstEvent) {
order.add(EventPriority.LOW)
}
@EventHandler(EventPriority.HIGHER)
fun onFirstEventHigher(event: FirstEvent) {
order.add(EventPriority.HIGHER)
}
@EventHandler(EventPriority.LOWEST)
fun onFirstEventLowest(event: FirstEvent) {
order.add(EventPriority.LOWEST)
}
@EventHandler(EventPriority.MONITOR)
fun onFirstEventMonitor(event: FirstEvent) {
order.add(EventPriority.MONITOR)
}
@EventHandler(EventPriority.LOWER)
fun onFirstEventLower(event: FirstEvent) {
order.add(EventPriority.LOWER)
}
@EventHandler(EventPriority.NORMAL)
fun onFirstEventNormal(event: FirstEvent) {
order.add(EventPriority.NORMAL)
}
@EventHandler(EventPriority.HIGH)
fun onFirstEventHigh(event: FirstEvent) {
order.add(EventPriority.HIGH)
}
})
runBlocking { eventBus.emit(FirstEvent()) }
expectThat(order).isSorted(Comparator.comparing<EventPriority, Int> { it.ordinal })
}
it("suspends until all handlers ran") {
val delay = 2000L
@Test
fun `throws an error if an event handler function has an invalid signature`() {
expectThrows<EventBus.InvalidEventHandlerException> {
eventBus.register(object : Listener {
@EventHandler
suspend fun onFirstEvent(event: FirstEvent) {
// Simulate long running operation
delay(2000)
fun onEvent(coolParam: String) {
}
})
}
val duration = measureTimeMillis { runBlocking { eventBus.emit(FirstEvent()) } }
expectThat(duration).isGreaterThanOrEqualTo(delay)
expectThrows<EventBus.InvalidEventHandlerException> {
eventBus.register(object : Listener {
@EventHandler
fun onFirstEvent(coolParam: String, event: FirstEvent) {
}
})
}
expectThrows<EventBus.InvalidEventHandlerException> {
eventBus.register(object : Listener {
@EventHandler
fun onFirstEvent(event: FirstEvent, coolParam: String) {
}
})
}
}
})
@Test
fun `calls handlers in the right order, sorted by priority`() {
val order = mutableListOf<EventPriority>()
eventBus.register(object : Listener {
@EventHandler(EventPriority.HIGHEST)
fun onFirstEventHighest(event: FirstEvent) {
order.add(EventPriority.HIGHEST)
}
@EventHandler(EventPriority.LOW)
fun onFirstEventLow(event: FirstEvent) {
order.add(EventPriority.LOW)
}
@EventHandler(EventPriority.HIGHER)
fun onFirstEventHigher(event: FirstEvent) {
order.add(EventPriority.HIGHER)
}
@EventHandler(EventPriority.LOWEST)
fun onFirstEventLowest(event: FirstEvent) {
order.add(EventPriority.LOWEST)
}
@EventHandler(EventPriority.MONITOR)
fun onFirstEventMonitor(event: FirstEvent) {
order.add(EventPriority.MONITOR)
}
@EventHandler(EventPriority.LOWER)
fun onFirstEventLower(event: FirstEvent) {
order.add(EventPriority.LOWER)
}
@EventHandler(EventPriority.NORMAL)
fun onFirstEventNormal(event: FirstEvent) {
order.add(EventPriority.NORMAL)
}
@EventHandler(EventPriority.HIGH)
fun onFirstEventHigh(event: FirstEvent) {
order.add(EventPriority.HIGH)
}
})
runBlocking { eventBus.emit(FirstEvent()) }
expectThat(order).isSorted(Comparator.comparing<EventPriority, Int> { it.ordinal })
}
@Test
fun `suspends until all handlers ran`() {
val delay = 2000L
eventBus.register(object : Listener {
@EventHandler
suspend fun onFirstEvent(event: FirstEvent) {
// Simulate long running operation
delay(2000)
}
})
val duration = measureTimeMillis { runBlocking { eventBus.emit(FirstEvent()) } }
expectThat(duration).isGreaterThanOrEqualTo(delay)
}
}