Quellcode durchsuchen

Handle mode events

Move numerics into constants
Tidy up how IrcMessage params are made in tests
tags/v0.5.0
Chris Smith vor 5 Jahren
Ursprung
Commit
11405a4a38

+ 11
- 6
CHANGELOG Datei anzeigen

1
 vNEXT (in development)
1
 vNEXT (in development)
2
 
2
 
3
- * Added MotdFinished event
4
- * Added UserAccountChanged event
3
+ * Server state:
4
+    * Added ServerConnecting and ServerDisconnected events
5
+    * Server status now starts as Disconnected rather than Connecting
6
+    * Improved error message when features are of an unexpected type
7
+ * Channel modes:
8
+    * CHANMODES feature is now stored as an array, not a single comma-separated string
9
+    * Added ChanModeType enum, and method in ServerState to get the type of a mode
10
+    * Added ModeChanged event, for user and channel mode changes and discovery
11
+ * Other new events:
12
+    * Added MotdFinished event
13
+    * Added UserAccountChanged event
5
  * Improved some documentation
14
  * Improved some documentation
6
- * Added ServerConnecting and ServerDisconnected events
7
- * Server status now starts as Disconnected rather than Connecting
8
- * CHANMODES feature is now stored as an array, not a single comma-separated string
9
- * Improved error message when features are of an unexpected type
10
 
15
 
11
 v0.4.0
16
 v0.4.0
12
 
17
 

+ 9
- 0
src/main/kotlin/com/dmdirc/ktirc/events/Events.kt Datei anzeigen

74
 
74
 
75
 /** Raised when a Message Of the Day has completed. */
75
 /** Raised when a Message Of the Day has completed. */
76
 class MotdFinished(time: LocalDateTime, val missing: Boolean = false): IrcEvent(time)
76
 class MotdFinished(time: LocalDateTime, val missing: Boolean = false): IrcEvent(time)
77
+
78
+/**
79
+ * Raised when a mode change occurs.
80
+ *
81
+ * If [discovered] is true then the event is in response to the server providing the full set of modes on the target,
82
+ * and the given modes are thus exhaustive. Otherwise, the modes are a sequence of changes to apply to the existing
83
+ * state.
84
+ */
85
+class ModeChanged(time: LocalDateTime, val target: String, val modes: String, val arguments: Array<String>, val discovered: Boolean = false): IrcEvent(time)

+ 1
- 1
src/main/kotlin/com/dmdirc/ktirc/messages/ISupportProcessor.kt Datei anzeigen

13
 
13
 
14
     private val log by logger()
14
     private val log by logger()
15
 
15
 
16
-    override val commands = arrayOf("005")
16
+    override val commands = arrayOf(RPL_ISUPPORT)
17
 
17
 
