Files
kotlin-fork/js/js.translator/testData/box/expression/invoke/inheritFromFunctionTraits.kt
T
2018-09-12 09:49:25 +03:00

42 lines
1.2 KiB
Kotlin
Vendored

// EXPECTED_REACHABLE_NODES: 1295
/**
* NOTE: this test originally checked that values of classes inheriting from functions could be invoked as functions.
* However, Function{n} / ExtensionFunction{n} classes were incompatible with JS functions our lambdas were compiled to.
* This led to runtime errors (see KT-7692), so the test is temporarily disabled.
*
* TODO: support inheritance from function types and re-enable this test
* NOTE: inheritance from extension function is forbidden now
*/
package foo
class Bar/* : Function0<String>*/ {
operator fun invoke() = "Bar.invoke()"
}
class Baz/* : Function2<Int, Boolean, String>*/ {
operator fun invoke(i: Int, b: Boolean) = "Baz.invoke($i, $b)"
}
class Mixed/* :
Function1<Int, String>,
Function2<Int, Boolean, String>*/
{
operator fun invoke(i: Int) = "Mixed.invoke($i)"
operator fun invoke(i: Int, b: Boolean) = "Mixed.invoke($i, $b)"
}
fun box(): String {
val bar = Bar()
val baz = Baz()
val mixed = Mixed()
assertEquals("Bar.invoke()", bar())
assertEquals("Baz.invoke(2, false)", baz(2, false))
assertEquals("Mixed.invoke(45)", mixed(45))
assertEquals("Mixed.invoke(552, true)", mixed(552, true))
return "OK"
}