Add tests for KT-45236
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
import kotlin.contracts.contract
|
||||
|
||||
sealed class NetRequestStatus<out T : Any> {
|
||||
abstract val value: T?
|
||||
data class Error<out T : Any>(
|
||||
val error: Throwable,
|
||||
override val value: T? = null,
|
||||
) : NetRequestStatus<T>()
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
fun <T : Any> NetRequestStatus<T>.isError(): Boolean {
|
||||
contract { returns(true) implies (this@isError is NetRequestStatus.Error) }
|
||||
return (this is NetRequestStatus.Error)
|
||||
}
|
||||
|
||||
fun <T : Any> successOrThrow() {
|
||||
val nextTerminal: NetRequestStatus<T> = NetRequestStatus.Error(Exception())
|
||||
if (nextTerminal.isError()) throw nextTerminal.error
|
||||
}
|
||||
|
||||
|
||||
fun box(): String {
|
||||
try {
|
||||
successOrThrow<String>()
|
||||
} catch (e: Exception) {
|
||||
return "OK"
|
||||
}
|
||||
|
||||
return "'successOrThrow<...>()' should throw an exception"
|
||||
}
|
||||
Reference in New Issue
Block a user