18
     override fun process(message: IrcMessage) = listOf(ServerFeaturesUpdated(message.time, ServerFeatureMap().apply {
18
     override fun process(message: IrcMessage) = listOf(ServerFeaturesUpdated(message.time, ServerFeatureMap().apply {
19
         // Ignore the first (nickname) and last ("are supported by this server") params
19
         // Ignore the first (nickname) and last ("are supported by this server") params

+ 1
- 0
src/main/kotlin/com/dmdirc/ktirc/messages/MessageProcessor.kt Datei anzeigen

22
         CapabilityProcessor(),
22
         CapabilityProcessor(),
23
         ISupportProcessor(),
23
         ISupportProcessor(),
24
         JoinProcessor(),
24
         JoinProcessor(),
25
+        ModeProcessor(),
25
         MotdProcessor(),
26
         MotdProcessor(),
26
         NamesProcessor(),
27
         NamesProcessor(),
27
         PartProcessor(),
28
         PartProcessor(),

+ 21
- 0
src/main/kotlin/com/dmdirc/ktirc/messages/ModeProcessor.kt Datei anzeigen

1
+package com.dmdirc.ktirc.messages
2
+
3
+import com.dmdirc.ktirc.events.ModeChanged
4
+import com.dmdirc.ktirc.model.IrcMessage
5
+
6
+internal class ModeProcessor : MessageProcessor {
7
+
8
+    override val commands = arrayOf(RPL_CHANNELMODEIS, RPL_UMODEIS, "MODE")
9
+
10
+    override fun process(message: IrcMessage): List<ModeChanged> {
11
+        val isDiscovery = message.command == RPL_CHANNELMODEIS || message.command == RPL_UMODEIS
12
+        val paramOffset = if (message.command == RPL_CHANNELMODEIS) 1 else 0
13
+        return listOf(ModeChanged(
14
+                message.time,
15
+                target = String(message.params[paramOffset]),
16
+                modes = String(message.params[paramOffset + 1]),
17
+                arguments = message.params.takeLast(message.params.size - paramOffset - 2).map { String(it) }.toTypedArray(),
18
+                discovered = isDiscovery))
19
+    }
20
+
21
+}

+ 3
- 3
src/main/kotlin/com/dmdirc/ktirc/messages/MotdProcessor.kt Datei anzeigen

5
 
5
 
6
 internal class MotdProcessor : MessageProcessor {
6
 internal class MotdProcessor : MessageProcessor {
7
 
7
 
8
-    override val commands = arrayOf("422", "376")
8
+    override val commands = arrayOf(ERR_NOMOTD, RPL_ENDOFMOTD)
9
 
9
 
10
     override fun process(message: IrcMessage) = sequence {
10
     override fun process(message: IrcMessage) = sequence {
11
         when (message.command) {
11
         when (message.command) {
12
-            "422" -> yield(MotdFinished(message.time, missing = true))
13
-            "376" -> yield(MotdFinished(message.time))
12
+            ERR_NOMOTD -> yield(MotdFinished(message.time, missing = true))
13
+            RPL_ENDOFMOTD -> yield(MotdFinished(message.time))
14
         }
14
         }
15
     }.toList()
15
     }.toList()
16
 
16
 

+ 11
- 0
src/main/kotlin/com/dmdirc/ktirc/messages/NumericConstants.kt Datei anzeigen

1
+package com.dmdirc.ktirc.messages
2
+
3
+internal const val RPL_WELCOME = "001"
4
+internal const val RPL_ISUPPORT = "005"
5
+
6
+internal const val RPL_UMODEIS = "221"
7
+
8
+internal const val RPL_CHANNELMODEIS = "324"
9
+internal const val RPL_ENDOFMOTD = "376"
10
+
11
+internal const val ERR_NOMOTD = "422"

+ 2
- 1
src/main/kotlin/com/dmdirc/ktirc/messages/WelcomeProcessor.kt Datei anzeigen

5
 
5
 
6
 internal class WelcomeProcessor : MessageProcessor {
6
 internal class WelcomeProcessor : MessageProcessor {
7
 
7
 
8
-    override val commands = arrayOf("001")
8
+    override val commands = arrayOf(RPL_WELCOME)
9
 
9
 
10
     override fun process(message: IrcMessage) = listOf(ServerWelcome(message.time, message.serverName(), 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
     private fun IrcMessage.serverName() = prefix?.let { String(it) } ?: ""
13
+
13
 }
14
 }

+ 3
- 0
src/test/kotlin/com/dmdirc/ktirc/TestUtils.kt Datei anzeigen

1
+package com.dmdirc.ktirc
2
+
3
+internal fun params(vararg args: String) = args.map { it.toByteArray() }

+ 4
- 3
src/test/kotlin/com/dmdirc/ktirc/messages/AccountProcessorTest.kt Datei anzeigen

3
 import com.dmdirc.ktirc.TestConstants
3
 import com.dmdirc.ktirc.TestConstants
4
 import com.dmdirc.ktirc.model.IrcMessage
4
 import com.dmdirc.ktirc.model.IrcMessage
5
 import com.dmdirc.ktirc.model.User
5
 import com.dmdirc.ktirc.model.User
6
+import com.dmdirc.ktirc.params
6
 import com.dmdirc.ktirc.util.currentTimeProvider
7
 import com.dmdirc.ktirc.util.currentTimeProvider
7
 import org.junit.jupiter.api.Assertions.assertEquals
8
 import org.junit.jupiter.api.Assertions.assertEquals
8
 import org.junit.jupiter.api.BeforeEach
9
 import org.junit.jupiter.api.BeforeEach
18
     @Test
19
     @Test
19
     fun `AccountProcessor raises account changed event with account name`() {
20
     fun `AccountProcessor raises account changed event with account name`() {
20
         val events = AccountProcessor().process(
21
         val events = AccountProcessor().process(
21
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "ACCOUNT", listOf("acidBurn".toByteArray())))
22
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "ACCOUNT", params("acidBurn")))
22
         assertEquals(1, events.size)
23
         assertEquals(1, events.size)
23
 
24
 
24
         assertEquals(TestConstants.time, events[0].time)
25
         assertEquals(TestConstants.time, events[0].time)
29
     @Test
30
     @Test
30
     fun `AccountProcessor raises account changed event when account removed`() {
31
     fun `AccountProcessor raises account changed event when account removed`() {
31
         val events = AccountProcessor().process(
32
         val events = AccountProcessor().process(
32
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "ACCOUNT", listOf("*".toByteArray())))
33
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "ACCOUNT", params("*")))
33
         assertEquals(1, events.size)
34
         assertEquals(1, events.size)
34
 
35
 
35
         assertEquals(TestConstants.time, events[0].time)
36
         assertEquals(TestConstants.time, events[0].time)
40
     @Test
41
     @Test
41
     fun `AccountProcessor does nothing if prefix missing`() {
42
     fun `AccountProcessor does nothing if prefix missing`() {
42
         val events = AccountProcessor().process(
43
         val events = AccountProcessor().process(
43
-                IrcMessage(emptyMap(), null, "ACCOUNT", listOf("*".toByteArray())))
44
+                IrcMessage(emptyMap(), null, "ACCOUNT", params("*")))
44
         assertEquals(0, events.size)
45
         assertEquals(0, events.size)
45
     }
46
     }
46
 
47
 

+ 9
- 8
src/test/kotlin/com/dmdirc/ktirc/messages/CapabilityProcessorTest.kt Datei anzeigen

5
 import com.dmdirc.ktirc.events.ServerCapabilitiesReceived
5
 import com.dmdirc.ktirc.events.ServerCapabilitiesReceived
6
 import com.dmdirc.ktirc.model.Capability
6
 import com.dmdirc.ktirc.model.Capability
7
 import com.dmdirc.ktirc.model.IrcMessage
7
 import com.dmdirc.ktirc.model.IrcMessage
8
+import com.dmdirc.ktirc.params
8
 import org.junit.jupiter.api.Assertions.assertEquals
9
 import org.junit.jupiter.api.Assertions.assertEquals
9
 import org.junit.jupiter.api.Assertions.assertTrue
10
 import org.junit.jupiter.api.Assertions.assertTrue
10
 import org.junit.jupiter.api.Test
11
 import org.junit.jupiter.api.Test
15
 
16
 
16
     @Test
17
     @Test
17
     fun `CapabilityProcessor does nothing for unknown subcommand`() {
18
     fun `CapabilityProcessor does nothing for unknown subcommand`() {
18
-        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", listOf("*".toByteArray(), "FOO".toByteArray())))
19
+        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", params("*", "FOO")))
19
 
20
 
20
         assertTrue(events.isEmpty())
21
         assertTrue(events.isEmpty())
21
     }
22
     }
22
 
23
 
23
     @Test
24
     @Test
24
     fun `CapabilityProcessor raises ServerCapabilitiesReceived event given no capabilities`() {
25
     fun `CapabilityProcessor raises ServerCapabilitiesReceived event given no capabilities`() {
25
-        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", listOf("*", "LS", "").map { it.toByteArray() }))
26
+        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", params("*", "LS", "")))
26
 
27
 
27
         val receivedEvent = events.filterIsInstance<ServerCapabilitiesReceived>()[0]
28
         val receivedEvent = events.filterIsInstance<ServerCapabilitiesReceived>()[0]
28
         assertEquals(0, receivedEvent.capabilities.size)
29
         assertEquals(0, receivedEvent.capabilities.size)
31
 
32
 
32
     @Test
33
     @Test
33
     fun `CapabilityProcessor raises ServerCapabilitiesReceived event with known capabilities`() {
34
     fun `CapabilityProcessor raises ServerCapabilitiesReceived event with known capabilities`() {
34
-        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", listOf("*", "LS", "chghost extended-join invalid").map { it.toByteArray() }))
35
+        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", params("*", "LS", "chghost extended-join invalid")))
35
 
36
 
36
         val receivedEvent = events.filterIsInstance<ServerCapabilitiesReceived>()[0]
37
         val receivedEvent = events.filterIsInstance<ServerCapabilitiesReceived>()[0]
37
         assertEquals(2, receivedEvent.capabilities.size)
38
         assertEquals(2, receivedEvent.capabilities.size)
41
 
42
 
42
     @Test
43
     @Test
43
     fun `CapabilityProcessor raises ServerCapabilitiesReceived event with values for capabilities`() {
44
     fun `CapabilityProcessor raises ServerCapabilitiesReceived event with values for capabilities`() {
44
-        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", listOf("*", "LS", "chghost=test123 extended-join=abc=def invalid").map { it.toByteArray() }))
45
+        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", params("*", "LS", "chghost=test123 extended-join=abc=def invalid")))
45
 
46
 
46
         val receivedEvent = events.filterIsInstance<ServerCapabilitiesReceived>()[0]
47
         val receivedEvent = events.filterIsInstance<ServerCapabilitiesReceived>()[0]
47
         assertEquals(2, receivedEvent.capabilities.size)
48
         assertEquals(2, receivedEvent.capabilities.size)
51
 
52
 
52
     @Test
53
     @Test
53
     fun `CapabilityProcessor overwrites earlier values with later ones for identical capabilities`() {
54
     fun `CapabilityProcessor overwrites earlier values with later ones for identical capabilities`() {
54
-        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", listOf("*", "LS", "chghost=test123 chghost chghost=456").map { it.toByteArray() }))
55
+        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", params("*", "LS", "chghost=test123 chghost chghost=456")))
55
 
56
 
56
         val receivedEvent = events.filterIsInstance<ServerCapabilitiesReceived>()[0]
57
         val receivedEvent = events.filterIsInstance<ServerCapabilitiesReceived>()[0]
57
         assertEquals(1, receivedEvent.capabilities.size)
58
         assertEquals(1, receivedEvent.capabilities.size)
61
 
62
 
62
     @Test
63
     @Test
63
     fun `CapabilityProcessor raises ServerCapabilitiesReceived event with known capabilities for multi-line responses`() {
64
     fun `CapabilityProcessor raises ServerCapabilitiesReceived event with known capabilities for multi-line responses`() {
64
-        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", listOf("*", "LS", "*", "chghost extended-join invalid").map { it.toByteArray() }))
65
+        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", params("*", "LS", "*", "chghost extended-join invalid")))
65
 
66
 
66
         val receivedEvent = events.filterIsInstance<ServerCapabilitiesReceived>()[0]
67
         val receivedEvent = events.filterIsInstance<ServerCapabilitiesReceived>()[0]
67
         assertEquals(2, receivedEvent.capabilities.size)
68
         assertEquals(2, receivedEvent.capabilities.size)
71
 
72
 
72
     @Test
73
     @Test
73
     fun `CapabilityProcessor raises ServerCapabilitiesFinished event for final LS responses`() {
74
     fun `CapabilityProcessor raises ServerCapabilitiesFinished event for final LS responses`() {
74
-        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", listOf("*", "LS", "chghost extended-join invalid").map { it.toByteArray() }))
75
+        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", params("*", "LS", "chghost extended-join invalid")))
75
 
76
 
76
         assertEquals(2, events.size)
77
         assertEquals(2, events.size)
77
         assertTrue(events[1] is ServerCapabilitiesFinished)
78
         assertTrue(events[1] is ServerCapabilitiesFinished)
79
 
80
 
80
     @Test
81
     @Test
81
     fun `CapabilityProcessor raises ServerCapabilitiesAcknowledged event`() {
82
     fun `CapabilityProcessor raises ServerCapabilitiesAcknowledged event`() {
82
-        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", listOf("*", "ACK", "chghost=test123 extended-join=abc=def invalid").map { it.toByteArray() }))
83
+        val events = processor.process(IrcMessage(emptyMap(), "the.gibson".toByteArray(), "CAP", params("*", "ACK", "chghost=test123 extended-join=abc=def invalid")))
83
 
84
 
84
         val receivedEvent = events.filterIsInstance<ServerCapabilitiesAcknowledged>()[0]
85
         val receivedEvent = events.filterIsInstance<ServerCapabilitiesAcknowledged>()[0]
85
         assertEquals(2, receivedEvent.capabilities.size)
86
         assertEquals(2, receivedEvent.capabilities.size)

+ 9
- 8
src/test/kotlin/com/dmdirc/ktirc/messages/ISupportProcessorTest.kt Datei anzeigen

5
 import com.dmdirc.ktirc.model.ModePrefixMapping
5
 import com.dmdirc.ktirc.model.ModePrefixMapping
6
 import com.dmdirc.ktirc.model.ServerFeature
6
 import com.dmdirc.ktirc.model.ServerFeature
7
 import com.dmdirc.ktirc.model.ServerFeatureMap
7
 import com.dmdirc.ktirc.model.ServerFeatureMap
8
+import com.dmdirc.ktirc.params
8
 import org.junit.jupiter.api.Assertions.*
9
 import org.junit.jupiter.api.Assertions.*
9
 import org.junit.jupiter.api.Test
10
 import org.junit.jupiter.api.Test
10
 
11
 
20
     @Test
21
     @Test
21
     fun `ISupportProcessor handles multiple numeric arguments`() {
22
     fun `ISupportProcessor handles multiple numeric arguments`() {
22
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
23
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
23
-                listOf("nickname", "MAXCHANNELS=123", "CHANNELLEN=456", "are supported blah blah").map { it.toByteArray() }))
24
+                params("nickname", "MAXCHANNELS=123", "CHANNELLEN=456", "are supported blah blah")))
24
 
25
 
25
         assertEquals(123, events[0].serverFeatures[ServerFeature.MaximumChannels])
26
         assertEquals(123, events[0].serverFeatures[ServerFeature.MaximumChannels])
26
         assertEquals(456, events[0].serverFeatures[ServerFeature.MaximumChannelNameLength])
27
         assertEquals(456, events[0].serverFeatures[ServerFeature.MaximumChannelNameLength])
29
     @Test
30
     @Test
30
     fun `ISupportProcessor handles string arguments`() {
31
     fun `ISupportProcessor handles string arguments`() {
31
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
32
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
32
-                listOf("nickname", "NETWORK=abcd", "are supported blah blah").map { it.toByteArray() }))
33
+                params("nickname", "NETWORK=abcd", "are supported blah blah")))
33
 
34
 
34
         assertEquals("abcd", events[0].serverFeatures[ServerFeature.Network])
35
         assertEquals("abcd", events[0].serverFeatures[ServerFeature.Network])
35
     }
36
     }
37
     @Test
38
     @Test
38
     fun `ISupportProcessor handles string array arguments`() {
39
     fun `ISupportProcessor handles string array arguments`() {
39
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
40
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
40
-                listOf("nickname", "CHANMODES=abcd,efg,,hij", "are supported blah blah").map { it.toByteArray() }))
41
+                params("nickname", "CHANMODES=abcd,efg,,hij", "are supported blah blah")))
41
 
42
 
42
         val modes = events[0].serverFeatures[ServerFeature.ChannelModes]!!
43
         val modes = events[0].serverFeatures[ServerFeature.ChannelModes]!!
43
         assertEquals("abcd", modes[0])
44
         assertEquals("abcd", modes[0])
49
     @Test
50
     @Test
50
     fun `ISupportProcessor handles resetting arguments`() {
51
     fun `ISupportProcessor handles resetting arguments`() {
51
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
52
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
52
-                listOf("nickname", "-CHANMODES", "are supported blah blah").map { it.toByteArray() }))
53
+                params("nickname", "-CHANMODES", "are supported blah blah")))
53
 
54
 
54
         val oldFeatures = ServerFeatureMap()
55
         val oldFeatures = ServerFeatureMap()
55
         oldFeatures[ServerFeature.ChannelModes] = arrayOf("abc")
56
         oldFeatures[ServerFeature.ChannelModes] = arrayOf("abc")
60
     @Test
61
     @Test
61
     fun `ISupportProcessor handles case mapping arguments`() {
62
     fun `ISupportProcessor handles case mapping arguments`() {
62
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
63
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
63
-                listOf("nickname", "CASEMAPPING=rfc1459-strict", "are supported blah blah").map { it.toByteArray() }))
64
+                params("nickname", "CASEMAPPING=rfc1459-strict", "are supported blah blah")))
64
 
65
 
65
         assertEquals(CaseMapping.RfcStrict, events[0].serverFeatures[ServerFeature.ServerCaseMapping])
66
         assertEquals(CaseMapping.RfcStrict, events[0].serverFeatures[ServerFeature.ServerCaseMapping])
66
     }
67
     }
68
     @Test
69
     @Test
69
     fun `ISupportProcessor handles mode prefix arguments`() {
70
     fun `ISupportProcessor handles mode prefix arguments`() {
70
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
71
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
71
-                listOf("nickname", "PREFIX=(ovd)@+%", "are supported blah blah").map { it.toByteArray() }))
72
+                params("nickname", "PREFIX=(ovd)@+%", "are supported blah blah")))
72
 
73
 
73
         assertEquals(ModePrefixMapping("ovd", "@+%"), events[0].serverFeatures[ServerFeature.ModePrefixes])
74
         assertEquals(ModePrefixMapping("ovd", "@+%"), events[0].serverFeatures[ServerFeature.ModePrefixes])
74
     }
75
     }
76
     @Test
77
     @Test
77
     fun `ISupportProcessor handles network arguments`() {
78
     fun `ISupportProcessor handles network arguments`() {
78
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
79
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
79
-                listOf("nickname", "NETWORK=gibson", "are supported blah blah").map { it.toByteArray() }))
80
+                params("nickname", "NETWORK=gibson", "are supported blah blah")))
80
 
81
 
81
         assertEquals("gibson", events[0].serverFeatures[ServerFeature.Network])
82
         assertEquals("gibson", events[0].serverFeatures[ServerFeature.Network])
82
     }
83
     }
84
     @Test
85
     @Test
85
     fun `ISupportProcessor handles boolean features with no arguments`() {
86
     fun `ISupportProcessor handles boolean features with no arguments`() {
86
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
87
         val events = processor.process(IrcMessage(emptyMap(), "server.com".toByteArray(), "005",
87
-                listOf("nickname", "WHOX", "are supported blah blah").map { it.toByteArray() }))
88
+                params("nickname", "WHOX", "are supported blah blah")))
88
 
89
 
89
         assertEquals(true, events[0].serverFeatures[ServerFeature.WhoxSupport])
90
         assertEquals(true, events[0].serverFeatures[ServerFeature.WhoxSupport])
90
     }
91
     }

