Files
kotlin-fork/compiler/testData/codegen/boxError/semantic/reifiedWithWrongArguments.kt
T
Ivan Kylchik 982d10d127 [TESTS] Add IGNORE_ERROR directive to boxError tests
This is needed because now these tests use new test infrastructure
and here, after frontend facade, there is error check. We need to
disable such check in these tests.
2021-11-08 23:50:34 +03:00

93 lines
2.5 KiB
Kotlin
Vendored

// IGNORE_ERRORS
// ERROR_POLICY: SEMANTIC
// MODULE: lib
// FILE: t.kt
import kotlin.reflect.KClass
var l = ""
fun log(s: String, r: Any? = null): Any? {
l += s + ";"
return r
}
inline fun assertFails(block: () -> Unit) {
try {
block()
} catch (e: Throwable) {
return
}
fail("Expected an exception to be thrown, but was completed successfully.")
}
fun <reified R> getKClassFromRaifed(b: Boolean): KClass<R>? {
log("getKClassFromRaifed($b)")
if (b) return R::class
log("getKClassFromRaifed: null")
return null
}
fun <T> getKClassFromT(b: Boolean): KClass<T>? {
log("getKClassFromT($b)")
if (b) return T::class
log("getKClassFromT: null")
return null
}
fun getKClassFromErrorType(b: Boolean): KClass<*>? {
log("getKClassFromErrorType($b)")
if (b) return ErrT::class
log("getKClassFromErrorType: null")
return null
}
inline fun <reified R, T> test1() {
assertFails { getKClassFromRaifed<R>(true) }
assertFails { getKClassFromRaifed<T>(true) }
assertFails { getKClassFromRaifed<String>(true) }
assertFails { getKClassFromT<R>(true) }
assertFails { getKClassFromT<T>(true) }
assertFails { getKClassFromT<String>(true) }
assertFails { getKClassFromErrorType(true) }
getKClassFromRaifed<R>(false)
getKClassFromRaifed<T>(false)
getKClassFromRaifed<String>(false)
getKClassFromT<R>(false)
getKClassFromT<T>(false)
getKClassFromT<String>(false)
getKClassFromErrorType(false)
}
inline fun <reified R> foo(a: Any, b: Any, c: Any): KClass<*>? {
log("foo")
return R::class
}
fun <T> testSideEffects() {
assertFails { foo<T>(log("1", 1), log("2", 2), log("3", 3)) }
foo<String>(log("a", 1), log("b", 2), log("c", 3))
}
// MODULE: main(lib)
// FILE: b.kt
fun box(): String {
test1<Int, Short>()
testSideEffects()
val expected = "getKClassFromRaifed(true);getKClassFromRaifed(true);getKClassFromRaifed(true);" +
"getKClassFromT(true);getKClassFromT(true);getKClassFromT(true);" +
"getKClassFromErrorType(true);" +
"getKClassFromRaifed(false);getKClassFromRaifed: null;getKClassFromRaifed(false);getKClassFromRaifed: null;getKClassFromRaifed(false);getKClassFromRaifed: null;" +
"getKClassFromT(false);getKClassFromT: null;getKClassFromT(false);getKClassFromT: null;getKClassFromT(false);getKClassFromT: null;" +
"getKClassFromErrorType(false);getKClassFromErrorType: null;" +
"1;2;3;foo;a;b;c;foo;"
if (l != expected)
return "l = $l"
return "OK"
}