Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

MessageHandlerTest.kt 3.0KB

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