From 16b5b95556635a144d8faf931bdf188e12690dc6 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 10 Jul 2015 16:27:11 +0300 Subject: [PATCH] Test equals/hashCode/toString for function references --- .../methodsFromAny/functionEqualsHashCode.kt | 31 +++++++++++++++++++ .../methodsFromAny/functionToString.kt | 24 ++++++++++++++ ...sHashCode.kt => propertyEqualsHashCode.kt} | 0 ...lackBoxWithStdlibCodegenTestGenerated.java | 24 ++++++++++---- .../jvm/internal/ReflectionObjectRenderer.kt | 1 - 5 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/functionEqualsHashCode.kt create mode 100644 compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/functionToString.kt rename compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/{equalsHashCode.kt => propertyEqualsHashCode.kt} (100%) diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/functionEqualsHashCode.kt b/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/functionEqualsHashCode.kt new file mode 100644 index 00000000000..bc313072f2e --- /dev/null +++ b/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/functionEqualsHashCode.kt @@ -0,0 +1,31 @@ +import kotlin.test.* + +fun top() = 42 + +fun Int.intExt(): Int = this + +class A { + fun mem() {} +} + +class B { + fun mem() {} +} + + +fun checkEqual(x: Any, y: Any) { + assertEquals(x, y) + assertEquals(x.hashCode(), y.hashCode(), "Elements are equal but their hash codes are not: ${x.hashCode()} != ${y.hashCode()}") +} + +fun box(): String { + checkEqual(::top, ::top) + checkEqual(Int::intExt, Int::intExt) + checkEqual(A::mem, A::mem) + + assertFalse(::top == Int::intExt) + assertFalse(::top == A::mem) + assertFalse(A::mem == B::mem) + + return "OK" +} diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/functionToString.kt b/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/functionToString.kt new file mode 100644 index 00000000000..c0d912c985b --- /dev/null +++ b/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/functionToString.kt @@ -0,0 +1,24 @@ +package test + +import kotlin.test.assertEquals + +fun top() = 42 + +fun String.ext(): Int = 0 +fun IntRange?.ext2(): Array = arrayOfNulls(0) + +class A { + fun mem(): String = "" +} + +fun assertToString(s: String, x: Any) { + assertEquals(s, x.toString()) +} + +fun box(): String { + assertToString("fun top(): kotlin.Int", ::top) + assertToString("fun kotlin.String.ext(): kotlin.Int", String::ext) + assertToString("fun kotlin.IntRange?.ext2(): kotlin.Array", IntRange::ext2) + assertToString("fun test.A.mem(): kotlin.String", A::mem) + return "OK" +} diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/equalsHashCode.kt b/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/propertyEqualsHashCode.kt similarity index 100% rename from compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/equalsHashCode.kt rename to compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/propertyEqualsHashCode.kt diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java index 455bd514b20..cc474679aff 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -3123,18 +3123,24 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode doTestWithStdlib(fileName); } - @TestMetadata("equalsHashCode.kt") - public void testEqualsHashCode() throws Exception { - String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/equalsHashCode.kt"); - doTestWithStdlib(fileName); - } - @TestMetadata("extensionPropertyReceiverToString.kt") public void testExtensionPropertyReceiverToString() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/extensionPropertyReceiverToString.kt"); doTestWithStdlib(fileName); } + @TestMetadata("functionEqualsHashCode.kt") + public void testFunctionEqualsHashCode() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/functionEqualsHashCode.kt"); + doTestWithStdlib(fileName); + } + + @TestMetadata("functionToString.kt") + public void testFunctionToString() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/functionToString.kt"); + doTestWithStdlib(fileName); + } + @TestMetadata("memberExtensionToString.kt") public void testMemberExtensionToString() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/memberExtensionToString.kt"); @@ -3153,6 +3159,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode doTestWithStdlib(fileName); } + @TestMetadata("propertyEqualsHashCode.kt") + public void testPropertyEqualsHashCode() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/propertyEqualsHashCode.kt"); + doTestWithStdlib(fileName); + } + @TestMetadata("propertyToString.kt") public void testPropertyToString() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/propertyToString.kt"); diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/ReflectionObjectRenderer.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/ReflectionObjectRenderer.kt index ad55d9aa085..ea104dfeb8d 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/ReflectionObjectRenderer.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/ReflectionObjectRenderer.kt @@ -55,7 +55,6 @@ object ReflectionObjectRenderer { } fun renderFunction(descriptor: FunctionDescriptor): String { - // TODO: add tests return StringBuilder { append("fun ") appendReceiversAndName(descriptor)