Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

MessageHandlerTest.kt 2.9KB

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