Kaynağa Gözat

Handle userhost-in-names responses

tags/v0.1.0
Chris Smith 5 yıl önce
ebeveyn
işleme
36f042ac8f

+ 3
- 1
src/main/kotlin/com/dmdirc/ktirc/events/ChannelStateHandler.kt Dosyayı Görüntüle

52
         val modePrefixes = client.serverState.features[ServerFeature.ModePrefixes]!!
52
         val modePrefixes = client.serverState.features[ServerFeature.ModePrefixes]!!
53
         for (user in event.names) {
53
         for (user in event.names) {
54
             user.takeWhile { modePrefixes.isPrefix(it) }.let { prefix ->
54
             user.takeWhile { modePrefixes.isPrefix(it) }.let { prefix ->
55
-                channel.users += ChannelUser(user.substring(prefix.length), modePrefixes.getModes(prefix))
55
+                channel.users += ChannelUser(user.nickname(prefix.length), modePrefixes.getModes(prefix))
56
             }
56
             }
57
         }
57
         }
58
     }
58
     }
68
         client.channelState.forEach { it.users -= event.user.nickname }
68
         client.channelState.forEach { it.users -= event.user.nickname }
69
     }
69
     }
70
 
70
 
71
+    private fun String.nickname(prefixLength: Int) = substring(prefixLength).substringBefore('!')
72
+
71
 }
73
 }

+ 14
- 0
src/test/kotlin/com/dmdirc/ktirc/events/ChannelStateHandlerTest.kt Dosyayı Görüntüle

100
         assertEquals("", channel.users["cerealKiller"]?.modes)
100
         assertEquals("", channel.users["cerealKiller"]?.modes)
101
     }
101
     }
102
 
102
 
103
+    @Test
104
+    fun `ChannelStateHandler adds users with full hosts`() = runBlocking {
105
+        val channel = ChannelState("#thegibson") { CaseMapping.Rfc }
106
+        channelStateMap += channel
107
+        serverState.features[ServerFeature.ModePrefixes] = ModePrefixMapping("ov", "@+")
108
+
109
+        handler.processEvent(ircClient, ChannelNamesReceived("#thegibson", listOf("@zeroCool!dade@root.localhost", "+acidBurn!libby@root.localhost")))
110
+        handler.processEvent(ircClient, ChannelNamesFinished("#thegibson"))
111
+
112
+        assertEquals(2, channel.users.count())
113
+        assertEquals("o", channel.users["zeroCool"]?.modes)
114
+        assertEquals("v", channel.users["acidBurn"]?.modes)
115
+    }
116
+
103
     @Test
117
     @Test
104
     fun `ChannelStateHandler removes state object for local parts`() = runBlocking {
118
     fun `ChannelStateHandler removes state object for local parts`() = runBlocking {
105
         val channel = ChannelState("#thegibson") { CaseMapping.Rfc }
119
         val channel = ChannelState("#thegibson") { CaseMapping.Rfc }

Loading…
İptal
Kaydet