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

65 lines
1.5 KiB
Kotlin
Vendored

// EXPECTED_REACHABLE_NODES: 1294
// KT-2388
package foo
// workaround for Rhino
class Done(val i: Int)
var done = Done(0)
object foo {
var result = "FAIL"
val lambda = {
result = "foo.lambda OK"
done = Done(3)
}
val extLambda: Done.() -> Unit = {
result = "foo.extLambda OK"
done = this
}
}
class Foo {
var result = "FAIL"
val lambda = {
result = "Foo::lambda OK"
done = Done(-7)
}
val extLambda: Done.() -> Unit = {
result = "Foo::extLambda OK"
done = this
}
}
fun box(): String {
val a = foo.lambda
val b = foo.extLambda
val f = Foo()
val c = f.lambda
val d = f.extLambda
a()
if (foo.result != "foo.lambda OK") return "foo.result = \"${foo.result}\", but expected \"foo.lambda OK\""
if (done.i != 3) return "done.i = ${done.i}, but expected 3"
Done(23).b()
if (foo.result != "foo.extLambda OK") return "foo.result = \"${foo.result}\", but expected \"foo.extLambda OK\""
if (done.i != 23) return "done.i = ${done.i}, but expected 23"
c()
if (f.result != "Foo::lambda OK") return "a.result = \"${f.result}\", but expected \"Foo::lambda OK\""
if (done.i != -7) return "done.i = ${done.i}, but expected -7"
Done(71).d()
if (f.result != "Foo::extLambda OK") return "a.result = \"${f.result}\", but expected \"Foo::extLambda OK\""
if (done.i != 71) return "done.i = ${done.i}, but expected 71"
return "OK"
}