Move scripting support classes to the scripting compiler impl module

This commit is contained in:
Ilya Chernikov
2019-02-26 15:38:01 +01:00
parent 8df829a7cd
commit a65dafc37d
95 changed files with 502 additions and 436 deletions
@@ -26,10 +26,10 @@ import org.jetbrains.kotlin.cli.common.repl.*
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.integration.KotlinIntegrationTestBase
import org.jetbrains.kotlin.script.KotlinScriptDefinition
import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromAnnotatedTemplate
import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
import org.jetbrains.kotlin.scripting.repl.GenericReplCompiler
import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.script.util.scriptCompilationClasspathFromContextOrStlib
import org.jetbrains.kotlin.scripting.compiler.plugin.configureScriptDefinitions
import org.jetbrains.kotlin.scripting.configuration.configureScriptDefinitions
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.InTextDirectivesUtils
import org.jetbrains.kotlin.test.TestJdkKind
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.script.util.scriptCompilationClasspathFromContextOrStlib
import org.jetbrains.kotlin.scripting.compiler.plugin.configureScriptDefinitions
import org.jetbrains.kotlin.scripting.configuration.configureScriptDefinitions
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.TestJdkKind
import org.jetbrains.kotlin.utils.PathUtil
@@ -24,8 +24,9 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromAnnotatedTemplate
import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate
import org.jetbrains.kotlin.scripts.TestKotlinScriptDependenciesResolver
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
@@ -36,8 +37,10 @@ import kotlin.script.templates.ScriptTemplateDefinition
class ScriptGenTest : CodegenTestCase() {
companion object {
private val FIB_SCRIPT_DEFINITION = KotlinScriptDefinitionFromAnnotatedTemplate(ScriptWithIntParam::class)
private val NO_PARAM_SCRIPT_DEFINITION = KotlinScriptDefinitionFromAnnotatedTemplate(Any::class)
private val FIB_SCRIPT_DEFINITION =
KotlinScriptDefinitionFromAnnotatedTemplate(ScriptWithIntParam::class)
private val NO_PARAM_SCRIPT_DEFINITION =
KotlinScriptDefinitionFromAnnotatedTemplate(Any::class)
}
override fun setUp() {
@@ -118,8 +121,8 @@ class ScriptGenTest : CodegenTestCase() {
private fun setUpEnvironment(sourcePaths: List<String>) {
val configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.ALL, TestJdkKind.FULL_JDK).apply {
put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, PrintingMessageCollector(System.err, MessageRenderer.PLAIN_FULL_PATHS, false))
add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, FIB_SCRIPT_DEFINITION)
add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, NO_PARAM_SCRIPT_DEFINITION)
add(ScriptingConfigurationKeys.SCRIPT_DEFINITIONS, FIB_SCRIPT_DEFINITION)
add(ScriptingConfigurationKeys.SCRIPT_DEFINITIONS, NO_PARAM_SCRIPT_DEFINITION)
put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true)
addKotlinSourceRoots(sourcePaths.map { "${KotlinTestUtils.getTestDataPathBase()}/codegen/$it" })
@@ -10,9 +10,9 @@ import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.script.KotlinScriptDefinition
import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinitionAdapterFromNewAPI
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
@@ -66,7 +66,7 @@ class CollectScriptCompilationDependenciesTest : KtUsefulTestCase() {
),
hostConfiguration
)
add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, scriptDefinition)
add(ScriptingConfigurationKeys.SCRIPT_DEFINITIONS, scriptDefinition)
addKotlinSourceRoot(File(testDataPath, scriptFile).path)
@@ -12,10 +12,10 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.daemon.TestMessageCollector
import org.jetbrains.kotlin.script.KotlinScriptDefinition
import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinitionAdapterFromNewAPI
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
@@ -82,7 +82,7 @@ class ScriptCliCompilationTest : KtUsefulTestCase() {
),
hostConfiguration
)
add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, scriptDefinition)
add(ScriptingConfigurationKeys.SCRIPT_DEFINITIONS, scriptDefinition)
}
loadScriptingPlugin(this)
}
@@ -1,83 +0,0 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.scripts
import org.jetbrains.kotlin.script.KotlinScriptDefinition
import org.jetbrains.kotlin.script.ScriptDefinitionsSource
import org.jetbrains.kotlin.scripting.legacy.CliScriptDefinitionProvider
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase
import org.junit.Assert
import org.junit.Test
import java.util.concurrent.atomic.AtomicInteger
import kotlin.script.templates.standard.ScriptTemplateWithArgs
class ScriptProviderTest : KtUsefulTestCase() {
@Test
fun testLazyScriptDefinitionsProvider() {
val genDefCounter = AtomicInteger()
val standardDef = FakeScriptDefinition()
val shadedDef = FakeScriptDefinition(".x.kts")
val provider = TestCliScriptDefinitionProvider(standardDef).apply {
setScriptDefinitions(listOf(shadedDef, standardDef))
setScriptDefinitionsSources(listOf(TestScriptDefinitionSource(genDefCounter, ".y.kts", ".x.kts")))
}
Assert.assertEquals(0, genDefCounter.get())
provider.isScript("a.kt").let {
Assert.assertFalse(it)
Assert.assertEquals(0, genDefCounter.get())
}
provider.isScript("a.y.kts").let {
Assert.assertTrue(it)
Assert.assertEquals(1, genDefCounter.get())
}
provider.isScript("a.x.kts").let {
Assert.assertTrue(it)
Assert.assertEquals(1, genDefCounter.get())
Assert.assertEquals(1, shadedDef.matchCounter.get())
}
provider.isScript("a.z.kts").let {
Assert.assertTrue(it)
Assert.assertEquals(2, genDefCounter.get())
Assert.assertEquals(1, standardDef.matchCounter.get())
}
provider.isScript("a.ktx").let {
Assert.assertFalse(it)
Assert.assertEquals(2, genDefCounter.get())
}
}
}
private open class FakeScriptDefinition(val suffix: String = ".kts") : KotlinScriptDefinition(ScriptTemplateWithArgs::class) {
val matchCounter = AtomicInteger()
override fun isScript(fileName: String): Boolean = fileName.endsWith(suffix).also {
if (it) matchCounter.incrementAndGet()
}
}
private class TestScriptDefinitionSource(val counter: AtomicInteger, val defGens: Iterable<() -> FakeScriptDefinition>) :
ScriptDefinitionsSource
{
constructor(counter: AtomicInteger, vararg suffixes: String) : this(counter, suffixes.map { { FakeScriptDefinition(it) } })
override val definitions: Sequence<KotlinScriptDefinition> = sequence {
for (gen in defGens) {
counter.incrementAndGet()
yield(gen())
}
}
}
private class TestCliScriptDefinitionProvider(private val standardDef: KotlinScriptDefinition) : CliScriptDefinitionProvider() {
override fun getDefaultScriptDefinition(): KotlinScriptDefinition = standardDef
}
@@ -27,12 +27,17 @@ import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.daemon.TestMessageCollector
import org.jetbrains.kotlin.daemon.assertHasMessage
import org.jetbrains.kotlin.daemon.toFile
import org.jetbrains.kotlin.script.*
import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
import org.jetbrains.kotlin.scripting.resolve.InvalidScriptResolverAnnotation
import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase
import org.jetbrains.kotlin.utils.PathUtil
import org.jetbrains.kotlin.utils.tryConstructClassFromStringArgs
import org.junit.Assert
import java.io.File
import java.io.OutputStream
@@ -43,9 +48,6 @@ import java.net.URLClassLoader
import java.util.concurrent.Future
import kotlin.reflect.KClass
import kotlin.script.dependencies.*
import kotlin.script.dependencies.KotlinScriptExternalDependencies
import kotlin.script.dependencies.ScriptContents
import kotlin.script.dependencies.ScriptDependenciesResolver
import kotlin.script.experimental.dependencies.*
import kotlin.script.experimental.dependencies.DependenciesResolver.ResolveResult
import kotlin.script.templates.AcceptedAnnotations
@@ -230,7 +232,7 @@ class ScriptTemplateTest : KtUsefulTestCase() {
val aClass = compileScript("fib.kts", ScriptWithIntParam::class, messageCollector = messageCollector)
Assert.assertNotNull("Compilation failed:\n$messageCollector", aClass)
captureOut {
val anObj = tryConstructClassFromStringArgs(aClass!!, listOf("4"))
val anObj = tryConstructClassFromStringArgs(aClass!!, listOf("4"))
Assert.assertNotNull(anObj)
}.let {
assertEqualsTrimmed(NUM_4_LINE + FIB_SCRIPT_OUTPUT_TAIL, it)
@@ -324,16 +326,17 @@ class ScriptTemplateTest : KtUsefulTestCase() {
messageCollector: MessageCollector = PrintingMessageCollector(System.err, MessageRenderer.PLAIN_FULL_PATHS, false),
includeKotlinRuntime: Boolean = true
): Class<*>? =
compileScriptImpl("compiler/testData/script/" + scriptPath, KotlinScriptDefinitionFromAnnotatedTemplate(
scriptTemplate, environment
), runIsolated, messageCollector, includeKotlinRuntime)
compileScriptImpl("compiler/testData/script/" + scriptPath,
KotlinScriptDefinitionFromAnnotatedTemplate(
scriptTemplate, environment
), runIsolated, messageCollector, includeKotlinRuntime)
private fun compileScriptImpl(
scriptPath: String,
scriptDefinition: KotlinScriptDefinition,
runIsolated: Boolean,
messageCollector: MessageCollector,
includeKotlinRuntime: Boolean
scriptPath: String,
scriptDefinition: KotlinScriptDefinition,
runIsolated: Boolean,
messageCollector: MessageCollector,
includeKotlinRuntime: Boolean
): Class<*>? {
val rootDisposable = Disposer.newDisposable()
try {
@@ -345,7 +348,7 @@ class ScriptTemplateTest : KtUsefulTestCase() {
*additionalClasspath)
configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
configuration.addKotlinSourceRoot(scriptPath)
configuration.add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, scriptDefinition)
configuration.add(ScriptingConfigurationKeys.SCRIPT_DEFINITIONS, scriptDefinition)
configuration.put(JVMConfigurationKeys.DISABLE_STANDARD_SCRIPT_DEFINITION, true)
configuration.put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true)
@@ -25,14 +25,15 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler
import org.jetbrains.kotlin.codegen.CompilationException
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.script.KotlinScriptDefinition
import org.jetbrains.kotlin.script.StandardScriptDefinition
import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.script.tryConstructClassFromStringArgs
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
import org.jetbrains.kotlin.scripting.definitions.StandardScriptDefinition
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase
import org.jetbrains.kotlin.utils.tryConstructClassFromStringArgs
import org.junit.Assert
import java.io.File
import java.net.URLClassLoader
@@ -86,11 +87,11 @@ class ScriptTest : KtUsefulTestCase() {
}
private fun compileScript(
scriptPath: String,
scriptDefinition: KotlinScriptDefinition,
runIsolated: Boolean = true,
suppressOutput: Boolean = false,
saveClassesDir: File? = null
scriptPath: String,
scriptDefinition: KotlinScriptDefinition,
runIsolated: Boolean = true,
suppressOutput: Boolean = false,
saveClassesDir: File? = null
): Class<*>? {
val messageCollector =
if (suppressOutput) MessageCollector.NONE
@@ -101,7 +102,7 @@ class ScriptTest : KtUsefulTestCase() {
val configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.ALL, TestJdkKind.FULL_JDK)
configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
configuration.addKotlinSourceRoot("compiler/testData/script/$scriptPath")
configuration.add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, scriptDefinition)
configuration.add(ScriptingConfigurationKeys.SCRIPT_DEFINITIONS, scriptDefinition)
configuration.put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true)
if (saveClassesDir != null) {
configuration.put(JVMConfigurationKeys.OUTPUT_DIRECTORY, saveClassesDir)
@@ -18,8 +18,8 @@
package org.jetbrains.kotlin.util
import org.jetbrains.kotlin.script.tryCreateCallableMappingFromNamedArgs
import org.jetbrains.kotlin.script.tryCreateCallableMappingFromStringArgs
import org.jetbrains.kotlin.utils.tryCreateCallableMappingFromNamedArgs
import org.jetbrains.kotlin.utils.tryCreateCallableMappingFromStringArgs
import org.junit.Assert
import org.junit.Test
import kotlin.reflect.KParameter
@@ -30,22 +30,41 @@ class ArgsToParamsMatchingTest {
Assert.assertNull(tryCreateCallableMappingFromStringArgs(::foo, listOf()))
Assert.assertNull(tryCreateCallableMappingFromStringArgs(::foo, listOf("1", "2")))
assertParamMapsEquals(tryCreateCallableMappingFromStringArgs(::foo, listOf("1", "2", "s", "0.1")),
"i" to 1, "b" to 2.toByte(), "c" to 's', "d" to 0.1)
assertParamMapsEquals(
tryCreateCallableMappingFromStringArgs(::foo, listOf("1", "2", "s", "0.1")),
"i" to 1, "b" to 2.toByte(), "c" to 's', "d" to 0.1)
Assert.assertNull(tryCreateCallableMappingFromStringArgs(::foo, listOf("1", "258", "s", "0.1")))
Assert.assertNull(tryCreateCallableMappingFromStringArgs(::foo, listOf("1", "258", "s", "0")))
Assert.assertNull(tryCreateCallableMappingFromStringArgs(::foo, listOf("1", "258", "sss", "0.1")))
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))
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(
::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"))
assertParamMapsEquals(
tryCreateCallableMappingFromStringArgs(::varargStrings, listOf("a", "b", "c")),
"s" to arrayOf("a", "b", "c"))
}
@Test
@@ -53,30 +72,75 @@ class ArgsToParamsMatchingTest {
Assert.assertNull(tryCreateCallableMappingFromNamedArgs(::foo, listOf()))
Assert.assertNull(tryCreateCallableMappingFromNamedArgs(::foo, listOf(null to 1, null to 2)))
assertParamMapsEquals(tryCreateCallableMappingFromNamedArgs(::foo, listOf(null to 1, null to 2.toByte(), null to 's', null to 0.1)),
"i" to 1, "b" to 2.toByte(), "c" to 's', "d" to 0.1)
assertParamMapsEquals(
tryCreateCallableMappingFromNamedArgs(
::foo,
listOf(null to 1, null to 2.toByte(), null to 's', null to 0.1)
),
"i" to 1, "b" to 2.toByte(), "c" to 's', "d" to 0.1)
assertParamMapsEquals(tryCreateCallableMappingFromNamedArgs(::foo, listOf(null to 1, null to 2.toByte(), "c" to 's', "d" to 0.1)),
"i" to 1, "b" to 2.toByte(), "c" to 's', "d" to 0.1)
assertParamMapsEquals(
tryCreateCallableMappingFromNamedArgs(
::foo,
listOf(null to 1, null to 2.toByte(), "c" to 's', "d" to 0.1)
),
"i" to 1, "b" to 2.toByte(), "c" to 's', "d" to 0.1)
assertParamMapsEquals(tryCreateCallableMappingFromNamedArgs(::foo, listOf(null to 1, null to 2.toByte(), "d" to 0.1, "c" to 's')),
"i" to 1, "b" to 2.toByte(), "c" to 's', "d" to 0.1)
assertParamMapsEquals(
tryCreateCallableMappingFromNamedArgs(
::foo,
listOf(null to 1, null to 2.toByte(), "d" to 0.1, "c" to 's')
),
"i" to 1, "b" to 2.toByte(), "c" to 's', "d" to 0.1)
assertParamMapsEquals(tryCreateCallableMappingFromNamedArgs(::foo, listOf(null to 1, null to 2.toByte(), null to 's', null to 0.1, "v" to arrayOf(1L, 2L, 3L))),
"i" to 1, "b" to 2.toByte(), "c" to 's', "d" to 0.1, "v" to arrayOf(1L, 2L, 3L))
assertParamMapsEquals(
tryCreateCallableMappingFromNamedArgs(
::foo,
listOf(
null to 1,
null to 2.toByte(),
null to 's',
null to 0.1,
"v" to arrayOf(1L, 2L, 3L)
)
),
"i" to 1, "b" to 2.toByte(), "c" to 's', "d" to 0.1, "v" to arrayOf(1L, 2L, 3L))
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(
::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)
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")))
assertParamMapsEquals(tryCreateCallableMappingFromNamedArgs(::varargStrings, listOf("a", "b", "c").map { null to it }),
"s" to arrayOf("a", "b", "c"))
assertParamMapsEquals(
tryCreateCallableMappingFromNamedArgs(::varargStrings, listOf("a", "b", "c").map { null to it }),
"s" to arrayOf("a", "b", "c"))
}
}