您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

MessageHandlerTest.kt 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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.ServerReady
  7. import com.dmdirc.ktirc.events.ServerWelcome
  8. import com.dmdirc.ktirc.messages.MessageProcessor
  9. import com.dmdirc.ktirc.model.IrcMessage
  10. import com.nhaarman.mockitokotlin2.*
  11. import kotlinx.coroutines.channels.Channel
  12. import kotlinx.coroutines.runBlocking
  13. import org.junit.jupiter.api.Test
  14. internal class MessageHandlerTest {
  15. private val ircClient = mock<IrcClient>()
  16. private val nickProcessor = mock<MessageProcessor> {
  17. on { commands } doReturn arrayOf("FOO", "NICK")
  18. }
  19. private val joinProcessor = mock<MessageProcessor> {
  20. on { commands } doReturn arrayOf("BAR", "JOIN")
  21. }
  22. @Test
  23. fun `MessageHandler passes message on to correct processor`() = runBlocking<Unit> {
  24. val handler = MessageHandler(listOf(joinProcessor, nickProcessor), mutableListOf())
  25. val message = IrcMessage(emptyMap(), null, "JOIN", emptyList())
  26. with(Channel<IrcMessage>(1)) {
  27. send(message)
  28. close()
  29. handler.processMessages(ircClient, this)
  30. }
  31. verify(joinProcessor).process(message)
  32. }
  33. @Test
  34. fun `MessageHandler reads multiple messages`() = runBlocking<Unit> {
  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. }
  51. @Test
  52. fun `MessageHandler invokes all event handler with all returned events`() = runBlocking<Unit> {
  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(TestConstants.time), ServerWelcome(TestConstants.time, "the.gibson", "acidBurn")))
  58. with(Channel<IrcMessage>(1)) {
  59. send(joinMessage)
  60. close()
  61. handler.processMessages(ircClient, this)
  62. }
  63. verify(eventHandler1).processEvent(same(ircClient), isA<ServerConnected>())
  64. verify(eventHandler1).processEvent(same(ircClient), isA<ServerWelcome>())
  65. verify(eventHandler2).processEvent(same(ircClient), isA<ServerConnected>())
  66. verify(eventHandler2).processEvent(same(ircClient), isA<ServerWelcome>())
  67. }
  68. @Test
  69. fun `MessageHandler emits custom events to all handlers`() = runBlocking<Unit> {
  70. val eventHandler1 = mock<EventHandler>()
  71. val eventHandler2 = mock<EventHandler>()
  72. val handler = MessageHandler(emptyList(), mutableListOf(eventHandler1, eventHandler2))
  73. handler.emitEvent(ircClient, ServerWelcome(TestConstants.time, "the.gibson", "acidBurn"))
  74. verify(eventHandler1).processEvent(same(ircClient), isA<ServerWelcome>())
  75. verify(eventHandler2).processEvent(same(ircClient), isA<ServerWelcome>())
  76. }
  77. @Test
  78. fun `MessageHandler emits events returned from handler`() = runBlocking<Unit> {
  79. val eventHandler1 = mock<EventHandler> {
  80. on { processEvent(any(), isA<ServerWelcome>()) } doReturn listOf(ServerReady(TestConstants.time))
  81. }
  82. val eventHandler2 = mock<EventHandler>()
  83. val handler = MessageHandler(emptyList(), mutableListOf(eventHandler1, eventHandler2))
  84. handler.emitEvent(ircClient, ServerWelcome(TestConstants.time, "the.gibson", "acidBurn"))
  85. verify(eventHandler1).processEvent(same(ircClient), isA<ServerReady>())
  86. verify(eventHandler2).processEvent(same(ircClient), isA<ServerReady>())
  87. }
  88. }