String.format does not support no locale #KT-22932

This commit is contained in:
Abduqodiri Qurbonzoda
2020-02-27 23:15:29 +03:00
parent f4d53c18a1
commit fc22cfa896
3 changed files with 33 additions and 1 deletions
@@ -15,6 +15,7 @@ import java.nio.charset.Charset
import java.nio.charset.CodingErrorAction import java.nio.charset.CodingErrorAction
import java.util.Locale import java.util.Locale
import java.util.regex.Pattern import java.util.regex.Pattern
import kotlin.internal.LowPriorityInOverloadResolution
/** /**
@@ -288,17 +289,38 @@ public inline fun String.Companion.format(format: String, vararg args: Any?): St
* Uses this string as a format string and returns a string obtained by substituting the specified arguments, * Uses this string as a format string and returns a string obtained by substituting the specified arguments,
* using the specified locale. * using the specified locale.
*/ */
@LowPriorityInOverloadResolution
@kotlin.internal.InlineOnly @kotlin.internal.InlineOnly
public inline fun String.format(locale: Locale, vararg args: Any?): String = java.lang.String.format(locale, this, *args) public inline fun String.format(locale: Locale, vararg args: Any?): String = java.lang.String.format(locale, this, *args)
/**
* Uses this string as a format string and returns a string obtained by substituting the specified arguments,
* using the specified locale. If [locale] is `null` then no localization is applied.
*/
@SinceKotlin("1.4")
@JvmName("formatNullable")
@kotlin.internal.InlineOnly
public inline fun String.format(locale: Locale?, vararg args: Any?): String = java.lang.String.format(locale, this, *args)
/** /**
* Uses the provided [format] as a format string and returns a string obtained by substituting the specified arguments, * Uses the provided [format] as a format string and returns a string obtained by substituting the specified arguments,
* using the specified locale. * using the specified locale.
*/ */
@LowPriorityInOverloadResolution
@kotlin.internal.InlineOnly @kotlin.internal.InlineOnly
public inline fun String.Companion.format(locale: Locale, format: String, vararg args: Any?): String = public inline fun String.Companion.format(locale: Locale, format: String, vararg args: Any?): String =
java.lang.String.format(locale, format, *args) java.lang.String.format(locale, format, *args)
/**
* Uses the provided [format] as a format string and returns a string obtained by substituting the specified arguments,
* using the specified locale. If [locale] is `null` then no localization is applied.
*/
@SinceKotlin("1.4")
@JvmName("formatNullable")
@kotlin.internal.InlineOnly
public inline fun String.Companion.format(locale: Locale?, format: String, vararg args: Any?): String =
java.lang.String.format(locale, format, *args)
/** /**
* Splits this char sequence around matches of the given regular expression. * Splits this char sequence around matches of the given regular expression.
+5 -1
View File
@@ -5,6 +5,7 @@
package test package test
import java.util.*
import kotlin.test.assertEquals import kotlin.test.assertEquals
public actual fun assertTypeEquals(expected: Any?, actual: Any?) { public actual fun assertTypeEquals(expected: Any?, actual: Any?) {
@@ -26,4 +27,7 @@ internal actual inline fun testOnNonJvm6And7(f: () -> Unit) {
} }
} }
public actual fun testOnJvm(action: () -> Unit) = action() public actual fun testOnJvm(action: () -> Unit) = action()
public actual fun testOnJs(action: () -> Unit) {} public actual fun testOnJs(action: () -> Unit) {}
@Suppress("HasPlatformType", "UNCHECKED_CAST")
public fun <T> platformNull() = Collections.singletonList(null as T).first()
@@ -6,6 +6,7 @@
package test.text package test.text
import test.collections.assertArrayNotSameButEquals import test.collections.assertArrayNotSameButEquals
import test.platformNull
import java.util.* import java.util.*
import kotlin.test.* import kotlin.test.*
@@ -41,9 +42,14 @@ class StringJVMTest {
assertEquals("1,234,567.890", "%,.3f".format(Locale.ENGLISH, 1234567.890)) assertEquals("1,234,567.890", "%,.3f".format(Locale.ENGLISH, 1234567.890))
assertEquals("1.234.567,890", "%,.3f".format(Locale.GERMAN, 1234567.890)) assertEquals("1.234.567,890", "%,.3f".format(Locale.GERMAN, 1234567.890))
assertEquals("1 234 567,890", "%,.3f".format(Locale("fr"), 1234567.890)) assertEquals("1 234 567,890", "%,.3f".format(Locale("fr"), 1234567.890))
assertEquals("1,234,567.890", "%,.3f".format(null, 1234567.890))
assertEquals("1,234,567.890", "%,.3f".format(platformNull<Locale>(), 1234567.890))
assertEquals("1,234,567.890", String.format(Locale.ENGLISH, "%,.3f", 1234567.890)) assertEquals("1,234,567.890", String.format(Locale.ENGLISH, "%,.3f", 1234567.890))
assertEquals("1.234.567,890", String.format(Locale.GERMAN, "%,.3f", 1234567.890)) assertEquals("1.234.567,890", String.format(Locale.GERMAN, "%,.3f", 1234567.890))
assertEquals("1 234 567,890", String.format(Locale("fr"), "%,.3f", 1234567.890)) assertEquals("1 234 567,890", String.format(Locale("fr"), "%,.3f", 1234567.890))
assertEquals("1,234,567.890", String.format(null, "%,.3f", 1234567.890))
assertEquals("1,234,567.890", String.format(platformNull<Locale>(), "%,.3f", 1234567.890))
} }
@Test fun toByteArrayEncodings() { @Test fun toByteArrayEncodings() {