Selaa lähdekoodia

Extract server names nicely

tags/v0.4.0
Chris Smith 5 vuotta sitten
vanhempi
commit
16b6496566

+ 1
- 0
CHANGELOG Näytä tiedosto

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

+ 1
- 1
src/main/kotlin/com/dmdirc/ktirc/IrcClient.kt Näytä tiedosto

86
 
86
 
87
     internal var socketFactory: (String, Int, Boolean) -> LineBufferedSocket = ::KtorLineBufferedSocket
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
     override val channelState = ChannelStateMap { caseMapping }
90
     override val channelState = ChannelStateMap { caseMapping }
91
     override val userState = UserState { caseMapping }
91
     override val userState = UserState { caseMapping }
92
 
92
 

+ 1
- 1
src/main/kotlin/com/dmdirc/ktirc/events/Events.kt Näytä tiedosto

15
 class ServerReady(time: LocalDateTime) : IrcEvent(time)
15
 class ServerReady(time: LocalDateTime) : IrcEvent(time)
16
 
16
 
17
 /** Raised when the server initially welcomes us to the IRC network. */
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
 /** Raised when the features supported by the server have changed. This may occur numerous times. */
20
 /** Raised when the features supported by the server have changed. This may occur numerous times. */
21
 class ServerFeaturesUpdated(time: LocalDateTime, val serverFeatures: ServerFeatureMap) : IrcEvent(time)
21
 class ServerFeaturesUpdated(time: LocalDateTime, val serverFeatures: ServerFeatureMap) : IrcEvent(time)

+ 3
- 2
src/main/kotlin/com/dmdirc/ktirc/events/ServerStateHandler.kt Näytä tiedosto