+ 5
- 4
src/test/kotlin/com/dmdirc/ktirc/messages/JoinProcessorTest.kt Datei anzeigen

3
 import com.dmdirc.ktirc.TestConstants
3
 import com.dmdirc.ktirc.TestConstants
4
 import com.dmdirc.ktirc.model.IrcMessage
4
 import com.dmdirc.ktirc.model.IrcMessage
5
 import com.dmdirc.ktirc.model.User
5
 import com.dmdirc.ktirc.model.User
6
+import com.dmdirc.ktirc.params
6
 import com.dmdirc.ktirc.util.currentTimeProvider
7
 import com.dmdirc.ktirc.util.currentTimeProvider
7
 import org.junit.jupiter.api.Assertions.assertEquals
8
 import org.junit.jupiter.api.Assertions.assertEquals
8
 import org.junit.jupiter.api.BeforeEach
9
 import org.junit.jupiter.api.BeforeEach
18
     @Test
19
     @Test
19
     fun `JoinProcessor raises join event`() {
20
     fun `JoinProcessor raises join event`() {
20
         val events = JoinProcessor().process(
21
         val events = JoinProcessor().process(
21
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "JOIN", listOf("#crashandburn".toByteArray())))
22
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "JOIN", params("#crashandburn")))
22
         assertEquals(1, events.size)
