Tests, Scripting: extend custom def test infra with gradle-like def
to be able to test gradle-like DSL
This commit is contained in:
committed by
Space Team
parent
988edab7a0
commit
60e38d592c
+10
-3
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
|
|||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
|
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
|
||||||
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
||||||
|
import org.jetbrains.kotlin.test.directives.model.StringDirective
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
|
||||||
import org.jetbrains.kotlin.test.services.RuntimeClasspathProvider
|
import org.jetbrains.kotlin.test.services.RuntimeClasspathProvider
|
||||||
@@ -30,9 +31,15 @@ class ScriptWithCustomDefEnvironmentConfigurator(testServices: TestServices) : E
|
|||||||
configuration.addJvmClasspathRoots(testScriptDefinitionClasspath)
|
configuration.addJvmClasspathRoots(testScriptDefinitionClasspath)
|
||||||
val dirSplitRegex = Regex(" *, *")
|
val dirSplitRegex = Regex(" *, *")
|
||||||
ScriptingTestDirectives.directivesToPassViaEnvironment.forEach { (directive, envName) ->
|
ScriptingTestDirectives.directivesToPassViaEnvironment.forEach { (directive, envName) ->
|
||||||
module.directives[directive].flatMap { it.split(dirSplitRegex).filter { it.isNotEmpty() } }.let {
|
if (directive is StringDirective) {
|
||||||
if (it.isNotEmpty()) {
|
module.directives[directive].flatMap { it.split(dirSplitRegex).filter { it.isNotEmpty() } }.let {
|
||||||
configuration.put(ScriptingConfigurationKeys.LEGACY_SCRIPT_RESOLVER_ENVIRONMENT_OPTION, envName, it)
|
if (it.isNotEmpty()) {
|
||||||
|
configuration.put(ScriptingConfigurationKeys.LEGACY_SCRIPT_RESOLVER_ENVIRONMENT_OPTION, envName, it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (directive in module.directives) {
|
||||||
|
configuration.put(ScriptingConfigurationKeys.LEGACY_SCRIPT_RESOLVER_ENVIRONMENT_OPTION, envName, "true")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -10,10 +10,12 @@ import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
|
|||||||
object ScriptingTestDirectives : SimpleDirectivesContainer() {
|
object ScriptingTestDirectives : SimpleDirectivesContainer() {
|
||||||
val SCRIPT_DEFAULT_IMPORTS by stringDirective("Default imports", multiLine = true)
|
val SCRIPT_DEFAULT_IMPORTS by stringDirective("Default imports", multiLine = true)
|
||||||
val SCRIPT_PROVIDED_PROPERTIES by stringDirective("Provided properties", multiLine = true)
|
val SCRIPT_PROVIDED_PROPERTIES by stringDirective("Provided properties", multiLine = true)
|
||||||
|
val GRADLE_LIKE_SCRIPT by directive("Provided properties")
|
||||||
|
|
||||||
val directivesToPassViaEnvironment =
|
val directivesToPassViaEnvironment =
|
||||||
listOf(
|
listOf(
|
||||||
SCRIPT_DEFAULT_IMPORTS to "defaultImports",
|
SCRIPT_DEFAULT_IMPORTS to "defaultImports",
|
||||||
SCRIPT_PROVIDED_PROPERTIES to "providedProperties",
|
SCRIPT_PROVIDED_PROPERTIES to "providedProperties",
|
||||||
|
GRADLE_LIKE_SCRIPT to "gradleLikeScript",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+13
@@ -7,8 +7,12 @@ package org.jetbrains.kotlin.scripting.test.definition
|
|||||||
|
|
||||||
import kotlin.script.experimental.annotations.KotlinScript
|
import kotlin.script.experimental.annotations.KotlinScript
|
||||||
import org.jetbrains.kotlin.scripting.definitions.getEnvironment
|
import org.jetbrains.kotlin.scripting.definitions.getEnvironment
|
||||||
|
import org.jetbrains.kotlin.scripting.test.definition.gradleLike.CompiledKotlinBuildScript
|
||||||
|
import org.jetbrains.kotlin.scripting.test.definition.gradleLike.Project
|
||||||
import kotlin.script.experimental.api.*
|
import kotlin.script.experimental.api.*
|
||||||
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
||||||
|
import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
|
||||||
|
import kotlin.script.experimental.jvm.jvm
|
||||||
|
|
||||||
@Suppress("unused", "UNUSED_PARAMETER")
|
@Suppress("unused", "UNUSED_PARAMETER")
|
||||||
@KotlinScript(fileExtension = "test.kts", compilationConfiguration = ConfigurableTestScriptConfiguration::class)
|
@KotlinScript(fileExtension = "test.kts", compilationConfiguration = ConfigurableTestScriptConfiguration::class)
|
||||||
@@ -23,6 +27,15 @@ class ConfigurableTestScriptConfiguration : ScriptCompilationConfiguration(
|
|||||||
if (env == null) makeFailureResult("Unable to retrieve environment for the custom test script")
|
if (env == null) makeFailureResult("Unable to retrieve environment for the custom test script")
|
||||||
else
|
else
|
||||||
ScriptCompilationConfiguration(ctx.compilationConfiguration) {
|
ScriptCompilationConfiguration(ctx.compilationConfiguration) {
|
||||||
|
env["gradleLikeScript"]?.let {
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
defaultImports("org.jetbrains.kotlin.scripting.test.definition.gradleLike.*")
|
||||||
|
jvm {
|
||||||
|
dependenciesFromCurrentContext(wholeClasspath = true)
|
||||||
|
}
|
||||||
|
baseClass(CompiledKotlinBuildScript::class)
|
||||||
|
implicitReceivers(Project::class)
|
||||||
|
}
|
||||||
env["defaultImports"]?.let {
|
env["defaultImports"]?.let {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
defaultImports.append(it as List<String>)
|
defaultImports.append(it as List<String>)
|
||||||
|
|||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.scripting.test.definition.gradleLike;
|
||||||
|
|
||||||
|
public interface PluginAware {
|
||||||
|
}
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.scripting.test.definition.gradleLike
|
||||||
|
|
||||||
|
open class DefaultKotlinScript {
|
||||||
|
fun memberApi1(body: (Int) -> Int = { it }): Int = body(42)
|
||||||
|
}
|
||||||
|
|
||||||
|
open class CompiledKotlinBuildScript : DefaultKotlinScript(), PluginAware
|
||||||
|
|
||||||
|
class Project : PluginAware
|
||||||
|
|
||||||
|
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.scripting.test.definition.gradleLike
|
||||||
|
|
||||||
|
@JvmOverloads
|
||||||
|
fun Project.projectApi(body: (Int) -> Int = { it }): Int = body(42)
|
||||||
|
|
||||||
|
fun staticApi(): Int = 42
|
||||||
Reference in New Issue
Block a user