Fix some issues in script constructor param/arg matching

This commit is contained in:
Alexander Udalov
2017-01-11 11:35:15 +03:00
parent 453c5267ad
commit 8f9ce5d0f2
2 changed files with 81 additions and 74 deletions
@@ -14,6 +14,8 @@
* limitations under the License.
*/
@file:Suppress("UNUSED_PARAMETER")
package org.jetbrains.kotlin.util
import org.jetbrains.kotlin.utils.tryCreateCallableMappingFromNamedArgs
@@ -23,7 +25,6 @@ import org.junit.Test
import kotlin.reflect.KParameter
class ArgsToParamsMatchingTest {
@Test
fun testMatchFromStrings() {
Assert.assertNull(tryCreateCallableMappingFromStringArgs(::foo, listOf()))
@@ -38,6 +39,13 @@ class ArgsToParamsMatchingTest {
assertParamMapsEquals(tryCreateCallableMappingFromStringArgs(::foo, listOf("1", "2", "s", "0.1", "abc", "true", "1", "2", "3")),
"i" to 1, "b" to 2.toByte(), "c" to 's', "d" to 0.1, "s" to "abc", "t" to true, "v" to arrayOf(1L, 2L, 3L))
Assert.assertNull(tryCreateCallableMappingFromStringArgs(::foo, listOf("i", "b", "c")))
Assert.assertNull(tryCreateCallableMappingFromStringArgs(::foo, listOf("1", "2", "s", "0.1", "abc", "true", "not-a-long")))
Assert.assertNull(tryCreateCallableMappingFromStringArgs(::charArray, listOf("")))
assertParamMapsEquals(tryCreateCallableMappingFromStringArgs(::varargStrings, listOf("a", "b", "c")),
"s" to arrayOf("a", "b", "c"))
}
@Test
@@ -59,6 +67,13 @@ class ArgsToParamsMatchingTest {
Assert.assertNull(tryCreateCallableMappingFromNamedArgs(::foo, listOf(null to 1, null to 2.toByte(), null to 's', "x" to 0.1))) // wrong name
Assert.assertNull(tryCreateCallableMappingFromNamedArgs(::foo, listOf(null to 1, null to 2.toByte(), "c" to 's', null to 0.1))) // unnamed after named
Assert.assertNull(tryCreateCallableMappingFromNamedArgs(::notNullNumber, listOf(null to null)))
assertParamMapsEquals(tryCreateCallableMappingFromNamedArgs(::nullableNumber, listOf(null to null)),
"n" to null)
assertParamMapsEquals(tryCreateCallableMappingFromNamedArgs(::notNullNumber, listOf(null to 42)),
"n" to 42)
Assert.assertNull(tryCreateCallableMappingFromNamedArgs(::notNullNumber, listOf(null to "42")))
}
}
@@ -83,5 +98,12 @@ private fun assertParamMapsEquals(actuals: Map<KParameter, Any?>?, vararg expect
}
}
@Suppress("UNUSED_PARAMETER")
private fun foo(i: Int, b: Byte, c: Char, d: Double = 0.0, s: String = "", t: Boolean = true, vararg v: Long) {}
private fun charArray(c: CharArray) {}
private fun varargStrings(vararg s: String) {}
private fun notNullNumber(n: Number) {}
private fun nullableNumber(n: Number?) {}