From c91770339d3c935d8b38c655695263191cec8bdb Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sat, 31 Dec 2022 01:28:37 -0800 Subject: [PATCH] Changed the allow parameter to also take a string --- lib/build.gradle.kts | 2 +- lib/detekt-baseline.xml | 2 +- .../net/thauvin/erik/urlencoder/UrlEncoder.kt | 15 ++++++++++++--- .../net/thauvin/erik/urlencoder/UrlEncoderTest.kt | 4 ++++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 2ab1f25..be86be5 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -108,7 +108,7 @@ tasks { archiveBaseName.set(rootProject.name) } - "sonarqube" { + "sonar" { dependsOn(koverReport) } } diff --git a/lib/detekt-baseline.xml b/lib/detekt-baseline.xml index f63f67e..6438727 100644 --- a/lib/detekt-baseline.xml +++ b/lib/detekt-baseline.xml @@ -7,6 +7,6 @@ MagicNumber:UrlEncoder.kt$UrlEncoder$16 MagicNumber:UrlEncoder.kt$UrlEncoder$3 MagicNumber:UrlEncoder.kt$UrlEncoder$4 - NestedBlockDepth:UrlEncoder.kt$UrlEncoder$@JvmStatic fun encode(source: String, vararg allow: Char): String + NestedBlockDepth:UrlEncoder.kt$UrlEncoder$@JvmStatic fun encode(source: String, allow: String): String diff --git a/lib/src/main/kotlin/net/thauvin/erik/urlencoder/UrlEncoder.kt b/lib/src/main/kotlin/net/thauvin/erik/urlencoder/UrlEncoder.kt index 63220e5..89b76bf 100644 --- a/lib/src/main/kotlin/net/thauvin/erik/urlencoder/UrlEncoder.kt +++ b/lib/src/main/kotlin/net/thauvin/erik/urlencoder/UrlEncoder.kt @@ -83,7 +83,7 @@ object UrlEncoder { ch = source[i] if (ch == '%') { if (out == null) { - out = StringBuilder(source.length) + out = StringBuilder(length) out.append(source, 0, i) } if (bytesBuffer == null) { @@ -125,7 +125,7 @@ object UrlEncoder { * encoding. Letters, numbers, unreserved (`_-!.~'()*`) and allowed characters are left intact. */ @JvmStatic - fun encode(source: String, vararg allow: Char): String { + fun encode(source: String, allow: String): String { if (source.isBlank()) { return source } @@ -135,7 +135,7 @@ object UrlEncoder { var i = 0 while (i < source.length) { ch = source[i] - if (ch.isUnreserved() || allow.contains(ch)) { + if (ch.isUnreserved() || allow.indexOf(ch) != -1) { out?.append(ch) i++ } else { @@ -165,4 +165,13 @@ object UrlEncoder { return out?.toString() ?: source } + + /** + * Transforms a provided [String] object into a new string, containing only valid URL characters in the UTF-8 + * encoding. Letters, numbers, unreserved (`_-!.~'()*`) and allowed characters are left intact. + */ + @JvmStatic + fun encode(source: String, vararg allow: Char): String { + return encode(source, String(allow)) + } } diff --git a/lib/src/test/kotlin/net/thauvin/erik/urlencoder/UrlEncoderTest.kt b/lib/src/test/kotlin/net/thauvin/erik/urlencoder/UrlEncoderTest.kt index 2930a59..223e8e8 100644 --- a/lib/src/test/kotlin/net/thauvin/erik/urlencoder/UrlEncoderTest.kt +++ b/lib/src/test/kotlin/net/thauvin/erik/urlencoder/UrlEncoderTest.kt @@ -23,6 +23,7 @@ import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertFailsWith import kotlin.test.assertSame +import kotlin.test.assertTrue class UrlEncoderTest { @@ -53,10 +54,13 @@ class UrlEncoderTest { fun testEncode() { assertEquals("", encode("")) assertSame(same, encode(same)) + assertSame(same, encode(same, "")) + assertTrue(encode("").isEmpty()) validMap.forEach { assertEquals(it.value, encode(it.key)) } assertEquals("?test=a%20test", encode("?test=a test", '=', '?')) + assertEquals("?test=a%20test", encode("?test=a test", "=?")) assertEquals("aaa", encode("aaa", 'a')) } }