23
         assertEquals(1, events.size)
23
 
24
 
24
         assertEquals(TestConstants.time, events[0].time)
25
         assertEquals(TestConstants.time, events[0].time)
29
     @Test
30
     @Test
30
     fun `JoinProcessor does nothing if prefix missing`() {
31
     fun `JoinProcessor does nothing if prefix missing`() {
31
         val events = JoinProcessor().process(
32
         val events = JoinProcessor().process(
32
-                IrcMessage(emptyMap(), null, "JOIN", listOf("#crashandburn".toByteArray())))
33
+                IrcMessage(emptyMap(), null, "JOIN", params("#crashandburn")))
33
         assertEquals(0, events.size)
34
         assertEquals(0, events.size)
34
     }
35
     }
35
 
36
 
36
     @Test
37
     @Test
37
     fun `JoinProcessor adds real name and account from extended join`() {
38
     fun `JoinProcessor adds real name and account from extended join`() {
38
         val events = JoinProcessor().process(
39
         val events = JoinProcessor().process(
39
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "JOIN", listOf("#crashandburn", "acidBurn", "Libby").map { it.toByteArray() }))
40
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "JOIN", params("#crashandburn", "acidBurn", "Libby")))
40
         assertEquals(1, events.size)
41
         assertEquals(1, events.size)