10
     override fun processEvent(client: IrcClient, event: IrcEvent): List<IrcEvent> {
10
     override fun processEvent(client: IrcClient, event: IrcEvent): List<IrcEvent> {
11
         when (event) {
11
         when (event) {
12
             is ServerConnected -> client.serverState.status = ServerStatus.Negotiating
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
             is ServerFeaturesUpdated -> client.serverState.features.setAll(event.serverFeatures)
14
             is ServerFeaturesUpdated -> client.serverState.features.setAll(event.serverFeatures)
15
 
15
 
16
             // Events that won't trigger a server ready event
16
             // Events that won't trigger a server ready event
24
         return emptyList()
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
         serverState.receivedWelcome = true
28
         serverState.receivedWelcome = true
29
+        serverState.serverName = server
29
         serverState.localNickname = localNick
30
         serverState.localNickname = localNick
30
     }
31
     }
31
 
32
 

+ 2
- 1
src/main/kotlin/com/dmdirc/ktirc/messages/WelcomeProcessor.kt Näytä tiedosto

7
 
7
 
8
     override val commands = arrayOf("001")
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 Näytä tiedosto

6
 /**
6
 /**
7
  * Contains the current state of a single IRC server.
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
     /** Whether we've received the 'Welcome to IRC' (001) message. */
11
     /** Whether we've received the 'Welcome to IRC' (001) message. */
12
     internal var receivedWelcome = false
12
     internal var receivedWelcome = false
19
     var localNickname: String = initialNickname
19
     var localNickname: String = initialNickname
20
         internal set
20
         internal set
21
 
21
 
22
+    /** The server's name, as reported by it. */
23
+    var serverName: String = initialServerName
24
+        internal set
25
+
22
     /** The features that the server has declared it supports (from the 005 header). */
26
     /** The features that the server has declared it supports (from the 005 header). */
23
     val features = ServerFeatureMap()
27
     val features = ServerFeatureMap()
24
 
28
 

+ 12
- 0
src/test/kotlin/com/dmdirc/ktirc/IrcClientTest.kt Näytä tiedosto

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
     private suspend fun IrcClientImpl.blockUntilConnected() {
264
     private suspend fun IrcClientImpl.blockUntilConnected() {
253
         // Yuck. Maybe connect should be asynchronous?
265
         // Yuck. Maybe connect should be asynchronous?
254
         while (writeChannel == null) {
266
         while (writeChannel == null) {

+ 1
- 1
src/test/kotlin/com/dmdirc/ktirc/events/CapabilitiesHandlerTest.kt Näytä tiedosto

16
 internal class CapabilitiesHandlerTest {
16
 internal class CapabilitiesHandlerTest {
17
 
17
 
18
     private val handler = CapabilitiesHandler()
18
     private val handler = CapabilitiesHandler()
19
-    private val serverState = ServerState("")
19
+    private val serverState = ServerState("", "")
20
     private val ircClient = mock<IrcClient> {
20
     private val ircClient = mock<IrcClient> {
21
         on { serverState } doReturn serverState
21
         on { serverState } doReturn serverState
22
     }
22
     }

+ 1
- 1
src/test/kotlin/com/dmdirc/ktirc/events/ChannelStateHandlerTest.kt Näytä tiedosto

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

+ 1
- 1
src/test/kotlin/com/dmdirc/ktirc/events/EventUtilsTest.kt Näytä tiedosto

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

+ 11
- 5
src/test/kotlin/com/dmdirc/ktirc/events/ServerStateHandlerTest.kt Näytä tiedosto

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

+ 1
- 1
src/test/kotlin/com/dmdirc/ktirc/events/UserStateHandlerTest.kt Näytä tiedosto

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

+ 3
- 3
src/test/kotlin/com/dmdirc/ktirc/io/MessageHandlerTest.kt Näytä tiedosto

66
         val eventHandler2 = mock<EventHandler>()
66
         val eventHandler2 = mock<EventHandler>()
67
         val handler = MessageHandler(listOf(joinProcessor, nickProcessor), mutableListOf(eventHandler1, eventHandler2))
67
         val handler = MessageHandler(listOf(joinProcessor, nickProcessor), mutableListOf(eventHandler1, eventHandler2))
68
         val joinMessage = IrcMessage(emptyMap(), null, "JOIN", emptyList())
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
         with(Channel<IrcMessage>(1)) {
71
         with(Channel<IrcMessage>(1)) {
72
             send(joinMessage)
72
             send(joinMessage)
85
         val eventHandler1 = mock<EventHandler>()
85
         val eventHandler1 = mock<EventHandler>()
86
         val eventHandler2 = mock<EventHandler>()
86
         val eventHandler2 = mock<EventHandler>()
87
         val handler = MessageHandler(emptyList(), mutableListOf(eventHandler1, eventHandler2))
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
         verify(eventHandler1).processEvent(same(ircClient), isA<ServerWelcome>())
90
         verify(eventHandler1).processEvent(same(ircClient), isA<ServerWelcome>())
91
         verify(eventHandler2).processEvent(same(ircClient), isA<ServerWelcome>())
91
         verify(eventHandler2).processEvent(same(ircClient), isA<ServerWelcome>())
98
         }
98
         }
99
         val eventHandler2 = mock<EventHandler>()
99
         val eventHandler2 = mock<EventHandler>()
100
         val handler = MessageHandler(emptyList(), mutableListOf(eventHandler1, eventHandler2))
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
         verify(eventHandler1).processEvent(same(ircClient), isA<ServerReady>())
103
         verify(eventHandler1).processEvent(same(ircClient), isA<ServerReady>())
104
         verify(eventHandler2).processEvent(same(ircClient), isA<ServerReady>())
104
         verify(eventHandler2).processEvent(same(ircClient), isA<ServerReady>())

+ 2
- 1
src/test/kotlin/com/dmdirc/ktirc/messages/WelcomeProcessorTest.kt Näytä tiedosto

24
 
24
 
25
     @Test
25
     @Test
26
     fun `WelcomeProcessor returns server welcome event`() {
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
                 "acidBurn".toByteArray(),
28
                 "acidBurn".toByteArray(),
29
                 "Welcome to the Internet Relay Network, acidBurn!burn@hacktheplanet.com".toByteArray())))
29
                 "Welcome to the Internet Relay Network, acidBurn!burn@hacktheplanet.com".toByteArray())))
30
         assertEquals(1, events.size)
30
         assertEquals(1, events.size)
31
         assertEquals(TestConstants.time, events[0].time)
31
         assertEquals(TestConstants.time, events[0].time)
32
         assertEquals("acidBurn", events[0].localNick)
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 Näytä tiedosto

7
 
7
 
8
     @Test
8
     @Test
9
     fun `ServerState should use the initial nickname as local nickname`() {
9
     fun `ServerState should use the initial nickname as local nickname`() {
10
-        val serverState = ServerState("acidBurn")
10
+        val serverState = ServerState("acidBurn", "")
11
         assertEquals("acidBurn", serverState.localNickname)
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
     @Test
20
     @Test
15
     fun `ServerState should default status to connecting`() {
21
     fun `ServerState should default status to connecting`() {
16
-        val serverState = ServerState("acidBurn")
22
+        val serverState = ServerState("acidBurn", "")
17
         assertEquals(ServerStatus.Connecting, serverState.status)
23
         assertEquals(ServerStatus.Connecting, serverState.status)
18
     }
24
     }
19
 
25
 

Loading…
Peruuta
Tallenna