c7435ba760
We are going to deprecate `WITH_RUNTIME` directive. The main reason behind this change is that `WITH_STDLIB` directive better describes its meaning, specifically it will add kotlin stdlib to test's classpath.
73 lines
2.8 KiB
Kotlin
Vendored
73 lines
2.8 KiB
Kotlin
Vendored
// TARGET_BACKEND: JVM
|
|
// WITH_STDLIB
|
|
|
|
import java.util.Date
|
|
|
|
fun assertEquals(expected: String, actual: Any) {
|
|
if ("$actual" != expected)
|
|
throw AssertionError("Fail, expected: $expected, actual: $actual")
|
|
}
|
|
|
|
fun assertGenericSuper(expected: String, function: Any?) {
|
|
val clazz = (function as java.lang.Object).getClass()!!
|
|
val genericSuper = clazz.getGenericInterfaces()[0]!!
|
|
assertEquals(expected, genericSuper)
|
|
}
|
|
|
|
val unitFun = suspend { }
|
|
val intFun = suspend { 42 }
|
|
|
|
fun assertStringParamFun(lambda: suspend (String) -> Unit) {
|
|
assertEquals(
|
|
"kotlin.jvm.functions.Function2<java.lang.String, kotlin.coroutines.Continuation<? super kotlin.Unit>, java.lang.Object>",
|
|
lambda.javaClass.genericInterfaces.single()
|
|
)
|
|
}
|
|
|
|
fun assertListFun(lambda: suspend (List<String>) -> Unit) {
|
|
assertEquals(
|
|
"kotlin.jvm.functions.Function2<java.util.List<? extends java.lang.String>, kotlin.coroutines.Continuation<? super kotlin.Unit>, java.lang.Object>",
|
|
lambda.javaClass.genericInterfaces.single()
|
|
)
|
|
}
|
|
|
|
fun assertMutableListFun(lambda: suspend (MutableList<Double>) -> MutableList<Int>) {
|
|
assertEquals(
|
|
"kotlin.jvm.functions.Function2<java.util.List<java.lang.Double>, kotlin.coroutines.Continuation<? super java.util.List<java.lang.Integer>>, java.lang.Object>",
|
|
lambda.javaClass.genericInterfaces.single()
|
|
)
|
|
}
|
|
|
|
fun assertFunWithIn(lambda: suspend (Comparable<String>) -> Unit) {
|
|
assertEquals(
|
|
"kotlin.jvm.functions.Function2<java.lang.Comparable<? super java.lang.String>, kotlin.coroutines.Continuation<? super kotlin.Unit>, java.lang.Object>",
|
|
lambda.javaClass.genericInterfaces.single()
|
|
)
|
|
}
|
|
|
|
fun assertExtensionFun(lambda: suspend Any.() -> Unit) {
|
|
assertEquals(
|
|
"kotlin.jvm.functions.Function2<java.lang.Object, kotlin.coroutines.Continuation<? super kotlin.Unit>, java.lang.Object>",
|
|
lambda.javaClass.genericInterfaces.single()
|
|
)
|
|
}
|
|
|
|
fun assertExtensionWithArgFun(lambda: suspend Long.(x: Any) -> Date) {
|
|
assertEquals(
|
|
"kotlin.jvm.functions.Function3<java.lang.Long, java.lang.Object, kotlin.coroutines.Continuation<? super java.util.Date>, java.lang.Object>",
|
|
lambda.javaClass.genericInterfaces.single()
|
|
)
|
|
}
|
|
|
|
fun box(): String {
|
|
assertGenericSuper("kotlin.jvm.functions.Function1<kotlin.coroutines.Continuation<? super kotlin.Unit>, java.lang.Object>", unitFun)
|
|
assertGenericSuper("kotlin.jvm.functions.Function1<kotlin.coroutines.Continuation<? super java.lang.Integer>, java.lang.Object>", intFun)
|
|
assertStringParamFun { x: String -> }
|
|
assertListFun { l: List<String> -> l }
|
|
assertMutableListFun { l -> null!! }
|
|
assertFunWithIn { x -> }
|
|
assertExtensionFun { }
|
|
assertExtensionWithArgFun { x -> Date() }
|
|
return "OK"
|
|
}
|