You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MessageHandlerTest.kt 3.1KB

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