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 5.3KB

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