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.

PrivmsgProcessorTest.kt 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package com.dmdirc.ktirc.messages.processors
  2. import com.dmdirc.ktirc.TestConstants
  3. import com.dmdirc.ktirc.events.ActionReceived
  4. import com.dmdirc.ktirc.events.CtcpReceived
  5. import com.dmdirc.ktirc.events.MessageReceived
  6. import com.dmdirc.ktirc.model.IrcMessage
  7. import com.dmdirc.ktirc.model.User
  8. import com.dmdirc.ktirc.params
  9. import com.dmdirc.ktirc.util.currentTimeProvider
  10. import org.junit.jupiter.api.Assertions.assertEquals
  11. import org.junit.jupiter.api.BeforeEach
  12. import org.junit.jupiter.api.Test
  13. internal class PrivmsgProcessorTest {
  14. @BeforeEach
  15. fun setUp() {
  16. currentTimeProvider = { TestConstants.time }
  17. }
  18. @Test
  19. fun `raises message received event`() {
  20. val events = PrivmsgProcessor().process(
  21. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "hack the planet!")))
  22. assertEquals(1, events.size)
  23. val event = events[0] as MessageReceived
  24. assertEquals(TestConstants.time, event.metadata.time)
  25. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  26. assertEquals("#crashandburn", event.target)
  27. assertEquals("hack the planet!", event.message)
  28. }
  29. @Test
  30. fun `raises action received event with content`() {
  31. val events = PrivmsgProcessor().process(
  32. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001ACTION hacks the planet\u0001")))
  33. assertEquals(1, events.size)
  34. val event = events[0] as ActionReceived
  35. assertEquals(TestConstants.time, event.metadata.time)
  36. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  37. assertEquals("#crashandburn", event.target)
  38. assertEquals("hacks the planet", event.action)
  39. }
  40. @Test
  41. fun `raises action received event without content`() {
  42. val events = PrivmsgProcessor().process(
  43. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001ACTION\u0001")))
  44. assertEquals(1, events.size)
  45. val event = events[0] as ActionReceived
  46. assertEquals(TestConstants.time, event.metadata.time)
  47. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  48. assertEquals("#crashandburn", event.target)
  49. assertEquals("", event.action)
  50. }
  51. @Test
  52. fun `raises action received event with lowercase type`() {
  53. val events = PrivmsgProcessor().process(
  54. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001action hacks the planet\u0001")))
  55. assertEquals(1, events.size)
  56. val event = events[0] as ActionReceived
  57. assertEquals(TestConstants.time, event.metadata.time)
  58. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  59. assertEquals("#crashandburn", event.target)
  60. assertEquals("hacks the planet", event.action)
  61. }
  62. @Test
  63. fun `raises CTCP received event with content`() {
  64. val events = PrivmsgProcessor().process(
  65. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001PING 12345\u0001")))
  66. assertEquals(1, events.size)
  67. val event = events[0] as CtcpReceived
  68. assertEquals(TestConstants.time, event.metadata.time)
  69. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  70. assertEquals("#crashandburn", event.target)
  71. assertEquals("PING", event.type)
  72. assertEquals("12345", event.content)
  73. }
  74. @Test
  75. fun `raises CTCP received event with content when containing unicode chars`() {
  76. val events = PrivmsgProcessor().process(
  77. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001PING 👩‍💻\u0001")))
  78. assertEquals(1, events.size)
  79. val event = events[0] as CtcpReceived
  80. assertEquals(TestConstants.time, event.metadata.time)
  81. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  82. assertEquals("#crashandburn", event.target)
  83. assertEquals("PING", event.type)
  84. assertEquals("👩‍💻", event.content)
  85. }
  86. @Test
  87. fun `raises CTCP received event without content`() {
  88. val events = PrivmsgProcessor().process(
  89. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001PING\u0001")))
  90. assertEquals(1, events.size)
  91. val event = events[0] as CtcpReceived
  92. assertEquals(TestConstants.time, event.metadata.time)
  93. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  94. assertEquals("#crashandburn", event.target)
  95. assertEquals("PING", event.type)
  96. assertEquals("", event.content)
  97. }
  98. @Test
  99. fun `does nothing if prefix missing`() {
  100. val events = PrivmsgProcessor().process(
  101. IrcMessage(emptyMap(), null, "PRIVMSG", params("#crashandburn", "hack the planet!")))
  102. assertEquals(0, events.size)
  103. }
  104. }