55
66package org.jetbrains.kotlin.scripting.compiler.test
77
8+ import kotlinx.coroutines.runBlocking
89import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
910import org.jetbrains.kotlin.scripting.compiler.plugin.SCRIPT_TEST_BASE_COMPILER_ARGUMENTS_PROPERTY
1011import org.jetbrains.kotlin.scripting.compiler.plugin.impl.K2ReplCompiler
@@ -14,12 +15,18 @@ import java.io.File
1415import kotlin.reflect.full.declaredMemberFunctions
1516import kotlin.reflect.full.declaredMemberProperties
1617import kotlin.script.experimental.api.*
18+ import kotlin.script.experimental.dependencies.CompoundDependenciesResolver
19+ import kotlin.script.experimental.dependencies.FileSystemDependenciesResolver
20+ import kotlin.script.experimental.dependencies.maven.MavenDependenciesResolver
1721import kotlin.script.experimental.host.toScriptSource
1822import kotlin.script.experimental.impl.internalScriptingRunSuspend
1923import kotlin.script.experimental.jvm.KJvmEvaluatedSnippet
2024import kotlin.script.experimental.jvm.updateClasspath
2125import kotlin.script.experimental.util.LinkedSnippet
22- import kotlin.test.*
26+ import kotlin.test.Test
27+ import kotlin.test.assertEquals
28+ import kotlin.test.assertTrue
29+ import kotlin.test.fail
2330
2431class ReplReceiver1 {
2532 val ok = " OK"
@@ -28,6 +35,7 @@ class ReplReceiver1 {
2835@Suppress(" unused" ) // Used in snippets
2936class TestReplReceiver1 () { fun checkReceiver (block : ReplReceiver1 .() -> Any ) = block(ReplReceiver1 ()) }
3037
38+ private val dependenciesResolver = CompoundDependenciesResolver (FileSystemDependenciesResolver (), MavenDependenciesResolver ())
3139
3240class CustomK2ReplTest {
3341
@@ -118,6 +126,38 @@ class CustomK2ReplTest {
118126 )
119127 }
120128
129+ @Test
130+ fun testWithUpdatingDependeciesAndImportKotlinDeclarations () {
131+ evalAndCheckSnippetsResultVals(
132+ sequenceOf(
133+ " println(\" firstLine\" )" ,
134+ " import org.jetbrains.kotlinx.dataframe.jupyter.KotlinNotebookPluginUtils" ,
135+ " KotlinNotebookPluginUtils.getKotlinNotebookIDEBuildNumber().toString()" ,
136+ " import org.jetbrains.kotlinx.dataframe.jupyter.importDataSchema" ,
137+ " importDataSchema(\" ftp://xx\" ).url.toString()" ,
138+ ),
139+ sequenceOf(null , null , " null" , null , " ftp://xx" ),
140+ baseCompilationConfiguration.with {
141+ refineConfiguration {
142+ beforeCompiling { (script, config, _) ->
143+ if (! script.text.contains(" firstLine" )) {
144+ val resolveResults = runBlocking {
145+ dependenciesResolver.resolve(" org.jetbrains.kotlinx:dataframe-core:0.15.0" )
146+ }
147+ if (resolveResults is ResultWithDiagnostics .Failure )
148+ resolveResults
149+ else
150+ config.with {
151+ updateClasspath(resolveResults.valueOrThrow())
152+ defaultImports(" kotlin.random.Random" )
153+ }.asSuccess()
154+ } else config.asSuccess()
155+ }
156+ }
157+ }
158+ )
159+ }
160+
121161 @Test
122162 fun testBasicReflection () {
123163 evalAndCheckSnippets(
0 commit comments