71 lines
1.3 KiB
Kotlin
Vendored
71 lines
1.3 KiB
Kotlin
Vendored
// IGNORE_BACKEND: JS_IR
|
|
// IGNORE_BACKEND: JS_IR_ES6
|
|
// KJS_WITH_FULL_RUNTIME
|
|
// 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")
|
|
field("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\\\$_]+" |