41
 
42
 
42
         assertEquals(TestConstants.time, events[0].time)
43
         assertEquals(TestConstants.time, events[0].time)
47
     @Test
48
     @Test
48
     fun `JoinProcessor ignores account if the user is not authed`() {
49
     fun `JoinProcessor ignores account if the user is not authed`() {
49
         val events = JoinProcessor().process(
50
         val events = JoinProcessor().process(
50
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "JOIN", listOf("#crashandburn", "*", "Libby").map { it.toByteArray() }))
51
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "JOIN", params("#crashandburn", "*", "Libby")))
51
         assertEquals(1, events.size)
52
         assertEquals(1, events.size)
52
 
53
 
53
         assertEquals(TestConstants.time, events[0].time)
54
         assertEquals(TestConstants.time, events[0].time)

+ 130
- 0
src/test/kotlin/com/dmdirc/ktirc/messages/ModeProcessorTest.kt Datei anzeigen

1
+package com.dmdirc.ktirc.messages
2
+
3
+import com.dmdirc.ktirc.TestConstants
4
+import com.dmdirc.ktirc.model.IrcMessage
5
+import com.dmdirc.ktirc.params
6
+import com.dmdirc.ktirc.util.currentTimeProvider
7
+import org.junit.jupiter.api.Assertions.*
8
+import org.junit.jupiter.api.BeforeEach
9
+import org.junit.jupiter.api.Test
10
+
11
+internal class ModeProcessorTest {
12
+
13
+    @BeforeEach
14
+    fun setUp() {
15
+        currentTimeProvider = { TestConstants.time }
16
+    }
17
+
18
+    @Test
19
+    fun `raises event for user mode discovery with no params`() {
20
+        val events = ModeProcessor().process(
21
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "221", params("acidBurn", "+hax")))
22
+        assertEquals(1, events.size)
23
+
24
+        assertEquals(TestConstants.time, events[0].time)
25
+        assertEquals("acidBurn", events[0].target)
26
+        assertEquals("+hax", events[0].modes)
27
+        assertEquals(0, events[0].arguments.size)
28
+        assertTrue(events[0].discovered)
29
+    }
30
+
31
+    @Test
32
+    fun `raises event for user mode discovery with params`() {
33
+        val events = ModeProcessor().process(
34
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "221", params("acidBurn", "+hax", "123", "467")))
35
+        assertEquals(1, events.size)
36
+
37
+        assertEquals(TestConstants.time, events[0].time)
38
+        assertEquals("acidBurn", events[0].target)
39
+        assertEquals("+hax", events[0].modes)
40
+        assertEquals(2, events[0].arguments.size)
41
+        assertEquals("123", events[0].arguments[0])
42
+        assertEquals("467", events[0].arguments[1])
43
+        assertTrue(events[0].discovered)
44
+    }
45
+
46
+    @Test
47
+    fun `raises event for user mode change with no params`() {
48
+        val events = ModeProcessor().process(
49
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "MODE", params("acidBurn", "+hax")))
50
+        assertEquals(1, events.size)
51
+
52
+        assertEquals(TestConstants.time, events[0].time)
53
+        assertEquals("acidBurn", events[0].target)
54
+        assertEquals("+hax", events[0].modes)
55
+        assertEquals(0, events[0].arguments.size)
56
+        assertFalse(events[0].discovered)
57
+    }
58
+
59
+    @Test
60
+    fun `raises event for user mode change with params`() {
61
+        val events = ModeProcessor().process(
62
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "MODE", params("acidBurn", "+hax", "123", "467")))
63
+        assertEquals(1, events.size)
64
+
65
+        assertEquals(TestConstants.time, events[0].time)
66
+        assertEquals("acidBurn", events[0].target)
67
+        assertEquals("+hax", events[0].modes)
68
+        assertEquals(2, events[0].arguments.size)
69
+        assertEquals("123", events[0].arguments[0])
70
+        assertEquals("467", events[0].arguments[1])
71
+        assertFalse(events[0].discovered)
72
+    }
73
+
74
+    @Test
75
+    fun `raises event for channel mode discovery with no params`() {
76
+        val events = ModeProcessor().process(
77
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "324", params("acidBurn", "#thegibson", "+hax")))
78
+        assertEquals(1, events.size)
79
+
80
+        assertEquals(TestConstants.time, events[0].time)
81
+        assertEquals("#thegibson", events[0].target)
82
+        assertEquals("+hax", events[0].modes)
83
+        assertEquals(0, events[0].arguments.size)
84
+        assertTrue(events[0].discovered)
85
+    }
86
+
87
+    @Test
88
+    fun `raises event for channel mode discovery with params`() {
89
+        val events = ModeProcessor().process(
90
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "324", params("acidBurn", "#thegibson", "+hax", "123", "467")))
91
+        assertEquals(1, events.size)
92
+
93
+        assertEquals(TestConstants.time, events[0].time)
94
+        assertEquals("#thegibson", events[0].target)
95
+        assertEquals("+hax", events[0].modes)
96
+        assertEquals(2, events[0].arguments.size)
97
+        assertEquals("123", events[0].arguments[0])
98
+        assertEquals("467", events[0].arguments[1])
99
+        assertTrue(events[0].discovered)
100
+    }
101
+
102
+    @Test
103
+    fun `raises event for channel mode change with no params`() {
104
+        val events = ModeProcessor().process(
105
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "MODE", params("#thegibson", "+hax")))
106
+        assertEquals(1, events.size)
107
+
108
+        assertEquals(TestConstants.time, events[0].time)
109
+        assertEquals("#thegibson", events[0].target)
110
+        assertEquals("+hax", events[0].modes)
111
+        assertEquals(0, events[0].arguments.size)
112
+        assertFalse(events[0].discovered)
113
+    }
114
+
115
+    @Test
116
+    fun `raises event for channel mode change with params`() {
117
+        val events = ModeProcessor().process(
118
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "MODE", params("#thegibson", "+hax", "123", "467")))
119
+        assertEquals(1, events.size)
120
+
121
+        assertEquals(TestConstants.time, events[0].time)
122
+        assertEquals("#thegibson", events[0].target)
123
+        assertEquals("+hax", events[0].modes)
124
+        assertEquals(2, events[0].arguments.size)
125
+        assertEquals("123", events[0].arguments[0])
126
+        assertEquals("467", events[0].arguments[1])
127
+        assertFalse(events[0].discovered)
128
+    }
129
+
130
+}

