Scripting builders (does not work yet)
This commit is contained in:
parent
128f747558
commit
c06244465c
@ -8,12 +8,20 @@ kotlin {
|
|||||||
val commonMain by getting {
|
val commonMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
api(project(":dataforge-workspace"))
|
api(project(":dataforge-workspace"))
|
||||||
implementation("org.jetbrains.kotlin:kotlin-scripting-common")
|
implementation(kotlin("scripting-common"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val jvmMain by getting {
|
val jvmMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("org.jetbrains.kotlin:kotlin-scripting-jvm-host")
|
implementation(kotlin("scripting-jvm-host-embeddable"))
|
||||||
|
implementation(kotlin("scripting-jvm"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val jvmTest by getting {
|
||||||
|
dependencies {
|
||||||
|
implementation(kotlin("test"))
|
||||||
|
implementation(kotlin("test-junit"))
|
||||||
|
implementation("ch.qos.logback:logback-classic:1.2.3")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,41 @@
|
|||||||
package hep.dataforge.scripting
|
package hep.dataforge.scripting
|
||||||
|
|
||||||
|
import hep.dataforge.context.Global
|
||||||
|
import hep.dataforge.workspace.Workspace
|
||||||
|
import hep.dataforge.workspace.WorkspaceBuilder
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import kotlin.script.experimental.api.*
|
||||||
|
import kotlin.script.experimental.host.toScriptSource
|
||||||
|
import kotlin.script.experimental.jvm.dependenciesFromCurrentContext
|
||||||
|
import kotlin.script.experimental.jvm.jvm
|
||||||
|
import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost
|
||||||
|
|
||||||
fun buildWorkspace(file: File) {
|
object Builders {
|
||||||
|
|
||||||
|
fun buildWorkspace(source: SourceCode): Workspace {
|
||||||
|
val builder = WorkspaceBuilder(Global)
|
||||||
|
|
||||||
|
val workspaceScriptConfiguration = ScriptCompilationConfiguration {
|
||||||
|
baseClass(Any::class)
|
||||||
|
implicitReceivers(WorkspaceBuilder::class)
|
||||||
|
jvm{
|
||||||
|
dependenciesFromCurrentContext()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val evaluationConfiguration = ScriptEvaluationConfiguration {
|
||||||
|
implicitReceivers(builder)
|
||||||
|
}
|
||||||
|
|
||||||
|
val res = BasicJvmScriptingHost().eval(source, workspaceScriptConfiguration, evaluationConfiguration)
|
||||||
|
res.reports.forEach{ scriptDiagnostic ->
|
||||||
|
scriptDiagnostic.exception?.let { throw it }
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.build()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun buildWorkspace(file: File): Workspace = buildWorkspace(file.toScriptSource())
|
||||||
|
|
||||||
|
fun buildWorkspace(string: String): Workspace = buildWorkspace(string.toScriptSource())
|
||||||
}
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package hep.dataforge.scripting
|
||||||
|
|
||||||
|
import hep.dataforge.meta.get
|
||||||
|
import hep.dataforge.meta.int
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
|
||||||
|
class BuildersKtTest {
|
||||||
|
@Test
|
||||||
|
fun testWorkspaceBuilder() {
|
||||||
|
val script = """
|
||||||
|
println("I am working")
|
||||||
|
|
||||||
|
context{
|
||||||
|
name = "test"
|
||||||
|
}
|
||||||
|
|
||||||
|
target("testTarget"){
|
||||||
|
"a" to 12
|
||||||
|
}
|
||||||
|
""".trimIndent()
|
||||||
|
val workspace = Builders.buildWorkspace(script)
|
||||||
|
|
||||||
|
val target = workspace.targets.getValue("testTarget")
|
||||||
|
assertEquals(12, target["a"]!!.int)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user