Add additional Result api test

This commit is contained in:
Steven Schäfer
2019-09-13 19:16:38 +02:00
committed by Alexander Udalov
parent 49efa5fbc4
commit d8646e29b7
6 changed files with 67 additions and 0 deletions
@@ -0,0 +1,42 @@
inline class Result<out T>(val value: Any?) {
fun exceptionOrNull(): Throwable? =
when (value) {
is Failure -> value.exception
else -> null
}
public companion object {
public inline fun <T> success(value: T): Result<T> =
Result(value)
public inline fun <T> failure(exception: Throwable): Result<T> =
Result(Failure(exception))
}
class Failure(
val exception: Throwable
)
}
inline fun <T, R> T.runCatching(block: T.() -> R): Result<R> {
return try {
Result.success(block())
} catch (e: Throwable) {
Result.failure(e)
}
}
inline fun <R, T : R> Result<T>.getOrElse(onFailure: (exception: Throwable) -> R): R {
return when (val exception = exceptionOrNull()) {
null -> value as T
else -> onFailure(exception)
}
}
class A {
fun f() = runCatching { "OK" }.getOrElse { throw it }
}
fun box(): String = A().f()
@@ -12800,6 +12800,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/inlineClasses/resultInlining.kt");
}
@TestMetadata("resultRunCatchingOrElse.kt")
public void testResultRunCatchingOrElse() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/resultRunCatchingOrElse.kt");
}
@TestMetadata("secondaryConstructorWithVararg.kt")
public void testSecondaryConstructorWithVararg() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/secondaryConstructorWithVararg.kt");
@@ -12805,6 +12805,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/inlineClasses/resultInlining.kt");
}
@TestMetadata("resultRunCatchingOrElse.kt")
public void testResultRunCatchingOrElse() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/resultRunCatchingOrElse.kt");
}
@TestMetadata("secondaryConstructorWithVararg.kt")
public void testSecondaryConstructorWithVararg() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/secondaryConstructorWithVararg.kt");
@@ -11685,6 +11685,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/inlineClasses/resultInlining.kt");
}
@TestMetadata("resultRunCatchingOrElse.kt")
public void testResultRunCatchingOrElse() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/resultRunCatchingOrElse.kt");
}
@TestMetadata("secondaryConstructorWithVararg.kt")
public void testSecondaryConstructorWithVararg() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/secondaryConstructorWithVararg.kt");
@@ -10085,6 +10085,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/inlineClasses/resultInlining.kt");
}
@TestMetadata("resultRunCatchingOrElse.kt")
public void testResultRunCatchingOrElse() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/resultRunCatchingOrElse.kt");
}
@TestMetadata("secondaryConstructorWithVararg.kt")
public void testSecondaryConstructorWithVararg() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/secondaryConstructorWithVararg.kt");
@@ -11240,6 +11240,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/inlineClasses/resultInlining.kt");
}
@TestMetadata("resultRunCatchingOrElse.kt")
public void testResultRunCatchingOrElse() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/resultRunCatchingOrElse.kt");
}
@TestMetadata("secondaryConstructorWithVararg.kt")
public void testSecondaryConstructorWithVararg() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/secondaryConstructorWithVararg.kt");