+ 3
- 2
src/test/kotlin/com/dmdirc/ktirc/messages/MotdProcessorTest.kt Datei anzeigen

3
 import com.dmdirc.ktirc.TestConstants
3
 import com.dmdirc.ktirc.TestConstants
4
 import com.dmdirc.ktirc.events.MotdFinished
4
 import com.dmdirc.ktirc.events.MotdFinished
5
 import com.dmdirc.ktirc.model.IrcMessage
5
 import com.dmdirc.ktirc.model.IrcMessage
6
+import com.dmdirc.ktirc.params
6
 import com.dmdirc.ktirc.util.currentTimeProvider
7
 import com.dmdirc.ktirc.util.currentTimeProvider
7
 import org.junit.jupiter.api.Assertions.*
8
 import org.junit.jupiter.api.Assertions.*
8
 import org.junit.jupiter.api.BeforeEach
9
 import org.junit.jupiter.api.BeforeEach
18
     @Test
19
     @Test
19
     fun `MotdProcessor raises motdFinished when not found numeric received`() {
20
     fun `MotdProcessor raises motdFinished when not found numeric received`() {
20
         val events = MotdProcessor().process(
21
         val events = MotdProcessor().process(
21
-                IrcMessage(emptyMap(), "the.gibson".toByteArray(), "422", listOf("MOTD missing".toByteArray())))
22
+                IrcMessage(emptyMap(), "the.gibson".toByteArray(), "422", params("MOTD missing")))
22
         assertEquals(1, events.size)
23
         assertEquals(1, events.size)
23
 
24
 
24
         val event = events[0] as MotdFinished
25
         val event = events[0] as MotdFinished
29
     @Test
30
     @Test
30
     fun `MotdProcessor raises motdFinished when MOTD finishes normally`() {
31
     fun `MotdProcessor raises motdFinished when MOTD finishes normally`() {
31
         val events = MotdProcessor().process(
32
         val events = MotdProcessor().process(
32
-                IrcMessage(emptyMap(), "the.gibson".toByteArray(), "376", listOf("acidBurn".toByteArray(), "End of /MOTD command.".toByteArray())))
33
+                IrcMessage(emptyMap(), "the.gibson".toByteArray(), "376", params("acidBurn", "End of /MOTD command.")))
33
         assertEquals(1, events.size)
34
         assertEquals(1, events.size)
34
 
35
 
35
         val event = events[0] as MotdFinished
36
         val event = events[0] as MotdFinished

+ 3
- 2
src/test/kotlin/com/dmdirc/ktirc/messages/NamesProcessorTest.kt Datei anzeigen

3
 import com.dmdirc.ktirc.events.ChannelNamesFinished
3
 import com.dmdirc.ktirc.events.ChannelNamesFinished
4
 import com.dmdirc.ktirc.events.ChannelNamesReceived
4
 import com.dmdirc.ktirc.events.ChannelNamesReceived
5
 import com.dmdirc.ktirc.model.IrcMessage
5
 import com.dmdirc.ktirc.model.IrcMessage
6
+import com.dmdirc.ktirc.params
6
 import org.junit.jupiter.api.Assertions.assertEquals
7
 import org.junit.jupiter.api.Assertions.assertEquals
7
 import org.junit.jupiter.api.Test
8
 import org.junit.jupiter.api.Test
8
 
9
 
12
 
13
 
13
     @Test
14
     @Test
14
     fun `NamesProcessor handles end of names reply`() {
15
     fun `NamesProcessor handles end of names reply`() {
15
-        val events = processor.process(IrcMessage(emptyMap(), ":the.gibson".toByteArray(), "366", listOf("AcidBurn", "#root", "End of /NAMES list").map { it.toByteArray() }))
16
+        val events = processor.process(IrcMessage(emptyMap(), ":the.gibson".toByteArray(), "366", params("AcidBurn", "#root", "End of /NAMES list")))
16
 
17
 
17
         assertEquals(1, events.size)
18
         assertEquals(1, events.size)
18
         assertEquals("#root", (events[0] as ChannelNamesFinished).channel)
19
         assertEquals("#root", (events[0] as ChannelNamesFinished).channel)
20
 
21
 
21
     @Test
22
     @Test
22
     fun `NamesProcessor handles names reply`() {
23
     fun `NamesProcessor handles names reply`() {
23
-        val events = processor.process(IrcMessage(emptyMap(), ":the.gibson".toByteArray(), "353", listOf("AcidBurn", "@", "#root", "AcidBurn @ZeroCool +ThePlague").map { it.toByteArray() }))
24
+        val events = processor.process(IrcMessage(emptyMap(), ":the.gibson".toByteArray(), "353", params("AcidBurn", "@", "#root", "AcidBurn @ZeroCool +ThePlague")))
24
 
25
 
25
         assertEquals(1, events.size)
26
         assertEquals(1, events.size)
26
         val event = events[0] as ChannelNamesReceived
27
         val event = events[0] as ChannelNamesReceived

+ 4
- 3
src/test/kotlin/com/dmdirc/ktirc/messages/PartProcessorTest.kt Datei anzeigen

3
 import com.dmdirc.ktirc.TestConstants
3
 import com.dmdirc.ktirc.TestConstants
4
 import com.dmdirc.ktirc.model.IrcMessage
4
 import com.dmdirc.ktirc.model.IrcMessage
5
 import com.dmdirc.ktirc.model.User
5
 import com.dmdirc.ktirc.model.User
6
+import com.dmdirc.ktirc.params
6
 import com.dmdirc.ktirc.util.currentTimeProvider
7
 import com.dmdirc.ktirc.util.currentTimeProvider
7
 import org.junit.jupiter.api.Assertions.assertEquals
8
 import org.junit.jupiter.api.Assertions.assertEquals
8
 import org.junit.jupiter.api.BeforeEach
9
 import org.junit.jupiter.api.BeforeEach
18
     @Test
19
     @Test
19
     fun `PartProcessor raises part event without message`() {
20
     fun `PartProcessor raises part event without message`() {
20
         val events = PartProcessor().process(
21
         val events = PartProcessor().process(
21
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PART", listOf("#crashandburn".toByteArray())))
22
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PART", params("#crashandburn")))
22
         assertEquals(1, events.size)
23
         assertEquals(1, events.size)
23
 
24
 
24
         assertEquals(TestConstants.time, events[0].time)
25
         assertEquals(TestConstants.time, events[0].time)
30
     @Test
31
     @Test
31
     fun `PartProcessor raises part event with message`() {
32
     fun `PartProcessor raises part event with message`() {
32
         val events = PartProcessor().process(
33
         val events = PartProcessor().process(
33
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PART", listOf("#crashandburn".toByteArray(), "Hack the planet!".toByteArray())))
34
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PART", params("#crashandburn", "Hack the planet!")))
34
         assertEquals(1, events.size)
35
         assertEquals(1, events.size)
35
 
36
 
36
         assertEquals(TestConstants.time, events[0].time)
37
         assertEquals(TestConstants.time, events[0].time)
42
     @Test
43
     @Test
43
     fun `PartProcessor does nothing if prefix missing`() {
44
     fun `PartProcessor does nothing if prefix missing`() {
44
         val events = PartProcessor().process(
45
         val events = PartProcessor().process(
45
-                IrcMessage(emptyMap(), null, "PART", listOf("#crashandburn".toByteArray())))
46
+                IrcMessage(emptyMap(), null, "PART", params("#crashandburn")))
46
         assertEquals(0, events.size)
47
         assertEquals(0, events.size)
47
     }
48
     }
48
 
49
 

+ 8
- 7
src/test/kotlin/com/dmdirc/ktirc/messages/PrivmsgProcessorTest.kt Datei anzeigen

6
 import com.dmdirc.ktirc.events.MessageReceived
6
 import com.dmdirc.ktirc.events.MessageReceived
7
 import com.dmdirc.ktirc.model.IrcMessage
7
 import com.dmdirc.ktirc.model.IrcMessage
8
 import com.dmdirc.ktirc.model.User
8
 import com.dmdirc.ktirc.model.User
9
+import com.dmdirc.ktirc.params
9
 import com.dmdirc.ktirc.util.currentTimeProvider
10
 import com.dmdirc.ktirc.util.currentTimeProvider
10
 import org.junit.jupiter.api.Assertions.assertEquals
11
 import org.junit.jupiter.api.Assertions.assertEquals
11
 import org.junit.jupiter.api.BeforeEach
12
 import org.junit.jupiter.api.BeforeEach
21
     @Test
22
     @Test
22
     fun `PrivsgProcessor raises message received event`() {
23
     fun `PrivsgProcessor raises message received event`() {
23
         val events = PrivmsgProcessor().process(
24
         val events = PrivmsgProcessor().process(
24
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", listOf("#crashandburn".toByteArray(), "hack the planet!".toByteArray())))
25
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "hack the planet!")))
25
         assertEquals(1, events.size)
26
         assertEquals(1, events.size)
26
 
27
 
27
         val event = events[0] as MessageReceived
28
         val event = events[0] as MessageReceived
34
     @Test
35
     @Test
35
     fun `PrivsgProcessor raises action received event with content`() {
36
     fun `PrivsgProcessor raises action received event with content`() {
36
         val events = PrivmsgProcessor().process(
37
         val events = PrivmsgProcessor().process(
37
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", listOf("#crashandburn".toByteArray(), "\u0001ACTION hacks the planet\u0001".toByteArray())))
38
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001ACTION hacks the planet\u0001")))
38
         assertEquals(1, events.size)
39
         assertEquals(1, events.size)
39
 
40
 
40
         val event = events[0] as ActionReceived
41
         val event = events[0] as ActionReceived
47
     @Test
48
     @Test
48
     fun `PrivsgProcessor raises action received event without content`() {
49
     fun `PrivsgProcessor raises action received event without content`() {
49
         val events = PrivmsgProcessor().process(
50
         val events = PrivmsgProcessor().process(
50
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", listOf("#crashandburn".toByteArray(), "\u0001ACTION\u0001".toByteArray())))
51
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001ACTION\u0001")))
51
         assertEquals(1, events.size)
52
         assertEquals(1, events.size)
52
 
53
 
53
         val event = events[0] as ActionReceived
54
         val event = events[0] as ActionReceived
60
     @Test
61
     @Test
61
     fun `PrivsgProcessor raises action received event with lowercase type`() {
62
     fun `PrivsgProcessor raises action received event with lowercase type`() {
62
         val events = PrivmsgProcessor().process(
63
         val events = PrivmsgProcessor().process(
63
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", listOf("#crashandburn".toByteArray(), "\u0001action hacks the planet\u0001".toByteArray())))
64
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001action hacks the planet\u0001")))
64
         assertEquals(1, events.size)
65
         assertEquals(1, events.size)
65
 
66
 
66
         val event = events[0] as ActionReceived
67
         val event = events[0] as ActionReceived
73
     @Test
74
     @Test
74
     fun `PrivsgProcessor raises CTCP received event with content`() {
75
     fun `PrivsgProcessor raises CTCP received event with content`() {
75
         val events = PrivmsgProcessor().process(
76
         val events = PrivmsgProcessor().process(
76
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", listOf("#crashandburn".toByteArray(), "\u0001PING 12345\u0001".toByteArray())))
77
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001PING 12345\u0001")))
77
         assertEquals(1, events.size)
78
         assertEquals(1, events.size)
78
 
79
 
79
         val event = events[0] as CtcpReceived
80
         val event = events[0] as CtcpReceived
87
     @Test
88
     @Test
88
     fun `PrivsgProcessor raises CTCP received event without content`() {
89
     fun `PrivsgProcessor raises CTCP received event without content`() {
89
         val events = PrivmsgProcessor().process(
90
         val events = PrivmsgProcessor().process(
90
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", listOf("#crashandburn".toByteArray(), "\u0001PING\u0001".toByteArray())))
91
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001PING\u0001")))
91
         assertEquals(1, events.size)
92
         assertEquals(1, events.size)
92
 
93
 
93
         val event = events[0] as CtcpReceived
94
         val event = events[0] as CtcpReceived
101
     @Test
102
     @Test
102
     fun `PrivsgProcessor does nothing if prefix missing`() {
103
     fun `PrivsgProcessor does nothing if prefix missing`() {
103
         val events = PrivmsgProcessor().process(
104
         val events = PrivmsgProcessor().process(
104
-                IrcMessage(emptyMap(), null, "PRIVMSG", listOf("#crashandburn".toByteArray(), "hack the planet!".toByteArray())))
105
+                IrcMessage(emptyMap(), null, "PRIVMSG", params("#crashandburn", "hack the planet!")))
105
         assertEquals(0, events.size)
106
         assertEquals(0, events.size)
106
     }
107
     }
107
 }
108
 }

+ 3
- 2
src/test/kotlin/com/dmdirc/ktirc/messages/QuitProcessorTest.kt Datei anzeigen

3
 import com.dmdirc.ktirc.TestConstants
3
 import com.dmdirc.ktirc.TestConstants
4
 import com.dmdirc.ktirc.model.IrcMessage
4
 import com.dmdirc.ktirc.model.IrcMessage
5
 import com.dmdirc.ktirc.model.User
5
 import com.dmdirc.ktirc.model.User
6
+import com.dmdirc.ktirc.params
6
 import com.dmdirc.ktirc.util.currentTimeProvider
7
 import com.dmdirc.ktirc.util.currentTimeProvider
7
 import org.junit.jupiter.api.Assertions.assertEquals
8
 import org.junit.jupiter.api.Assertions.assertEquals
8
 import org.junit.jupiter.api.BeforeEach
9
 import org.junit.jupiter.api.BeforeEach
29
     @Test
30
     @Test
30
     fun `QuitProcessor raises quit event with message`() {
31
     fun `QuitProcessor raises quit event with message`() {
31
         val events = QuitProcessor().process(
32
         val events = QuitProcessor().process(
32
-                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "QUIT", listOf("Hack the planet!".toByteArray())))
33
+                IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "QUIT", params("Hack the planet!")))
33
         assertEquals(1, events.size)
34
         assertEquals(1, events.size)
34
 
35
 
35
         assertEquals(TestConstants.time, events[0].time)
36
         assertEquals(TestConstants.time, events[0].time)
40
     @Test
41
     @Test
41
     fun `QuitProcessor does nothing if prefix missing`() {
42
     fun `QuitProcessor does nothing if prefix missing`() {
42
         val events = QuitProcessor().process(
43
         val events = QuitProcessor().process(
43
-                IrcMessage(emptyMap(), null, "QUIT", listOf("Hack the planet!".toByteArray())))
44
+                IrcMessage(emptyMap(), null, "QUIT", params("Hack the planet!")))
44
         assertEquals(0, events.size)
45
         assertEquals(0, events.size)
45
     }
46
     }
46
 
47
 

+ 3
- 9
src/test/kotlin/com/dmdirc/ktirc/messages/WelcomeProcessorTest.kt Datei anzeigen

2
 
2
 
3
 import com.dmdirc.ktirc.TestConstants
3
 import com.dmdirc.ktirc.TestConstants
4
 import com.dmdirc.ktirc.model.IrcMessage
4
 import com.dmdirc.ktirc.model.IrcMessage
5
+import com.dmdirc.ktirc.params
5
 import com.dmdirc.ktirc.util.currentTimeProvider
6
 import com.dmdirc.ktirc.util.currentTimeProvider
6
 import org.junit.jupiter.api.Assertions.assertEquals
7
 import org.junit.jupiter.api.Assertions.assertEquals
7
-import org.junit.jupiter.api.Assertions.assertTrue
8
 import org.junit.jupiter.api.BeforeEach
8
 import org.junit.jupiter.api.BeforeEach
9
 import org.junit.jupiter.api.Test
9
 import org.junit.jupiter.api.Test
10
 
10
 
17
         currentTimeProvider = { TestConstants.time }
17
         currentTimeProvider = { TestConstants.time }
18
     }
18
     }
19
 
19
 
20
-    @Test
21
-    fun `WelcomeProcessor can handle 001s`() {
22
-        assertTrue(processor.commands.contains("001")) { "WelcomeProcessor should handle 001 messages" }
23
-    }
24
-
25
     @Test
20
     @Test
26
     fun `WelcomeProcessor returns server welcome event`() {
21
     fun `WelcomeProcessor returns server welcome event`() {
27
-        val events = processor.process(IrcMessage(emptyMap(), "thegibson.com".toByteArray(), "001", listOf(
28
-                "acidBurn".toByteArray(),
29
-                "Welcome to the Internet Relay Network, acidBurn!burn@hacktheplanet.com".toByteArray())))
22
+        val events = processor.process(IrcMessage(emptyMap(), "thegibson.com".toByteArray(), "001", params(
23
+                "acidBurn", "Welcome to the Internet Relay Network, acidBurn!burn@hacktheplanet.com")))
30
         assertEquals(1, events.size)
24
         assertEquals(1, events.size)
31
         assertEquals(TestConstants.time, events[0].time)
25
         assertEquals(TestConstants.time, events[0].time)
32
         assertEquals("acidBurn", events[0].localNick)
26
         assertEquals("acidBurn", events[0].localNick)

Laden…
Abbrechen
Speichern