選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

MessageHandlerTest.kt 2.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package com.dmdirc.ktirc.io
  2. import com.dmdirc.ktirc.events.IrcEvent
  3. import com.dmdirc.ktirc.events.ServerConnected
  4. import com.dmdirc.ktirc.messages.MessageProcessor
  5. import com.nhaarman.mockitokotlin2.*
  6. import kotlinx.coroutines.channels.Channel
  7. import kotlinx.coroutines.runBlocking
  8. import org.junit.jupiter.api.Test
  9. internal class MessageHandlerTest {
  10. private val nickProcessor = mock<MessageProcessor> {
  11. on { commands } doReturn arrayOf("FOO", "NICK")
  12. }
  13. private val joinProcessor = mock<MessageProcessor> {
  14. on { commands } doReturn arrayOf("BAR", "JOIN")
  15. }
  16. @Test
  17. fun `MessageHandler passes message on to correct processor`() = runBlocking {
  18. val handler = MessageHandler(listOf(joinProcessor, nickProcessor)) {}
  19. val message = IrcMessage(null, null, "JOIN", emptyList())
  20. with(Channel<IrcMessage>(1)) {
  21. send(message)
  22. close()
  23. handler.processMessages(this)
  24. }
  25. verify(joinProcessor).process(message)
  26. Unit
  27. }
  28. @Test
  29. fun `MessageHandler reads multiple messages`() = runBlocking {
  30. val handler = MessageHandler(listOf(joinProcessor, nickProcessor)) {}
  31. val joinMessage = IrcMessage(null, null, "JOIN", emptyList())
  32. val nickMessage = IrcMessage(null, null, "NICK", emptyList())
  33. val otherMessage = IrcMessage(null, null, "OTHER", emptyList())
  34. with(Channel<IrcMessage>(3)) {
  35. send(joinMessage)
  36. send(nickMessage)
  37. send(otherMessage)
  38. close()
  39. handler.processMessages(this)
  40. }
  41. with(inOrder(joinProcessor, nickProcessor)) {
  42. verify(joinProcessor).process(joinMessage)
  43. verify(nickProcessor).process(nickMessage)
  44. }
  45. Unit
  46. }
  47. @Test
  48. fun `MessageHandler invokes event handler with returned events`() = runBlocking {
  49. val eventHandler = mock<(IrcEvent) -> Unit>()
  50. val handler = MessageHandler(listOf(joinProcessor, nickProcessor), eventHandler)
  51. val joinMessage = IrcMessage(null, null, "JOIN", emptyList())
  52. whenever(joinProcessor.process(any())).thenReturn(listOf(ServerConnected))
  53. with(Channel<IrcMessage>(1)) {
  54. send(joinMessage)
  55. close()
  56. handler.processMessages(this)
  57. }
  58. verify(eventHandler).invoke(ServerConnected)
  59. }
  60. }