From d8646e29b73583761eda17241485cc6748873650 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Fri, 13 Sep 2019 19:16:38 +0200 Subject: [PATCH] Add additional Result api test --- .../inlineClasses/resultRunCatchingOrElse.kt | 42 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 5 +++ .../LightAnalysisModeTestGenerated.java | 5 +++ .../ir/IrBlackBoxCodegenTestGenerated.java | 5 +++ .../IrJsCodegenBoxTestGenerated.java | 5 +++ .../semantics/JsCodegenBoxTestGenerated.java | 5 +++ 6 files changed, 67 insertions(+) create mode 100644 compiler/testData/codegen/box/inlineClasses/resultRunCatchingOrElse.kt diff --git a/compiler/testData/codegen/box/inlineClasses/resultRunCatchingOrElse.kt b/compiler/testData/codegen/box/inlineClasses/resultRunCatchingOrElse.kt new file mode 100644 index 00000000000..96b882ed7d9 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/resultRunCatchingOrElse.kt @@ -0,0 +1,42 @@ +inline class Result(val value: Any?) { + fun exceptionOrNull(): Throwable? = + when (value) { + is Failure -> value.exception + else -> null + } + + public companion object { + public inline fun success(value: T): Result = + Result(value) + + public inline fun failure(exception: Throwable): Result = + Result(Failure(exception)) + } + + class Failure( + val exception: Throwable + ) +} + +inline fun T.runCatching(block: T.() -> R): Result { + return try { + Result.success(block()) + } catch (e: Throwable) { + Result.failure(e) + } +} + + +inline fun Result.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() diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index fe776de50c8..80c1a3f8009 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -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"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index f04f036f008..696d0661c01 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -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"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 40e625794c9..4c5b2cb4e9a 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -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"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 31239507cf4..6965559efe7 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -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"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 885f209f530..c243f192d2d 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -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");