Browse Source

Extract server names nicely

tags/v0.4.0
Chris Smith 5 years ago
parent
commit
16b6496566

+ 1
- 0
CHANGELOG View File

@@ -4,6 +4,7 @@ vNEXT (in development)
4 4
  * Added sendCtcp and sendAction message builders
5 5
  * Fix issue with messages being sent out of order, which sometimes caused problems connecting to passworded servers
6 6
  * Added 'network' server feature
7
+ * Added serverName field to ServerState
7 8
 
8 9
 v0.3.1
9 10
 

+ 1
- 1
src/main/kotlin/com/dmdirc/ktirc/IrcClient.kt View File

@@ -86,7 +86,7 @@ class IrcClientImpl(private val server: Server, private val profile: Profile) :
86 86
 
87 87
     internal var socketFactory: (String, Int, Boolean) -> LineBufferedSocket = ::KtorLineBufferedSocket
88 88
 
89
-    override val serverState = ServerState(profile.initialNick)
89
+    override val serverState = ServerState(profile.initialNick, server.host)
90 90
     override val channelState = ChannelStateMap { caseMapping }
91 91
     override val userState = UserState { caseMapping }
92 92
 

+ 1
- 1
src/main/kotlin/com/dmdirc/ktirc/events/Events.kt View File

@@ -15,7 +15,7 @@ class ServerConnected(time: LocalDateTime) : IrcEvent(time)
15 15
 class ServerReady(time: LocalDateTime) : IrcEvent(time)
16 16
 
17 17
 /** Raised when the server initially welcomes us to the IRC network. */
18
-class ServerWelcome(time: LocalDateTime, val localNick: String) : IrcEvent(time)
18
+class ServerWelcome(time: LocalDateTime, val server: String, val localNick: String) : IrcEvent(time)
19 19
 
20 20
 /** Raised when the features supported by the server have changed. This may occur numerous times. */
21 21
 class ServerFeaturesUpdated(time: LocalDateTime, val serverFeatures: ServerFeatureMap) : IrcEvent(time)

+ 3
- 2
src/main/kotlin/com/dmdirc/ktirc/events/ServerStateHandler.kt View File

