summaryrefslogtreecommitdiff
path: root/engine/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/test')
-rw-r--r--engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/debug/DebugCategoriesTest.kt93
-rw-r--r--engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/debug/DebugStateTest.kt45
-rw-r--r--engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/permission/LunaticChatPermissionNodeTest.kt10
-rw-r--r--engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/protocol/ProtocolBackwardCompatibilityTest.kt17
4 files changed, 163 insertions, 2 deletions
diff --git a/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/debug/DebugCategoriesTest.kt b/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/debug/DebugCategoriesTest.kt
new file mode 100644
index 0000000..5931c60
--- /dev/null
+++ b/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/debug/DebugCategoriesTest.kt
@@ -0,0 +1,93 @@
+package dev.m1sk9.lunaticChat.engine.debug
+
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
+
+class DebugCategoriesTest {
+ @Test
+ fun `a true spelling switches every category on`() {
+ listOf("true", "TRUE", "yes", "on", "all", " true ").forEach { raw ->
+ val parsed = DebugCategories.parse(raw)
+
+ assertTrue(parsed.enabled, raw)
+ assertEquals(DebugCategory.entries.toSet(), parsed.active, raw)
+ }
+ }
+
+ @Test
+ fun `a false spelling switches every category off`() {
+ listOf("false", "FALSE", "no", "off", "none", "", " ").forEach { raw ->
+ val parsed = DebugCategories.parse(raw)
+
+ assertFalse(parsed.enabled, raw)
+ assertEquals(emptySet(), parsed.active, raw)
+ }
+ }
+
+ @Test
+ fun `a comma separated list switches on exactly the categories it names`() {
+ val parsed = DebugCategories.parse("velocity,protocol")
+
+ assertTrue(parsed.enabled)
+ assertEquals(setOf(DebugCategory.VELOCITY, DebugCategory.PROTOCOL), parsed.active)
+ assertEquals(emptyList(), parsed.unknown)
+ }
+
+ @Test
+ fun `surrounding whitespace, casing and empty entries are ignored`() {
+ val parsed = DebugCategories.parse(" Velocity , , PROTOCOL ,")
+
+ assertEquals(setOf(DebugCategory.VELOCITY, DebugCategory.PROTOCOL), parsed.active)
+ assertEquals(emptyList(), parsed.unknown)
+ }
+
+ @Test
+ fun `an unknown name is reported without discarding the categories beside it`() {
+ val parsed = DebugCategories.parse("velocity,proxy")
+
+ assertEquals(setOf(DebugCategory.VELOCITY), parsed.active)
+ assertEquals(listOf("proxy"), parsed.unknown)
+ }
+
+ @Test
+ fun `a switch naming only unknown categories logs nothing`() {
+ val parsed = DebugCategories.parse("maybe")
+
+ assertEquals(emptySet(), parsed.active)
+ assertEquals(listOf("maybe"), parsed.unknown)
+ }
+
+ @Test
+ fun `resolve reads a list the way parse reads the same names spelled with commas`() {
+ assertEquals(
+ DebugCategories.parse("velocity,protocol"),
+ DebugCategories.resolve(listOf("velocity", "protocol")),
+ )
+ }
+
+ @Test
+ fun `all names every category wherever a category may be named`() {
+ // The same word works as `debug: all`, as `categories: [all]` and as `/lc debug all on`;
+ // reading it as a category name in only two of the three would log nothing for the third.
+ assertEquals(DebugCategory.entries.toSet(), DebugCategories.parse("all").active)
+ assertEquals(DebugCategory.entries.toSet(), DebugCategories.resolve(listOf("all")).active)
+ assertEquals(emptyList(), DebugCategories.resolve(listOf("ALL")).unknown)
+ }
+
+ @Test
+ fun `all beside a named category still names every category`() {
+ val parsed = DebugCategories.resolve(listOf("velocity", "all"))
+
+ assertEquals(DebugCategory.entries.toSet(), parsed.active)
+ assertEquals(emptyList(), parsed.unknown)
+ }
+
+ @Test
+ fun `every category is reachable by the key operators write`() {
+ DebugCategory.entries.forEach { category ->
+ assertEquals(category, DebugCategory.fromKey(category.key))
+ }
+ }
+}
diff --git a/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/debug/DebugStateTest.kt b/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/debug/DebugStateTest.kt
new file mode 100644
index 0000000..ae1456d
--- /dev/null
+++ b/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/debug/DebugStateTest.kt
@@ -0,0 +1,45 @@
+package dev.m1sk9.lunaticChat.engine.debug
+
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
+
+class DebugStateTest {
+ @Test
+ fun `a state starts on the categories it was built with`() {
+ val state = DebugState(setOf(DebugCategory.VELOCITY))
+
+ assertTrue(state.isEnabled(DebugCategory.VELOCITY))
+ assertFalse(state.isEnabled(DebugCategory.CHAT))
+ }
+
+ @Test
+ fun `replace drops the categories it does not list`() {
+ val state = DebugState(setOf(DebugCategory.VELOCITY, DebugCategory.CHAT))
+
+ state.replace(setOf(DebugCategory.PROTOCOL))
+
+ assertEquals(setOf(DebugCategory.PROTOCOL), state.enabled)
+ }
+
+ @Test
+ fun `set switches one category without touching the others`() {
+ val state = DebugState(setOf(DebugCategory.VELOCITY))
+
+ state.set(DebugCategory.CHAT, on = true)
+ state.set(DebugCategory.VELOCITY, on = false)
+
+ assertEquals(setOf(DebugCategory.CHAT), state.enabled)
+ }
+
+ @Test
+ fun `a state built from a set is unaffected by later changes to it`() {
+ val categories = mutableSetOf(DebugCategory.VELOCITY)
+ val state = DebugState(categories)
+
+ categories += DebugCategory.CHAT
+
+ assertEquals(setOf(DebugCategory.VELOCITY), state.enabled)
+ }
+}
diff --git a/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/permission/LunaticChatPermissionNodeTest.kt b/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/permission/LunaticChatPermissionNodeTest.kt
index d6d74f7..e5e43cb 100644
--- a/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/permission/LunaticChatPermissionNodeTest.kt
+++ b/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/permission/LunaticChatPermissionNodeTest.kt
@@ -12,6 +12,9 @@ class LunaticChatPermissionNodeTest {
LunaticChatPermissionNode.Reply,
LunaticChatPermissionNode.Settings,
LunaticChatPermissionNode.Status,
+ LunaticChatPermissionNode.Reload,
+ LunaticChatPermissionNode.Debug,
+ LunaticChatPermissionNode.Dump,
LunaticChatPermissionNode.Channel,
LunaticChatPermissionNode.ChannelCreate,
LunaticChatPermissionNode.ChannelList,
@@ -44,8 +47,8 @@ class LunaticChatPermissionNodeTest {
}
@Test
- fun `should have 24 permission nodes`() {
- assertEquals(24, allNodes.size)
+ fun `should have 27 permission nodes`() {
+ assertEquals(27, allNodes.size)
}
@Test
@@ -54,6 +57,9 @@ class LunaticChatPermissionNodeTest {
assertEquals("lunaticchat.command.tell", LunaticChatPermissionNode.Tell.permissionNode)
assertEquals("lunaticchat.command.reply", LunaticChatPermissionNode.Reply.permissionNode)
assertEquals("lunaticchat.command.lc.settings", LunaticChatPermissionNode.Settings.permissionNode)
+ assertEquals("lunaticchat.command.lc.reload", LunaticChatPermissionNode.Reload.permissionNode)
+ assertEquals("lunaticchat.command.lc.debug", LunaticChatPermissionNode.Debug.permissionNode)
+ assertEquals("lunaticchat.command.lc.dump", LunaticChatPermissionNode.Dump.permissionNode)
assertEquals("lunaticchat.command.lc.channel.create", LunaticChatPermissionNode.ChannelCreate.permissionNode)
assertEquals("lunaticchat.command.lcv.status", LunaticChatPermissionNode.VelocityStatus.permissionNode)
assertEquals("lunaticchat.spy", LunaticChatPermissionNode.Spy.permissionNode)
diff --git a/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/protocol/ProtocolBackwardCompatibilityTest.kt b/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/protocol/ProtocolBackwardCompatibilityTest.kt
index e70edda..095ecd1 100644
--- a/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/protocol/ProtocolBackwardCompatibilityTest.kt
+++ b/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/protocol/ProtocolBackwardCompatibilityTest.kt
@@ -42,6 +42,10 @@ class ProtocolBackwardCompatibilityTest {
const val PRESENCE_SNAPSHOT_V1_0_1 =
"""{"players":[{"playerName":"Alice","serverName":"lobby"},{"playerName":"Bob","serverName":"survival"}],"timestamp":5000}"""
+
+ // Protocol 1.0.2 snapshots — NEVER MODIFY after commit
+ const val DIRECT_MESSAGE_V1_0_2 =
+ """{"messageId":"dm-321","sourceServerName":"survival","senderId":"00000007-0000-0000-0000-000000000000","senderName":"Sender","targetServerName":"lobby","targetName":"Recipient","message":"Hello!","timestamp":6000,"senderWorld":"world_nether"}"""
}
private fun buildRawMessage(
@@ -162,6 +166,19 @@ class ProtocolBackwardCompatibilityTest {
assertEquals("Recipient", decoded.targetName)
assertEquals("Hello!", decoded.message)
assertEquals(4000L, decoded.timestamp)
+ assertEquals("", decoded.senderWorld)
+ }
+
+ @Test
+ fun `current codec can decode protocol 1_0_2 DirectMessageRelay`() {
+ val data = buildRawMessage("direct_message", DIRECT_MESSAGE_V1_0_2)
+ val decoded = PluginMessageCodec.decode(data)
+
+ assertIs<PluginMessage.DirectMessageRelay>(decoded)
+ assertEquals("dm-321", decoded.messageId)
+ assertEquals("Sender", decoded.senderName)
+ assertEquals("Hello!", decoded.message)
+ assertEquals("world_nether", decoded.senderWorld)
}
@Test