JS backend: added tests for infix calls.

#KT-3998   in progress
 #EA-56241 in progress
This commit is contained in:
Zalim Bashorov
2014-05-08 15:54:05 +04:00
parent 235b03c407
commit 898275e658
6 changed files with 99 additions and 1 deletions
@@ -0,0 +1,40 @@
// KT-3998 Infix call doesn't work for function literals and another classes which implements invoke convention (in JS backend)
package foo
class A(val s: String) {
fun A.invoke(a: A) = "${this.s} ${this@A.s} ${a.s}"
}
fun test1(): String {
val a = A("a")
val b = A("b")
val c = A("c")
val f = a.b(c) // works
val s = a b c //compiler crashes
return "$f | $s"
}
fun test2(): String {
val a: ExtensionFunction1<*, *, *>.(ExtensionFunction1<*, *, *>)->String = { "a" }
val b: ExtensionFunction1<*, *, *>.(ExtensionFunction1<*, *, *>)->String = {
val aa = this as ExtensionFunction1<Any?, Any?, Any?>;
val cc = it as ExtensionFunction1<Any?, Any?, Any?>;
"${null.aa(null)} b ${null.cc(null)}"
}
val c: ExtensionFunction1<*, *, *>.(ExtensionFunction1<*, *, *>)->String = { "c" }
val f = a.b(c) // works
val s = a b c //compiler crashes
return "$f | $s"
}
fun assertEquals<T>(expected: T, actual: T) {
if (expected != actual) throw Exception("expected: $expected, actual: $actual")
}
fun box(): String {
assertEquals("a b c | a b c", test1())
assertEquals("a b c | a b c", test2())
return "OK"
}