@@ -10,7 +10,7 @@ internal class ServerStateHandler : EventHandler {
10 10
     override fun processEvent(client: IrcClient, event: IrcEvent): List<IrcEvent> {
11 11
         when (event) {
12 12
             is ServerConnected -> client.serverState.status = ServerStatus.Negotiating
13
-            is ServerWelcome -> handleWelcome(client.serverState, event.localNick)
13
+            is ServerWelcome -> handleWelcome(client.serverState, event.server, event.localNick)
14 14
             is ServerFeaturesUpdated -> client.serverState.features.setAll(event.serverFeatures)
15 15
 
16 16
             // Events that won't trigger a server ready event
@@ -24,8 +24,9 @@ internal class ServerStateHandler : EventHandler {
24 24
         return emptyList()
25 25
     }
26 26
 
27
-    private fun handleWelcome(serverState: ServerState, localNick: String) {
27
+    private fun handleWelcome(serverState: ServerState, server: String, localNick: String) {
28 28
         serverState.receivedWelcome = true
29
+        serverState.serverName = server
29 30
         serverState.localNickname = localNick
30 31
     }
31 32
 

+ 2
- 1
src/main/kotlin/com/dmdirc/ktirc/messages/WelcomeProcessor.kt View File

@@ -7,6 +7,7 @@ internal class WelcomeProcessor : MessageProcessor {
7 7
 
8 8
     override val commands = arrayOf("001")
9 9
 
10
-    override fun process(message: IrcMessage) = listOf(ServerWelcome(message.time, String(message.params[0])))
10
+    override fun process(message: IrcMessage) = listOf(ServerWelcome(message.time, message.serverName(), String(message.params[0])))
11 11
 
12
+    private fun IrcMessage.serverName() = prefix?.let { String(it) } ?: ""
12 13
 }

+ 5
- 1
src/main/kotlin/com/dmdirc/ktirc/model/ServerState.kt View File

@@ -6,7 +6,7 @@ import kotlin.reflect.KClass
6 6
 /**
7 7
  * Contains the current state of a single IRC server.
8 8
  */
9
-class ServerState internal constructor(initialNickname: String) {
9
+class ServerState internal constructor(initialNickname: String, initialServerName: String) {
10 10
 
11 11
     /** Whether we've received the 'Welcome to IRC' (001) message. */
12 12
     internal var receivedWelcome = false
@@ -19,6 +19,10 @@ class ServerState internal constructor(initialNickname: String) {
19 19
     var localNickname: String = initialNickname
20 20
         internal set
21 21
 
22
+    /** The server's name, as reported by it. */
23
+    var serverName: String = initialServerName
24
+        internal set
25
+
22 26
     /** The features that the server has declared it supports (from the 005 header). */
23 27
     val features = ServerFeatureMap()
24 28
 

+ 12
- 0
src/test/kotlin/com/dmdirc/ktirc/IrcClientTest.kt View File

@@ -249,6 +249,18 @@ internal class IrcClientImplTest {
249 249
         })
250 250
     }
251 251
 
252
+    @Test
253
+    fun `IrcClientImpl defaults local nickname to profile`() = runBlocking {
254
+        val client = IrcClientImpl(Server(HOST, PORT), Profile(NICK, REAL_NAME, USER_NAME))
255
+        assertEquals(NICK, client.serverState.localNickname)
256
+    }
257
+
258
+    @Test
259
+    fun `IrcClientImpl defaults server name to host name`() = runBlocking {
260
+        val client = IrcClientImpl(Server(HOST, PORT), Profile(NICK, REAL_NAME, USER_NAME))
261
+        assertEquals(HOST, client.serverState.serverName)
262
+    }
263
+
252 264
     private suspend fun IrcClientImpl.blockUntilConnected() {
253 265
         // Yuck. Maybe connect should be asynchronous?
254 266
         while (writeChannel == null) {

+ 1
- 1
src/test/kotlin/com/dmdirc/ktirc/events/CapabilitiesHandlerTest.kt View File

@@ -16,7 +16,7 @@ import org.junit.jupiter.api.Test
16 16
 internal class CapabilitiesHandlerTest {
17 17
 
18 18
     private val handler = CapabilitiesHandler()
19
-    private val serverState = ServerState("")
19
+    private val serverState = ServerState("", "")
20 20
     private val ircClient = mock<IrcClient> {
21 21
         on { serverState } doReturn serverState
22 22
     }

+ 1
- 1
src/test/kotlin/com/dmdirc/ktirc/events/ChannelStateHandlerTest.kt View File

@@ -14,7 +14,7 @@ internal class ChannelStateHandlerTest {
14 14
 
15 15
     private val handler = ChannelStateHandler()
16 16
     private val channelStateMap = ChannelStateMap { CaseMapping.Rfc }
17
-    private val serverState = ServerState("")
17
+    private val serverState = ServerState("", "")
18 18
     private val ircClient = mock<IrcClient> {
19 19
         on { serverState } doReturn serverState
20 20
         on { channelState } doReturn channelStateMap

+ 1
- 1
src/test/kotlin/com/dmdirc/ktirc/events/EventUtilsTest.kt View File

@@ -16,7 +16,7 @@ import org.junit.jupiter.api.Test
16 16
 
17 17
 internal class EventUtilsTest {
18 18
 
19
-    private val serverState = ServerState("")
19
+    private val serverState = ServerState("", "")
20 20
     private val ircClient = mock<IrcClient> {
21 21
         on { serverState } doReturn serverState
22 22
         on { caseMapping } doReturn CaseMapping.Ascii

+ 11
- 5
src/test/kotlin/com/dmdirc/ktirc/events/ServerStateHandlerTest.kt View File

@@ -12,7 +12,7 @@ import org.junit.jupiter.api.Test
12 12
 
13 13
 internal class ServerStateHandlerTest {
14 14
 
15
-    private val serverState = ServerState("")
15
+    private val serverState = ServerState("", "")
16 16
     private val ircClient = mock<IrcClient> {
17 17
         on { serverState } doReturn serverState
18 18
     }
@@ -21,13 +21,19 @@ internal class ServerStateHandlerTest {
21 21
 
22 22
     @Test
23 23
     fun `ServerStateHandler sets local nickname on welcome event`() = runBlocking {
24
-        handler.processEvent(ircClient, ServerWelcome(TestConstants.time, "acidBurn"))
24
+        handler.processEvent(ircClient, ServerWelcome(TestConstants.time, "the.gibson", "acidBurn"))
25 25
         assertEquals("acidBurn", serverState.localNickname)
26 26
     }
27 27
 
28
+    @Test
29
+    fun `ServerStateHandler sets server name on welcome event`() = runBlocking {
30
+        handler.processEvent(ircClient, ServerWelcome(TestConstants.time, "the.gibson", "acidBurn"))
31
+        assertEquals("the.gibson", serverState.serverName)
32
+    }
33
+
28 34
     @Test
29 35
     fun `ServerStateHandler sets receivedWelcome on welcome event`() = runBlocking {
30
-        handler.processEvent(ircClient, ServerWelcome(TestConstants.time, "acidBurn"))
36
+        handler.processEvent(ircClient, ServerWelcome(TestConstants.time, "the.gibson", "acidBurn"))
31 37
         assertTrue(serverState.receivedWelcome)
32 38
     }
33 39
 
@@ -42,7 +48,7 @@ internal class ServerStateHandlerTest {
42 48
         ircClient.serverState.status = ServerStatus.Negotiating
43 49
 
44 50
         listOf(
45
-                ServerWelcome(TestConstants.time, "acidBurn"),
51
+                ServerWelcome(TestConstants.time, "the.gibson", "acidBurn"),
46 52
                 PingReceived(TestConstants.time, "1234".toByteArray()),
47 53
                 ServerCapabilitiesReceived(TestConstants.time, emptyMap()),
48 54
                 ServerCapabilitiesAcknowledged(TestConstants.time, emptyMap()),
@@ -61,7 +67,7 @@ internal class ServerStateHandlerTest {
61 67
         ircClient.serverState.status = ServerStatus.Negotiating
62 68
 
63 69
         listOf(
64
-                ServerWelcome(TestConstants.time, "acidBurn"),
70
+                ServerWelcome(TestConstants.time, "the.gibson", "acidBurn"),
65 71
                 PingReceived(TestConstants.time, "1234".toByteArray()),
66 72
                 ServerCapabilitiesReceived(TestConstants.time, emptyMap()),
67 73
                 ServerCapabilitiesAcknowledged(TestConstants.time, emptyMap()),

+ 1
- 1
src/test/kotlin/com/dmdirc/ktirc/events/UserStateHandlerTest.kt View File

@@ -14,7 +14,7 @@ import org.junit.jupiter.api.Test
14 14
 
15 15
 internal class UserStateHandlerTest {
16 16
 
17
-    private val serverState = ServerState("")
17
+    private val serverState = ServerState("", "")
18 18
     private val userState = UserState { CaseMapping.Rfc }
19 19
 
20 20
     private val ircClient = mock<IrcClient> {

+ 3
- 3
src/test/kotlin/com/dmdirc/ktirc/io/MessageHandlerTest.kt View File

@@ -66,7 +66,7 @@ internal class MessageHandlerTest {
66 66
         val eventHandler2 = mock<EventHandler>()
67 67
         val handler = MessageHandler(listOf(joinProcessor, nickProcessor), mutableListOf(eventHandler1, eventHandler2))
68 68
         val joinMessage = IrcMessage(emptyMap(), null, "JOIN", emptyList())
69
-        whenever(joinProcessor.process(any())).thenReturn(listOf(ServerConnected(TestConstants.time), ServerWelcome(TestConstants.time, "abc")))
69
+        whenever(joinProcessor.process(any())).thenReturn(listOf(ServerConnected(TestConstants.time), ServerWelcome(TestConstants.time, "the.gibson", "acidBurn")))
70 70
 
71 71
         with(Channel<IrcMessage>(1)) {
72 72
             send(joinMessage)
@@ -85,7 +85,7 @@ internal class MessageHandlerTest {
85 85
         val eventHandler1 = mock<EventHandler>()
86 86
         val eventHandler2 = mock<EventHandler>()
87 87
         val handler = MessageHandler(emptyList(), mutableListOf(eventHandler1, eventHandler2))
88
-        handler.emitEvent(ircClient, ServerWelcome(TestConstants.time, "abc"))
88
+        handler.emitEvent(ircClient, ServerWelcome(TestConstants.time, "the.gibson", "acidBurn"))
89 89
 
90 90
         verify(eventHandler1).processEvent(same(ircClient), isA<ServerWelcome>())
91 91
         verify(eventHandler2).processEvent(same(ircClient), isA<ServerWelcome>())
@@ -98,7 +98,7 @@ internal class MessageHandlerTest {
98 98
         }
99 99
         val eventHandler2 = mock<EventHandler>()
100 100
         val handler = MessageHandler(emptyList(), mutableListOf(eventHandler1, eventHandler2))
101
-        handler.emitEvent(ircClient, ServerWelcome(TestConstants.time, "abc"))
101
+        handler.emitEvent(ircClient, ServerWelcome(TestConstants.time, "the.gibson", "acidBurn"))
102 102
 
103 103
         verify(eventHandler1).processEvent(same(ircClient), isA<ServerReady>())
104 104
         verify(eventHandler2).processEvent(same(ircClient), isA<ServerReady>())

+ 2
- 1
src/test/kotlin/com/dmdirc/ktirc/messages/WelcomeProcessorTest.kt View File

@@ -24,12 +24,13 @@ internal class WelcomeProcessorTest {
24 24
 
25 25
     @Test
26 26
     fun `WelcomeProcessor returns server welcome event`() {
27
-        val events = processor.process(IrcMessage(emptyMap(), ":thegibson.com".toByteArray(), "001", listOf(
27
+        val events = processor.process(IrcMessage(emptyMap(), "thegibson.com".toByteArray(), "001", listOf(
28 28
                 "acidBurn".toByteArray(),
29 29
                 "Welcome to the Internet Relay Network, acidBurn!burn@hacktheplanet.com".toByteArray())))
30 30
         assertEquals(1, events.size)
31 31
         assertEquals(TestConstants.time, events[0].time)
32 32
         assertEquals("acidBurn", events[0].localNick)
33
+        assertEquals("thegibson.com", events[0].server)
33 34
     }
34 35
 
35 36
 }

+ 8
- 2
src/test/kotlin/com/dmdirc/ktirc/model/ServerStateTest.kt View File

@@ -7,13 +7,19 @@ internal class ServerStateTest {
7 7
 
8 8
     @Test
9 9
     fun `ServerState should use the initial nickname as local nickname`() {
10
-        val serverState = ServerState("acidBurn")
10
+        val serverState = ServerState("acidBurn", "")
11 11
         assertEquals("acidBurn", serverState.localNickname)
12 12
     }
13 13
 
14
+    @Test
15
+    fun `ServerState should use the initial name as server name`() {
16
+        val serverState = ServerState("", "the.gibson")
17
+        assertEquals("the.gibson", serverState.serverName)
18
+    }
19
+
14 20
     @Test
15 21
     fun `ServerState should default status to connecting`() {
16
-        val serverState = ServerState("acidBurn")
22
+        val serverState = ServerState("acidBurn", "")
17 23
         assertEquals(ServerStatus.Connecting, serverState.status)
18 24
     }
19 25
 

Loading…
Cancel
Save