Add some tests on KProperty usage from delegate methods

This commit is contained in:
Alexander Udalov
2015-10-14 18:08:12 +03:00
parent 6a965c9a06
commit 63dfe13c43
4 changed files with 59 additions and 0 deletions
@@ -0,0 +1,14 @@
import kotlin.reflect.KProperty
class Delegate {
fun getValue(t: Any?, p: KProperty<*>): String {
p.parameters
p.returnType
p.annotations
return p.toString()
}
}
val prop: String by Delegate()
fun box() = if (prop == "val prop: kotlin.String") "OK" else "Fail: $prop"
@@ -0,0 +1,24 @@
// FULL_JDK
import kotlin.reflect.KProperty
import kotlin.reflect.KProperty0
import kotlin.test.assertFailsWith
class Delegate {
fun getValue(t: Any?, p: KProperty<*>): String {
return (p as KProperty0<String>).get()
}
}
val prop: String by Delegate()
fun box(): String {
assertFailsWith(
StackOverflowError::class.java,
"Getting the property value with .get() from getValue is effectively an endless recursion and should fail"
) {
prop
}
return "OK"
}
@@ -2971,6 +2971,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest(fileName);
}
@TestMetadata("useReflectionOnKProperty.kt")
public void testUseReflectionOnKProperty() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/delegatedProperty/useReflectionOnKProperty.kt");
doTest(fileName);
}
@TestMetadata("valInInnerClass.kt")
public void testValInInnerClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/delegatedProperty/valInInnerClass.kt");
@@ -1481,6 +1481,21 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
}
}
@TestMetadata("compiler/testData/codegen/boxWithStdlib/delegatedProperty")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class DelegatedProperty extends AbstractBlackBoxCodegenTest {
public void testAllFilesPresentInDelegatedProperty() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxWithStdlib/delegatedProperty"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("stackOverflowOnCallFromGetValue.kt")
public void testStackOverflowOnCallFromGetValue() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/delegatedProperty/stackOverflowOnCallFromGetValue.kt");
doTestWithStdlib(fileName);
}
}
@TestMetadata("compiler/testData/codegen/boxWithStdlib/enum")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)