Fix default base classloader initialization for scripting hosts
also refactor runner functions #KT-37823 fixed
This commit is contained in:
+1
-1
@@ -30,7 +30,7 @@ val JvmScriptingHostConfigurationKeys.jdkHome by PropertiesCollection.key<File>(
|
|||||||
val JvmScriptingHostConfigurationKeys.baseClassLoader by PropertiesCollection.key<ClassLoader>(
|
val JvmScriptingHostConfigurationKeys.baseClassLoader by PropertiesCollection.key<ClassLoader>(
|
||||||
{
|
{
|
||||||
get(ScriptingHostConfiguration.configurationDependencies)?.let {
|
get(ScriptingHostConfiguration.configurationDependencies)?.let {
|
||||||
URLClassLoader(it.toClassPathOrEmpty().map { f -> f.toURI().toURL() }.toTypedArray())
|
URLClassLoader(it.toClassPathOrEmpty().map { f -> f.toURI().toURL() }.toTypedArray(), null)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
isTransient = true
|
isTransient = true
|
||||||
|
|||||||
+26
@@ -9,6 +9,7 @@ import junit.framework.Assert
|
|||||||
import org.jetbrains.kotlin.mainKts.COMPILED_SCRIPTS_CACHE_DIR_ENV_VAR
|
import org.jetbrains.kotlin.mainKts.COMPILED_SCRIPTS_CACHE_DIR_ENV_VAR
|
||||||
import org.jetbrains.kotlin.mainKts.COMPILED_SCRIPTS_CACHE_DIR_PROPERTY
|
import org.jetbrains.kotlin.mainKts.COMPILED_SCRIPTS_CACHE_DIR_PROPERTY
|
||||||
import org.jetbrains.kotlin.scripting.compiler.plugin.runWithK2JVMCompiler
|
import org.jetbrains.kotlin.scripting.compiler.plugin.runWithK2JVMCompiler
|
||||||
|
import org.jetbrains.kotlin.scripting.compiler.plugin.runWithKotlinLauncherScript
|
||||||
import org.jetbrains.kotlin.scripting.compiler.plugin.runWithKotlinc
|
import org.jetbrains.kotlin.scripting.compiler.plugin.runWithKotlinc
|
||||||
import org.junit.Ignore
|
import org.junit.Ignore
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
@@ -46,6 +47,19 @@ class MainKtsIT {
|
|||||||
fun testThreadContextClassLoader() {
|
fun testThreadContextClassLoader() {
|
||||||
runWithKotlincAndMainKts("$TEST_DATA_ROOT/context-classloader.main.kts", listOf("MainKtsConfigurator"))
|
runWithKotlincAndMainKts("$TEST_DATA_ROOT/context-classloader.main.kts", listOf("MainKtsConfigurator"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testCachedReflection() {
|
||||||
|
val cache = createTempDir("main.kts.test")
|
||||||
|
|
||||||
|
try {
|
||||||
|
runWithKotlinRunner("$TEST_DATA_ROOT/use-reflect.main.kts", listOf("false"), cacheDir = cache)
|
||||||
|
// second run uses the cached script
|
||||||
|
runWithKotlinRunner("$TEST_DATA_ROOT/use-reflect.main.kts", listOf("false"), cacheDir = cache)
|
||||||
|
} finally {
|
||||||
|
cache.deleteRecursively()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun runWithKotlincAndMainKts(
|
fun runWithKotlincAndMainKts(
|
||||||
@@ -65,6 +79,18 @@ fun runWithKotlincAndMainKts(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun runWithKotlinRunner(
|
||||||
|
scriptPath: String,
|
||||||
|
expectedOutPatterns: List<String> = emptyList(),
|
||||||
|
expectedExitCode: Int = 0,
|
||||||
|
cacheDir: File? = null
|
||||||
|
) {
|
||||||
|
runWithKotlinLauncherScript(
|
||||||
|
"kotlin", listOf(scriptPath), expectedOutPatterns, expectedExitCode,
|
||||||
|
additionalEnvVars = listOf(COMPILED_SCRIPTS_CACHE_DIR_ENV_VAR to (cacheDir?.absolutePath ?: ""))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
fun runWithK2JVMCompilerAndMainKts(
|
fun runWithK2JVMCompilerAndMainKts(
|
||||||
scriptPath: String,
|
scriptPath: String,
|
||||||
expectedOutPatterns: List<String> = emptyList(),
|
expectedOutPatterns: List<String> = emptyList(),
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
println(""::class.isOpen)
|
||||||
+28
-5
@@ -33,18 +33,17 @@ fun runWithKotlinc(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun runWithKotlinc(
|
fun runWithKotlinLauncherScript(
|
||||||
compilerArgs: Array<String>,
|
launcherScriptName: String,
|
||||||
|
compilerArgs: Iterable<String>,
|
||||||
expectedOutPatterns: List<String> = emptyList(),
|
expectedOutPatterns: List<String> = emptyList(),
|
||||||
expectedExitCode: Int = 0,
|
expectedExitCode: Int = 0,
|
||||||
workDirectory: File? = null,
|
workDirectory: File? = null,
|
||||||
classpath: List<File> = emptyList(),
|
classpath: List<File> = emptyList(),
|
||||||
additionalEnvVars: Iterable<Pair<String, String>>? = null
|
additionalEnvVars: Iterable<Pair<String, String>>? = null
|
||||||
) {
|
) {
|
||||||
val executableName = "kotlinc"
|
|
||||||
// TODO:
|
|
||||||
val executableFileName =
|
val executableFileName =
|
||||||
if (System.getProperty("os.name").contains("windows", ignoreCase = true)) "$executableName.bat" else executableName
|
if (System.getProperty("os.name").contains("windows", ignoreCase = true)) "$launcherScriptName.bat" else launcherScriptName
|
||||||
val launcherFile = File("dist/kotlinc/bin/$executableFileName")
|
val launcherFile = File("dist/kotlinc/bin/$executableFileName")
|
||||||
Assert.assertTrue("Launcher script not found, run dist task: ${launcherFile.absolutePath}", launcherFile.exists())
|
Assert.assertTrue("Launcher script not found, run dist task: ${launcherFile.absolutePath}", launcherFile.exists())
|
||||||
|
|
||||||
@@ -55,6 +54,30 @@ fun runWithKotlinc(
|
|||||||
}
|
}
|
||||||
addAll(compilerArgs)
|
addAll(compilerArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
runAndCheckResults(args, expectedOutPatterns, expectedExitCode, workDirectory, additionalEnvVars)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun runWithKotlinc(
|
||||||
|
compilerArgs: Array<String>,
|
||||||
|
expectedOutPatterns: List<String> = emptyList(),
|
||||||
|
expectedExitCode: Int = 0,
|
||||||
|
workDirectory: File? = null,
|
||||||
|
classpath: List<File> = emptyList(),
|
||||||
|
additionalEnvVars: Iterable<Pair<String, String>>? = null
|
||||||
|
) {
|
||||||
|
runWithKotlinLauncherScript(
|
||||||
|
"kotlinc", compilerArgs.asIterable(), expectedOutPatterns, expectedExitCode, workDirectory, classpath, additionalEnvVars
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun runAndCheckResults(
|
||||||
|
args: List<String>,
|
||||||
|
expectedOutPatterns: List<String> = emptyList(),
|
||||||
|
expectedExitCode: Int = 0,
|
||||||
|
workDirectory: File? = null,
|
||||||
|
additionalEnvVars: Iterable<Pair<String, String>>? = null
|
||||||
|
) {
|
||||||
val processBuilder = ProcessBuilder(args)
|
val processBuilder = ProcessBuilder(args)
|
||||||
if (workDirectory != null) {
|
if (workDirectory != null) {
|
||||||
processBuilder.directory(workDirectory)
|
processBuilder.directory(workDirectory)
|
||||||
|
|||||||
Reference in New Issue
Block a user