summaryrefslogtreecommitdiff
path: root/plugins/kotlin/gradle/gradle-tooling/testSrc/org/jetbrains/kotlin/idea/gradleTooling/CallReflectiveTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/kotlin/gradle/gradle-tooling/testSrc/org/jetbrains/kotlin/idea/gradleTooling/CallReflectiveTest.kt')
-rw-r--r--plugins/kotlin/gradle/gradle-tooling/testSrc/org/jetbrains/kotlin/idea/gradleTooling/CallReflectiveTest.kt93
1 files changed, 93 insertions, 0 deletions
diff --git a/plugins/kotlin/gradle/gradle-tooling/testSrc/org/jetbrains/kotlin/idea/gradleTooling/CallReflectiveTest.kt b/plugins/kotlin/gradle/gradle-tooling/testSrc/org/jetbrains/kotlin/idea/gradleTooling/CallReflectiveTest.kt
new file mode 100644
index 000000000000..80e1ff07be69
--- /dev/null
+++ b/plugins/kotlin/gradle/gradle-tooling/testSrc/org/jetbrains/kotlin/idea/gradleTooling/CallReflectiveTest.kt
@@ -0,0 +1,93 @@
+// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+@file:Suppress("unused")
+
+package org.jetbrains.kotlin.idea.gradleTooling
+
+import org.jetbrains.kotlin.idea.gradleTooling.reflect.*
+import org.junit.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertNull
+import kotlin.test.assertTrue
+
+// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+class CallReflectiveTest {
+
+ class TestLogger : ReflectionLogger {
+ val messages = mutableListOf<String>()
+ val exceptions = mutableListOf<Throwable?>()
+
+ override fun logIssue(message: String, exception: Throwable?) {
+ messages.add(message)
+ exceptions.add(exception)
+ }
+ }
+
+ private val logger = TestLogger()
+
+ @Test
+ fun `call get property`() {
+ class Tested(val myProperty: String)
+
+ val instance = Tested("abc")
+ assertEquals("abc", instance.callReflectiveGetter("getMyProperty", logger))
+ }
+
+ @Test
+ fun `call get missing property`() {
+ class Tested(val myProperty: String)
+
+ val instance = Tested("abc")
+ assertNull(instance.callReflectiveGetter("getWrongPropertyName", logger))
+ assertEquals(1, logger.messages.size)
+ }
+
+ @Test
+ fun `call property with wrong return type`() {
+ class Tested(val myProperty: String)
+
+ val instance = Tested("abc")
+ assertNull(instance.callReflective("getMyProperty", parameters(), returnType<Int>(), logger))
+ assertEquals(1, logger.messages.size, "Expected single issue being reported")
+ val message = logger.messages.single()
+ assertTrue("String" in message, "Expected logged message to mention 'String'")
+ assertTrue("Int" in message, "Expected logged message to mention 'Int'")
+ }
+
+ @Test
+ fun `call function`() {
+ class Tested {
+ fun addTwo(value: Int) = value + 2
+ fun minus(first: Int, second: Int) = first - second
+ }
+
+ val instance = Tested()
+ assertEquals(4, instance.callReflective("addTwo", parameters(parameter(2)), returnType<Int>(), logger))
+ assertEquals(0, logger.messages.size)
+
+ assertEquals(3, instance.callReflective("minus", parameters(parameter(6), parameter(3)), returnType<Int>(), logger))
+ assertEquals(0, logger.messages.size)
+ }
+
+ @Test
+ fun `call function with null value (int) parameter`() {
+ class Tested {
+ fun orZero(value: Int?): Int = value ?: 0
+ }
+
+ val instance = Tested()
+ assertEquals(0, instance.callReflective("orZero", parameters(parameter<Int?>(null)), returnType<Int>(), logger))
+ assertEquals(0, logger.messages.size)
+ }
+
+ @Test
+ fun `call function with null value (string) parameter`() {
+ class Tested {
+ fun orEmpty(value: String?) = value ?: ""
+ }
+
+ val instance = Tested()
+ assertEquals("", instance.callReflective("orEmpty", parameters(parameter<String?>(null)), returnType<String>(), logger))
+ assertEquals(0, logger.messages.size)
+ }
+}
+