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
+7
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
|
||||
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.services.EnvironmentConfigurator
|
||||
import org.jetbrains.kotlin.test.services.RuntimeClasspathProvider
|
||||
@@ -30,11 +31,17 @@ class ScriptWithCustomDefEnvironmentConfigurator(testServices: TestServices) : E
|
||||
configuration.addJvmClasspathRoots(testScriptDefinitionClasspath)
|
||||
val dirSplitRegex = Regex(" *, *")
|
||||
ScriptingTestDirectives.directivesToPassViaEnvironment.forEach { (directive, envName) ->
|
||||
if (directive is StringDirective) {
|
||||
module.directives[directive].flatMap { it.split(dirSplitRegex).filter { it.isNotEmpty() } }.let {
|
||||
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() {
|
||||
val SCRIPT_DEFAULT_IMPORTS by stringDirective("Default imports", multiLine = true)
|
||||
val SCRIPT_PROVIDED_PROPERTIES by stringDirective("Provided properties", multiLine = true)
|
||||
val GRADLE_LIKE_SCRIPT by directive("Provided properties")
|
||||
|
||||
val directivesToPassViaEnvironment =
|
||||
listOf(
|
||||
SCRIPT_DEFAULT_IMPORTS to "defaultImports",
|
||||
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 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.host.ScriptingHostConfiguration
|
||||
import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
|
||||
import kotlin.script.experimental.jvm.jvm
|
||||
|
||||
@Suppress("unused", "UNUSED_PARAMETER")
|
||||
@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")
|
||||
else
|
||||
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 {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
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