Files
kotlin-fork/js/js.translator/testData/box/initialize/propertyInitializationOrder.kt
T
2017-05-26 18:20:21 +03:00

68 lines
1.2 KiB
Kotlin
Vendored

// SKIP_MINIFICATION
// This test uses eval
open class A {
val a: Int
open val b: Int
val c = 99
val d: Int = 555
get() = field
val e: Int
get() = field
@get:JsName("getF")
val f: Int
@get:JsName("getG")
val g: Int = 777
lateinit var h: String
init {
foo()
a = 23
b = 42
e = 987
f = 888
}
}
fun foo() {}
fun box(): String {
val aBody = eval("A").toString()
val expectedRegex = build {
property("a")
field("b")
property("c")
field("d")
field("e")
field("f")
field("g")
property("h")
}
if (expectedRegex.find(aBody) == null) return "fail"
return "OK"
}
fun build(f: RegexBuilder.() -> Unit): Regex {
val builder = RegexBuilder()
builder.f()
return Regex(builder.string + "foo()", RegexOption.MULTILINE)
}
class RegexBuilder {
var string = ""
fun property(name: String) {
string += "this.$name\\s+=$ANY_CHARS"
}
fun field(name: String) {
string += "this.$name$FIELD_SUFFIX\\s+=$ANY_CHARS"
}
}
val ANY_CHARS = "(.|\n)+"
val FIELD_SUFFIX = "_[a-zA-Z0-9\\\$_]+"