From 2565788d62de5ae98f251b472298a7d3fddeca3d Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Fri, 14 Dec 2018 11:12:06 +0100 Subject: [PATCH] Fixes and unifies implementation of HostmaskHelper --- .../libquassel/util/irc/HostmaskHelper.kt | 18 ++- .../libquassel/util/irc/HostmaskHelperTest.kt | 119 ++++++++++++++++-- 2 files changed, 113 insertions(+), 24 deletions(-) diff --git a/lib/src/main/java/de/kuschku/libquassel/util/irc/HostmaskHelper.kt b/lib/src/main/java/de/kuschku/libquassel/util/irc/HostmaskHelper.kt index c4fff7431..f4156afa7 100644 --- a/lib/src/main/java/de/kuschku/libquassel/util/irc/HostmaskHelper.kt +++ b/lib/src/main/java/de/kuschku/libquassel/util/irc/HostmaskHelper.kt @@ -21,27 +21,23 @@ package de.kuschku.libquassel.util.irc object HostmaskHelper { fun nick(mask: String) = mask - .substringBefore('!', missingDelimiterValue = mask) + .substringBeforeLast('@') + .substringBefore('!') fun user(mask: String) = mask - .substringBeforeLast('@', missingDelimiterValue = mask) + .substringBeforeLast('@') .substringAfter('!', missingDelimiterValue = "") fun host(mask: String) = mask .substringAfterLast('@', missingDelimiterValue = "") fun split(mask: String): Triple<String, String, String> { - val userPartHostSplit = mask.split("@", limit = 2) - if (userPartHostSplit.size < 2) - return Triple(mask, "", "") + val userPart = mask.substringBeforeLast('@') + val host = mask.substringAfterLast('@', missingDelimiterValue = "") - val (userPart, host) = userPartHostSplit + val user = userPart.substringAfter('!', missingDelimiterValue = "") + val nick = userPart.substringBefore('!') - val nickUserSplit = userPart.split('!', limit = 2) - if (nickUserSplit.size < 2) - return Triple(mask, "", host) - - val (nick, user) = nickUserSplit return Triple(nick, user, host) } } diff --git a/lib/src/test/java/de/kuschku/libquassel/util/irc/HostmaskHelperTest.kt b/lib/src/test/java/de/kuschku/libquassel/util/irc/HostmaskHelperTest.kt index 51c406e0b..e227b110a 100644 --- a/lib/src/test/java/de/kuschku/libquassel/util/irc/HostmaskHelperTest.kt +++ b/lib/src/test/java/de/kuschku/libquassel/util/irc/HostmaskHelperTest.kt @@ -6,34 +6,127 @@ import org.junit.Test class HostmaskHelperTest { @Test fun testNormal() { - assertEquals("justJanne", HostmaskHelper.nick("justJanne!kuschku@lithium.kuschku.de")) - assertEquals("kuschku", HostmaskHelper.user("justJanne!kuschku@lithium.kuschku.de")) - assertEquals("lithium.kuschku.de", HostmaskHelper.host("justJanne!kuschku@lithium.kuschku.de")) + assertEquals("justJanne", + HostmaskHelper.nick("justJanne!kuschku@lithium.kuschku.de")) + assertEquals("justJanne", + HostmaskHelper.split("justJanne!kuschku@lithium.kuschku.de").first) + + assertEquals("kuschku", + HostmaskHelper.user("justJanne!kuschku@lithium.kuschku.de")) + assertEquals("kuschku", + HostmaskHelper.split("justJanne!kuschku@lithium.kuschku.de").second) + + assertEquals("lithium.kuschku.de", + HostmaskHelper.host("justJanne!kuschku@lithium.kuschku.de")) + assertEquals("lithium.kuschku.de", + HostmaskHelper.split("justJanne!kuschku@lithium.kuschku.de").third) } @Test fun testUnvalidatedIdent() { - assertEquals("justJanne", HostmaskHelper.nick("justJanne!~kuschku@lithium.kuschku.de")) - assertEquals("~kuschku", HostmaskHelper.user("justJanne!~kuschku@lithium.kuschku.de")) - assertEquals("lithium.kuschku.de", HostmaskHelper.host("justJanne!~kuschku@lithium.kuschku.de")) + assertEquals("justJanne", + HostmaskHelper.nick("justJanne!~kuschku@lithium.kuschku.de")) + assertEquals("justJanne", + HostmaskHelper.split("justJanne!~kuschku@lithium.kuschku.de").first) + + assertEquals("~kuschku", + HostmaskHelper.user("justJanne!~kuschku@lithium.kuschku.de")) + assertEquals("~kuschku", + HostmaskHelper.split("justJanne!~kuschku@lithium.kuschku.de").second) + + assertEquals("lithium.kuschku.de", + HostmaskHelper.host("justJanne!~kuschku@lithium.kuschku.de")) + assertEquals("lithium.kuschku.de", + HostmaskHelper.split("justJanne!~kuschku@lithium.kuschku.de").third) } @Test fun testUnicode() { - assertEquals("bärlauch", HostmaskHelper.nick("bärlauch!maße@flüge.de")) - assertEquals("maße", HostmaskHelper.user("bärlauch!maße@flüge.de")) - assertEquals("flüge.de", HostmaskHelper.host("bärlauch!maße@flüge.de")) + assertEquals("bärlauch", + HostmaskHelper.nick("bärlauch!maße@flüge.de")) + assertEquals("bärlauch", + HostmaskHelper.split("bärlauch!maße@flüge.de").first) + + assertEquals("maße", + HostmaskHelper.user("bärlauch!maße@flüge.de")) + assertEquals("maße", + HostmaskHelper.split("bärlauch!maße@flüge.de").second) + + assertEquals("flüge.de", + HostmaskHelper.host("bärlauch!maße@flüge.de")) + assertEquals("flüge.de", + HostmaskHelper.split("bärlauch!maße@flüge.de").third) } @Test fun testServer() { - assertEquals("irc.freenode.org", HostmaskHelper.nick("irc.freenode.org")) + assertEquals("irc.freenode.org", + HostmaskHelper.nick("irc.freenode.org")) + assertEquals("irc.freenode.org", + HostmaskHelper.split("irc.freenode.org").first) + + assertEquals("", + HostmaskHelper.user("irc.freenode.org")) + assertEquals("", + HostmaskHelper.split("irc.freenode.org").second) + + assertEquals("", + HostmaskHelper.host("irc.freenode.org")) + assertEquals("", + HostmaskHelper.split("irc.freenode.org").third) + } + + @Test + fun testAtNick() { + assertEquals("@nick", + HostmaskHelper.nick("@nick!~ident@example.org")) + assertEquals("@nick", + HostmaskHelper.split("@nick!~ident@example.org").first) + + assertEquals("~ident", + HostmaskHelper.user("@nick!~ident@example.org")) + assertEquals("~ident", + HostmaskHelper.split("@nick!~ident@example.org").second) + + assertEquals("example.org", + HostmaskHelper.host("@nick!~ident@example.org")) + assertEquals("example.org", + HostmaskHelper.split("@nick!~ident@example.org").third) + } + + @Test + fun testReversedDelimiters() { + assertEquals("a", + HostmaskHelper.nick("a@a!")) + assertEquals("a", + HostmaskHelper.split("a@a!").first) + + assertEquals("", + HostmaskHelper.user("a@a!")) + assertEquals("", + HostmaskHelper.split("a@a!").second) + + assertEquals("a!", + HostmaskHelper.host("a@a!")) + assertEquals("a!", + HostmaskHelper.split("a@a!").third) } @Test fun testDiscord() { - assertEquals("Gin_", HostmaskHelper.nick("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord")) - assertEquals("Gin_!♡♅ƸӜƷ♅♡!", HostmaskHelper.user("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord")) - assertEquals("discord", HostmaskHelper.host("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord")) + assertEquals("Gin_", + HostmaskHelper.nick("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord")) + assertEquals("Gin_", + HostmaskHelper.split("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord").first) + + assertEquals("Gin_!♡♅ƸӜƷ♅♡!", + HostmaskHelper.user("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord")) + assertEquals("Gin_!♡♅ƸӜƷ♅♡!", + HostmaskHelper.split("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord").second) + + assertEquals("discord", + HostmaskHelper.host("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord")) + assertEquals("discord", + HostmaskHelper.split("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord").third) } } -- GitLab