Scripting: add a test using synthetic properties in scripts
related to #KT-54770
This commit is contained in:
committed by
Space Team
parent
0d3964f22e
commit
75da89824c
@@ -0,0 +1,95 @@
|
||||
// TARGET_BACKEND: JVM_IR
|
||||
// IGNORE_LIGHT_ANALYSIS
|
||||
// JVM_ABI_K1_K2_DIFF:
|
||||
// LANGUAGE: +ReferencesToSyntheticJavaProperties
|
||||
// LANGUAGE: -SkipStandaloneScriptsInSourceRoots
|
||||
// WITH_STDLIB
|
||||
|
||||
// FILE: J.java
|
||||
|
||||
public class J {
|
||||
private String stringProperty;
|
||||
private boolean myBooleanProperty;
|
||||
public int numGetCalls;
|
||||
public int numSetCalls;
|
||||
|
||||
public String getStringProperty() {
|
||||
numGetCalls++;
|
||||
return stringProperty;
|
||||
}
|
||||
|
||||
public void setStringProperty(String value) {
|
||||
numSetCalls++;
|
||||
stringProperty = value;
|
||||
}
|
||||
|
||||
public boolean isBooleanProperty() {
|
||||
numGetCalls++;
|
||||
return myBooleanProperty;
|
||||
}
|
||||
|
||||
public void setBooleanProperty(boolean value) {
|
||||
numSetCalls++;
|
||||
myBooleanProperty = value;
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
fun runScriptMethod(name: String, method: String): Any {
|
||||
val klass = Thread.currentThread().contextClassLoader.loadClass(name)
|
||||
val constructor = klass.constructors.single()
|
||||
val instance = constructor.newInstance(emptyArray<String>())
|
||||
val method = klass.getMethod(method)
|
||||
return method.invoke(instance)
|
||||
}
|
||||
|
||||
fun box(): String =
|
||||
runScriptMethod("Script", "f") as String
|
||||
|
||||
// FILE: script.kts
|
||||
|
||||
import kotlin.reflect.*
|
||||
import kotlin.test.*
|
||||
|
||||
fun f(): String {
|
||||
val j = J()
|
||||
|
||||
val unboundStringProperty = J::stringProperty
|
||||
assertNull(unboundStringProperty.get(j))
|
||||
unboundStringProperty.set(j, "Hi")
|
||||
assertEquals("Hi", unboundStringProperty.get(j))
|
||||
assertEquals("Hi", unboundStringProperty(j))
|
||||
|
||||
assertEquals(3, j.numGetCalls)
|
||||
assertEquals(1, j.numSetCalls)
|
||||
|
||||
val boundStringProperty = j::stringProperty
|
||||
assertEquals("Hi", boundStringProperty.get())
|
||||
boundStringProperty.set("Hello")
|
||||
assertEquals("Hello", boundStringProperty.get())
|
||||
assertEquals("Hello", boundStringProperty())
|
||||
|
||||
assertEquals(6, j.numGetCalls)
|
||||
assertEquals(2, j.numSetCalls)
|
||||
|
||||
val unboundBooleanProperty: KMutableProperty1<J, Boolean> = J::isBooleanProperty
|
||||
assertFalse(unboundBooleanProperty.get(j))
|
||||
unboundBooleanProperty.set(j, true)
|
||||
assertTrue(unboundBooleanProperty.get(j))
|
||||
assertTrue(unboundBooleanProperty(j))
|
||||
|
||||
assertEquals(9, j.numGetCalls)
|
||||
assertEquals(3, j.numSetCalls)
|
||||
|
||||
val boundBooleanProperty: KMutableProperty0<Boolean> = j::isBooleanProperty
|
||||
assertTrue(boundBooleanProperty.get())
|
||||
boundBooleanProperty.set(false)
|
||||
assertFalse(boundBooleanProperty.get())
|
||||
assertFalse(boundBooleanProperty())
|
||||
|
||||
assertEquals(12, j.numGetCalls)
|
||||
assertEquals(4, j.numSetCalls)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user