backend/tests: Add blackbox tests from Kotlin JVM

Added tests from testData/codegen/box directory. There are blackbox tests
in other directories and they are to be added.
This commit is contained in:
Ilya Matveev
2017-01-12 19:43:20 +07:00
parent d5988297b1
commit 1b553ebfaf
2643 changed files with 66666 additions and 0 deletions
@@ -0,0 +1,33 @@
// TODO: muted automatically, investigate should it be ran for JS or not
// IGNORE_BACKEND: JS
// WITH_RUNTIME
import java.lang.reflect.Method
import kotlin.test.assertEquals
@Retention(AnnotationRetention.RUNTIME)
annotation class Ann(val x: String)
fun foo0(block: () -> Unit) = block.javaClass
fun foo1(block: (String) -> Unit) = block.javaClass
fun testMethod(method: Method, name: String) {
assertEquals("OK", method.getAnnotation(Ann::class.java).x, "On method of test named `$name`")
for ((index, annotations) in method.getParameterAnnotations().withIndex()) {
val ann = annotations.filterIsInstance<Ann>().single()
assertEquals("OK$index", ann.x, "On parameter $index of test named `$name`")
}
}
fun testClass(clazz: Class<*>, name: String) {
val invokes = clazz.getDeclaredMethods().single() { !it.isBridge() }
testMethod(invokes, name)
}
fun box(): String {
testClass(foo0( @Ann("OK") fun() {} ), "1")
testClass(foo1( @Ann("OK") fun(@Ann("OK0") x: String) {} ), "2")
return "OK"
}
@@ -0,0 +1,35 @@
// TODO: muted automatically, investigate should it be ran for JS or not
// IGNORE_BACKEND: JS
// WITH_RUNTIME
import java.lang.reflect.Method
import kotlin.test.assertEquals
@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
annotation class Ann(val x: String)
fun foo0(block: () -> Unit) = block.javaClass
fun testMethod(method: Method, name: String) {
assertEquals("OK", method.getAnnotation(Ann::class.java).x, "On method of test named `$name`")
for ((index, annotations) in method.getParameterAnnotations().withIndex()) {
val ann = annotations.filterIsInstance<Ann>().single()
assertEquals("OK$index", ann.x, "On parameter $index of test named `$name`")
}
}
fun testClass(clazz: Class<*>, name: String) {
val invokes = clazz.getDeclaredMethods().single() { !it.isBridge() }
testMethod(invokes, name)
}
fun box(): String {
testClass(foo0(@Ann("OK") { }), "1")
testClass(foo0( @Ann("OK") { }), "2")
testClass(foo0() @Ann("OK") { }, "3")
return "OK"
}
@@ -0,0 +1,49 @@
// TODO: muted automatically, investigate should it be ran for JS or not
// IGNORE_BACKEND: JS
// WITH_RUNTIME
// FILE: Test.java
class Test {
public static Class<?> apply(Runnable x) {
return x.getClass();
}
public static interface ABC {
void apply(String x1, String x2);
}
public static Class<?> applyABC(ABC x) {
return x.getClass();
}
}
// FILE: test.kt
import java.lang.reflect.Method
import kotlin.test.assertEquals
@Retention(AnnotationRetention.RUNTIME)
annotation class Ann(val x: String)
fun testMethod(method: Method, name: String) {
assertEquals("OK", method.getAnnotation(Ann::class.java).x, "On method of test named `$name`")
for ((index, annotations) in method.getParameterAnnotations().withIndex()) {
val ann = annotations.filterIsInstance<Ann>().single()
assertEquals("OK$index", ann.x, "On parameter $index of test named `$name`")
}
}
fun testClass(clazz: Class<*>, name: String) {
val invokes = clazz.getDeclaredMethods().single() { !it.isBridge() }
testMethod(invokes, name)
}
fun box(): String {
testClass(Test.apply(@Ann("OK") fun(){}), "1")
testClass(Test.applyABC(@Ann("OK") fun(@Ann("OK0") x: String, @Ann("OK1") y: String){}), "2")
return "OK"
}
@@ -0,0 +1,40 @@
// TODO: muted automatically, investigate should it be ran for JS or not
// IGNORE_BACKEND: JS
// WITH_RUNTIME
// FILE: Test.java
class Test {
public static Class<?> apply(Runnable x) {
return x.getClass();
}
}
// FILE: test.kt
import java.lang.reflect.Method
import kotlin.test.assertEquals
@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
annotation class Ann(val x: String)
fun testMethod(method: Method, name: String) {
assertEquals("OK", method.getAnnotation(Ann::class.java).x, "On method of test named `$name`")
for ((index, annotations) in method.getParameterAnnotations().withIndex()) {
val ann = annotations.filterIsInstance<Ann>().single()
assertEquals("OK$index", ann.x, "On parameter $index of test named `$name`")
}
}
fun testClass(clazz: Class<*>, name: String) {
val invokes = clazz.getDeclaredMethods().single() { !it.isBridge() }
testMethod(invokes, name)
}
fun box(): String {
testClass(Test.apply(@Ann("OK") {}), "1")
testClass(Test.apply @Ann("OK") {}, "2")
return "OK"
}