String.toBoolean() should be String?.toBoolean() #KT-14119

This commit is contained in:
Abduqodiri Qurbonzoda
2020-02-27 21:08:31 +03:00
parent b8b1dd753c
commit d5c851980c
8 changed files with 38 additions and 16 deletions
+12 -2
View File
@@ -5,6 +5,8 @@
package kotlin.text package kotlin.text
import kotlin.internal.LowPriorityInOverloadResolution
expect class Regex { expect class Regex {
constructor(pattern: String) constructor(pattern: String)
constructor(pattern: String, option: RegexOption) constructor(pattern: String, option: RegexOption)
@@ -282,9 +284,17 @@ public expect val String.Companion.CASE_INSENSITIVE_ORDER: Comparator<String>
/** /**
* Returns `true` if the contents of this string is equal to the word "true", ignoring case, and `false` otherwise. * Returns `true` if the content of this string is equal to the word "true", ignoring case, and `false` otherwise.
*/ */
expect fun String.toBoolean(): Boolean @LowPriorityInOverloadResolution
@kotlin.internal.InlineOnly
public inline fun String.toBoolean(): Boolean = this.toBoolean()
/**
* Returns `true` if this string is not `null` and its content is equal to the word "true", ignoring case, and `false` otherwise.
*/
@SinceKotlin("1.4")
public expect fun String?.toBoolean(): Boolean
/** /**
* Parses the string as a signed [Byte] number and returns the result. * Parses the string as a signed [Byte] number and returns the result.
@@ -5,14 +5,12 @@
package kotlin.jdk7.test package kotlin.jdk7.test
import test.platformNull
import java.io.* import java.io.*
import java.util.*
import kotlin.test.* import kotlin.test.*
class UseAutoCloseableResourceTest { class UseAutoCloseableResourceTest {
@Suppress("HasPlatformType", "UNCHECKED_CAST") fun <T> platformNull() = Collections.singletonList(null as T).first()
class Resource(val faultyClose: Boolean = false) : AutoCloseable { class Resource(val faultyClose: Boolean = false) : AutoCloseable {
var isClosed = false var isClosed = false
@@ -5,14 +5,12 @@
package kotlin.jdk7.test package kotlin.jdk7.test
import test.platformNull
import java.io.* import java.io.*
import java.util.*
import kotlin.test.* import kotlin.test.*
class UseCloseableResourceTest { class UseCloseableResourceTest {
@Suppress("HasPlatformType", "UNCHECKED_CAST") fun <T> platformNull() = Collections.singletonList(null as T).first()
class Resource(val faultyClose: Boolean = false) : Closeable { class Resource(val faultyClose: Boolean = false) : Closeable {
var isClosed = false var isClosed = false
@@ -7,9 +7,10 @@ package kotlin.text
/** /**
* Returns `true` if the contents of this string is equal to the word "true", ignoring case, and `false` otherwise. * Returns `true` if this string is not `null` and its content is equal to the word "true", ignoring case, and `false` otherwise.
*/ */
public actual fun String.toBoolean(): Boolean = toLowerCase() == "true" @SinceKotlin("1.4")
public actual fun String?.toBoolean(): Boolean = this != null && this.toLowerCase() == "true"
/** /**
* Parses the string as a signed [Byte] number and returns the result. * Parses the string as a signed [Byte] number and returns the result.
@@ -46,10 +46,12 @@ public actual inline fun Int.toString(radix: Int): String = java.lang.Integer.to
public actual inline fun Long.toString(radix: Int): String = java.lang.Long.toString(this, checkRadix(radix)) public actual inline fun Long.toString(radix: Int): String = java.lang.Long.toString(this, checkRadix(radix))
/** /**
* Returns `true` if the contents of this string is equal to the word "true", ignoring case, and `false` otherwise. * Returns `true` if this string is not `null` and its content is equal to the word "true", ignoring case, and `false` otherwise.
*/ */
@JvmName("toBooleanNullable")
@SinceKotlin("1.4")
@kotlin.internal.InlineOnly @kotlin.internal.InlineOnly
public actual inline fun String.toBoolean(): Boolean = java.lang.Boolean.parseBoolean(this) public actual inline fun String?.toBoolean(): Boolean = java.lang.Boolean.parseBoolean(this)
/** /**
* Parses the string as a signed [Byte] number and returns the result. * Parses the string as a signed [Byte] number and returns the result.
@@ -5,8 +5,8 @@
package test.io package test.io
import test.platformNull
import java.io.* import java.io.*
import java.util.*
import kotlin.test.* import kotlin.test.*
class UseCloseableResourceTest { class UseCloseableResourceTest {
@@ -23,9 +23,6 @@ class UseCloseableResourceTest {
assertEquals("World", secondLine) assertEquals("World", secondLine)
} }
@Suppress("HasPlatformType", "UNCHECKED_CAST") fun <T> platformNull() = Collections.singletonList(null as T).first()
class Resource(val faultyClose: Boolean = false) : Closeable { class Resource(val faultyClose: Boolean = false) : Closeable {
var isClosed = false var isClosed = false
@@ -104,4 +104,19 @@ class StringJVMTest {
assertEquals("dzdzdz", "DZdzdz".decapitalize(Locale.US)) assertEquals("dzdzdz", "DZdzdz".decapitalize(Locale.US))
assertEquals("dzdzdz", "Dzdzdz".decapitalize(Locale.US)) assertEquals("dzdzdz", "Dzdzdz".decapitalize(Locale.US))
} }
@Test
fun stringToBoolean() {
assertFalse(platformNull<String>().toBoolean())
}
@Test
fun stringEquals() {
assertFalse(platformNull<String>().equals("sample", ignoreCase = false))
assertFalse(platformNull<String>().equals("sample", ignoreCase = true))
assertFalse("sample".equals(platformNull<String>(), ignoreCase = false))
assertFalse("sample".equals(platformNull(), ignoreCase = true))
assertTrue(platformNull<String>().equals(platformNull(), ignoreCase = true))
assertTrue(platformNull<String>().equals(platformNull<String>(), ignoreCase = false))
}
} }
@@ -15,6 +15,7 @@ class StringNumberConversionTest {
assertEquals(true, "True".toBoolean()) assertEquals(true, "True".toBoolean())
assertEquals(false, "false".toBoolean()) assertEquals(false, "false".toBoolean())
assertEquals(false, "not so true".toBoolean()) assertEquals(false, "not so true".toBoolean())
assertEquals(false, (null as String?).toBoolean())
} }
@Test fun toByte() { @Test fun toByte() {