Files
kotlin-fork/compiler/testData/codegen/box/localClasses/closureWithSelfInstantiation.kt
T
Alexey Andreev 383e273fed In LightAnalysisModeTestGenerated skip tests ignored in JVM
When a test is marked as ignored in JVM BE (i.e. IGNORE_BACKEND: JVM)
it's ignored in LightAnalysisModeTestGenerated. This means that
this tests is expected to fail. However, often tests that fail
in JVM blackbox tests, don't fail in LAMTG, therefore it's reasonable
to skip these tests in LAMTG at all.
2017-05-29 15:30:27 +03:00

78 lines
1.7 KiB
Kotlin
Vendored

// Enable for JVM backend when KT-8120 gets fixed
// IGNORE_BACKEND: JVM
fun box(): String {
val capturedInConstructor = 1
val capturedInBody = 10
var log = ""
class A(var x: Int) {
var y = 0
fun copy(): A {
log += "A.copy;"
val result = A(x)
result.y += capturedInBody
return result
}
init {
log += "A.<init>;"
y += x + capturedInConstructor
}
}
val a = A(100).copy()
if (a.y != 111) return "fail1a: ${a.y}"
if (a.x != 100) return "fail1b: ${a.x}"
class B(var x: Int) {
var y = 0
fun copier(): () -> B {
log += "B.copier;"
return {
log += "B.copy;"
val result = B(x)
result.y += capturedInBody
result
}
}
init {
y += x + capturedInConstructor
log += "B.<init>;"
}
}
val b = B(100).copier()()
if (b.y != 111) return "fail2a: ${b.y}"
if (b.x != 100) return "fail2b: ${b.x}"
class C(var x: Int) {
var y = 0
inner class D() {
fun copyOuter(): C {
log += "D.copyOuter;"
val result = C(x)
result.y += capturedInBody
return result
}
}
init {
log += "C.<init>;"
y += x + capturedInConstructor
}
}
val c = C(100).D().copyOuter()
if (c.y != 111) return "fail3a: ${c.y}"
if (c.x != 100) return "fail3b: ${c.x}"
if (log != "A.<init>;A.copy;A.<init>;B.<init>;B.copier;B.copy;B.<init>;C.<init>;D.copyOuter;C.<init>;") return "fail_log: $log"
return "OK"
}