From 8badfca4592dbac6faf0260159c73aed72285d69 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Wed, 29 May 2019 03:52:36 +0300 Subject: [PATCH] Fix titlecase lowering in decapitalize Replace isUpperCase() with !isLowerCase check to lower both upper- and titlecased first chars. --- libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt | 2 +- libraries/stdlib/jvm/test/text/StringJVMTest.kt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt b/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt index fd1d19b08ac..aff9a260cc1 100644 --- a/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt +++ b/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt @@ -609,7 +609,7 @@ public actual fun String.decapitalize(): String { @SinceKotlin("1.3") @ExperimentalStdlibApi public fun String.decapitalize(locale: Locale): String { - return if (isNotEmpty() && this[0].isUpperCase()) substring(0, 1).toLowerCase(locale) + substring(1) else this + return if (isNotEmpty() && !this[0].isLowerCase()) substring(0, 1).toLowerCase(locale) + substring(1) else this } /** diff --git a/libraries/stdlib/jvm/test/text/StringJVMTest.kt b/libraries/stdlib/jvm/test/text/StringJVMTest.kt index b73728ff842..b748d461f9f 100644 --- a/libraries/stdlib/jvm/test/text/StringJVMTest.kt +++ b/libraries/stdlib/jvm/test/text/StringJVMTest.kt @@ -93,5 +93,9 @@ class StringJVMTest { // Locale-specific case mappings. assertEquals("ıII", "III".decapitalize(Locale("tr", "TR"))) assertEquals("iII", "III".decapitalize(Locale.US)) + + // Case mapping where title case is different than uppercase. + assertEquals("dzdzdz", "DZdzdz".decapitalize(Locale.US)) + assertEquals("dzdzdz", "Dzdzdz".decapitalize(Locale.US)) } }