From bf987cff5f6f4e333e7f4b711d28f306f86f64bd Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Wed, 14 Dec 2016 16:10:42 +0300 Subject: [PATCH] Tests for basic SuspendFunction-related restrictions (already implemented within type system) --- .../functionVsSuspendFunction.kt | 17 +++++++++++++++++ .../functionVsSuspendFunction.txt | 13 +++++++++++++ .../noInvokeForSuspendFunction.kt | 2 ++ .../noInvokeForSuspendFunction.txt | 4 ++++ 4 files changed, 36 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/functionVsSuspendFunction.kt create mode 100644 compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/functionVsSuspendFunction.txt create mode 100644 compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/noInvokeForSuspendFunction.kt create mode 100644 compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/noInvokeForSuspendFunction.txt diff --git a/compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/functionVsSuspendFunction.kt b/compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/functionVsSuspendFunction.kt new file mode 100644 index 00000000000..88dd5fede53 --- /dev/null +++ b/compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/functionVsSuspendFunction.kt @@ -0,0 +1,17 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +fun useSuspendFn(sfn: suspend () -> Unit) = sfn +fun useFn(fn: () -> Unit) = fn + +fun ambiguous(sfn: suspend () -> Unit) = sfn +fun ambiguous(fn: () -> Unit) = fn + +fun test1(sfn: suspend () -> Unit) = useFn(sfn) +fun test2(fn: () -> Unit) = useSuspendFn(fn) + +fun test3(sfn: suspend () -> Unit) = useSuspendFn(sfn) +fun test4(): suspend () -> Unit = useSuspendFn {} + +fun test5(sfn: suspend () -> Unit) = ambiguous(sfn) +fun test6(fn: () -> Unit) = ambiguous(fn) +fun test7(): () -> Unit = ambiguous {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/functionVsSuspendFunction.txt b/compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/functionVsSuspendFunction.txt new file mode 100644 index 00000000000..4fe679f46b6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/functionVsSuspendFunction.txt @@ -0,0 +1,13 @@ +package + +public fun ambiguous(/*0*/ fn: () -> kotlin.Unit): () -> kotlin.Unit +public fun ambiguous(/*0*/ sfn: suspend () -> kotlin.Unit): suspend () -> kotlin.Unit +public fun test1(/*0*/ sfn: suspend () -> kotlin.Unit): () -> kotlin.Unit +public fun test2(/*0*/ fn: () -> kotlin.Unit): suspend () -> kotlin.Unit +public fun test3(/*0*/ sfn: suspend () -> kotlin.Unit): suspend () -> kotlin.Unit +public fun test4(): suspend () -> kotlin.Unit +public fun test5(/*0*/ sfn: suspend () -> kotlin.Unit): suspend () -> kotlin.Unit +public fun test6(/*0*/ fn: () -> kotlin.Unit): () -> kotlin.Unit +public fun test7(): () -> kotlin.Unit +public fun useFn(/*0*/ fn: () -> kotlin.Unit): () -> kotlin.Unit +public fun useSuspendFn(/*0*/ sfn: suspend () -> kotlin.Unit): suspend () -> kotlin.Unit diff --git a/compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/noInvokeForSuspendFunction.kt b/compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/noInvokeForSuspendFunction.kt new file mode 100644 index 00000000000..1299adfcac9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/noInvokeForSuspendFunction.kt @@ -0,0 +1,2 @@ +fun test1(sfn: suspend () -> Unit) = sfn() +fun test2(sfn: suspend () -> Unit) = sfn.invoke() \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/noInvokeForSuspendFunction.txt b/compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/noInvokeForSuspendFunction.txt new file mode 100644 index 00000000000..123d33e963f --- /dev/null +++ b/compiler/testData/diagnostics/tests/coroutines/suspendFunctionType/noInvokeForSuspendFunction.txt @@ -0,0 +1,4 @@ +package + +public fun test1(/*0*/ sfn: suspend () -> kotlin.Unit): [ERROR : Error function type] +public fun test2(/*0*/ sfn: suspend () -> kotlin.Unit): [ERROR : Error function type]