Introduce Common readln() and readlnOrNull() top-level functions #KT-48456

This commit is contained in:
Abduqodiri Qurbonzoda
2021-09-05 15:31:11 +00:00
committed by Space
parent 14b66872b5
commit 97eb28144f
37 changed files with 271 additions and 6 deletions
+7 -1
View File
@@ -2,4 +2,10 @@ public fun print(message: kotlin.Any?): kotlin.Unit
public fun println(): kotlin.Unit
public fun println(message: kotlin.Any?): kotlin.Unit
public fun println(message: kotlin.Any?): kotlin.Unit
@kotlin.SinceKotlin(version = "1.6")
public fun readln(): kotlin.String
@kotlin.SinceKotlin(version = "1.6")
public fun readlnOrNull(): kotlin.String?
+7 -1
View File
@@ -2,4 +2,10 @@ public fun print(message: kotlin.Any?): kotlin.Unit
public fun println(): kotlin.Unit
public fun println(message: kotlin.Any?): kotlin.Unit
public fun println(message: kotlin.Any?): kotlin.Unit
@kotlin.SinceKotlin(version = "1.6")
public fun readln(): kotlin.String
@kotlin.SinceKotlin(version = "1.6")
public fun readlnOrNull(): kotlin.String?
+24
View File
@@ -15,5 +15,29 @@ public expect fun println(message: Any?)
/** Prints the given [message] to the standard output stream. */
public expect fun print(message: Any?)
/**
* Reads a line of input from the standard input stream and returns it,
* or throws a [RuntimeException] if EOF has already been reached when [readln] is called.
*
* LF or CRLF is treated as the line terminator. Line terminator is not included in the returned string.
*
* Currently this function is not supported in Kotlin/JS and throws [UnsupportedOperationException].
*/
@SinceKotlin("1.6")
public expect fun readln(): String
/**
* Reads a line of input from the standard input stream and returns it,
* or return `null` if EOF has already been reached when [readlnOrNull] is called.
*
* LF or CRLF is treated as the line terminator. Line terminator is not included in the returned string.
*
* Currently this function is not supported in Kotlin/JS and throws [UnsupportedOperationException].
*/
@SinceKotlin("1.6")
public expect fun readlnOrNull(): String?
internal class ReadAfterEOFException(message: String?) : RuntimeException(message)
internal expect interface Serializable
@@ -104,3 +104,9 @@ public actual fun println(message: Any?) {
public actual fun print(message: Any?) {
output.print(message)
}
@SinceKotlin("1.6")
public actual fun readln(): String = throw UnsupportedOperationException("readln is not supported in Kotlin/JS")
@SinceKotlin("1.6")
public actual fun readlnOrNull(): String? = throw UnsupportedOperationException("readlnOrNull is not supported in Kotlin/JS")
@@ -149,7 +149,7 @@ public actual inline fun println() {
* The input is decoded using the system default Charset. A [CharacterCodingException] is thrown if input is malformed.
*/
@SinceKotlin("1.6")
public fun readln(): String = readlnOrNull() ?: throw ReadAfterEOFException("EOF has already been reached")
public actual fun readln(): String = readlnOrNull() ?: throw ReadAfterEOFException("EOF has already been reached")
/**
* Reads a line of input from the standard input stream and returns it,
@@ -160,9 +160,7 @@ public fun readln(): String = readlnOrNull() ?: throw ReadAfterEOFException("EOF
* The input is decoded using the system default Charset. A [CharacterCodingException] is thrown if input is malformed.
*/
@SinceKotlin("1.6")
public fun readlnOrNull(): String? = readLine()
private class ReadAfterEOFException(message: String?) : RuntimeException(message)
public actual fun readlnOrNull(): String? = readLine()
/**
* Reads a line of input from the standard input stream.
+14
View File
@@ -48,6 +48,20 @@ class ConsoleTest {
testReadLine("first${linuxLineSeparator}second", listOf("first", "second"))
}
@Test
fun shouldReadMultipleEmptyLines() {
testReadLine(
"first${linuxLineSeparator}second${linuxLineSeparator}${linuxLineSeparator}${linuxLineSeparator}",
listOf("first", "second", "", "")
)
}
@Test
fun shouldReadAloneCarriageReturn() {
val result = readLines("\r", Charsets.UTF_8)
assertEquals(listOf("\r"), result)
}
@Test
fun shouldReadConsecutiveEmptyLines() {
testReadLine("$linuxLineSeparator$linuxLineSeparator", listOf("", ""))
+6
View File
@@ -23,6 +23,12 @@ public actual fun print(message: Any?) {
println(message)
}
@SinceKotlin("1.6")
public actual fun readln(): String = TODO("Wasm stdlib: IO")
@SinceKotlin("1.6")
public actual fun readlnOrNull(): String? = TODO("Wasm stdlib: IO")
internal actual interface Serializable