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.

ServerStateTest.kt 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package com.dmdirc.ktirc.model
  2. import com.dmdirc.ktirc.TestConstants
  3. import com.dmdirc.ktirc.events.EventMetadata
  4. import org.junit.jupiter.api.Assertions.*
  5. import org.junit.jupiter.api.Test
  6. internal class ServerStateTest {
  7. @Test
  8. fun `ServerState should use the initial nickname as local nickname`() {
  9. val serverState = ServerState("acidBurn", "")
  10. assertEquals("acidBurn", serverState.localNickname)
  11. }
  12. @Test
  13. fun `ServerState should use the initial name as server name`() {
  14. val serverState = ServerState("", "the.gibson")
  15. assertEquals("the.gibson", serverState.serverName)
  16. }
  17. @Test
  18. fun `ServerState should default status to disconnected`() {
  19. val serverState = ServerState("acidBurn", "")
  20. assertEquals(ServerStatus.Disconnected, serverState.status)
  21. }
  22. @Test
  23. fun `returns mode type for known channel mode`() {
  24. val serverState = ServerState("acidBurn", "")
  25. serverState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
  26. assertEquals(ChannelModeType.List, serverState.channelModeType('a'))
  27. assertEquals(ChannelModeType.SetUnsetParameter, serverState.channelModeType('d'))
  28. assertEquals(ChannelModeType.SetParameter, serverState.channelModeType('e'))
  29. assertEquals(ChannelModeType.NoParameter, serverState.channelModeType('g'))
  30. }
  31. @Test
  32. fun `returns whether a mode is a channel user mode or not`() {
  33. val serverState = ServerState("acidBurn", "")
  34. serverState.features[ServerFeature.ModePrefixes] = ModePrefixMapping("oqv", "@~+")
  35. assertTrue(serverState.isChannelUserMode('o'))
  36. assertTrue(serverState.isChannelUserMode('q'))
  37. assertTrue(serverState.isChannelUserMode('v'))
  38. assertFalse(serverState.isChannelUserMode('@'))
  39. assertFalse(serverState.isChannelUserMode('!'))
  40. assertFalse(serverState.isChannelUserMode('z'))
  41. }
  42. @Test
  43. fun `returns NoParameter for unknown channel mode`() {
  44. val serverState = ServerState("acidBurn", "")
  45. serverState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
  46. assertEquals(ChannelModeType.NoParameter, serverState.channelModeType('z'))
  47. }
  48. @Test
  49. fun `returns NoParameter for channel modes if feature doesn't exist`() {
  50. val serverState = ServerState("acidBurn", "")
  51. assertEquals(ChannelModeType.NoParameter, serverState.channelModeType('b'))
  52. }
  53. @Test
  54. fun `reset clears all state`() = with(ServerState("acidBurn", "")) {
  55. receivedWelcome = true
  56. status = ServerStatus.Connecting
  57. localNickname = "acidBurn3"
  58. serverName = "root.the.gibson"
  59. features[ServerFeature.Network] = "gibson"
  60. capabilities.advertisedCapabilities["sasl"] = "sure"
  61. sasl.saslBuffer = "in progress"
  62. batches["batch"] = Batch("type", emptyList(), EventMetadata(TestConstants.time))
  63. labelCounter.set(100)
  64. reset()
  65. assertFalse(receivedWelcome)
  66. assertEquals(ServerStatus.Disconnected, status)
  67. assertEquals("acidBurn", localNickname)
  68. assertEquals("", serverName)
  69. assertTrue(features.isEmpty())
  70. assertTrue(capabilities.advertisedCapabilities.isEmpty())
  71. assertEquals("", sasl.saslBuffer)
  72. assertTrue(batches.isEmpty())
  73. assertEquals(0, labelCounter.get())
  74. }
  75. }
  76. internal class ModePrefixMappingTest {
  77. @Test
  78. fun `ModePrefixMapping identifies which chars are prefixes`() {
  79. val mapping = ModePrefixMapping("oav", "+@-")
  80. assertTrue(mapping.isPrefix('+'))
  81. assertTrue(mapping.isPrefix('@'))
  82. assertFalse(mapping.isPrefix('!'))
  83. assertFalse(mapping.isPrefix('o'))
  84. }
  85. @Test
  86. fun `ModePrefixMapping identifies which chars are modes`() {
  87. val mapping = ModePrefixMapping("oav", "+@-")
  88. assertFalse(mapping.isMode('+'))
  89. assertFalse(mapping.isMode('@'))
  90. assertFalse(mapping.isMode('!'))
  91. assertTrue(mapping.isMode('o'))
  92. }
  93. @Test
  94. fun `ModePrefixMapping maps prefixes to modes`() {
  95. val mapping = ModePrefixMapping("oav", "+@-")
  96. assertEquals('o', mapping.getMode('+'))
  97. assertEquals('a', mapping.getMode('@'))
  98. assertEquals('v', mapping.getMode('-'))
  99. }
  100. @Test
  101. fun `ModePrefixMapping maps prefix strings to modes`() {
  102. val mapping = ModePrefixMapping("oav", "+@-")
  103. assertEquals("oa", mapping.getModes("+@"))
  104. assertEquals("o", mapping.getModes("+"))
  105. assertEquals("", mapping.getModes(""))
  106. assertEquals("vao", mapping.getModes("-@+"))
  107. }
  108. }