Initialize scripting in tests if script is passed as a source

This commit is contained in:
Ilya Chernikov
2019-02-04 14:52:36 +01:00
parent 89fc7eba95
commit 2b67dbe8dd
3 changed files with 40 additions and 3 deletions
@@ -15,8 +15,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime;
import org.jetbrains.kotlin.config.CompilerConfiguration;
import org.jetbrains.kotlin.config.JVMConfigurationKeys;
import org.jetbrains.kotlin.script.StandardScriptDefinition;
import org.jetbrains.kotlin.parsing.KotlinParserDefinition;
import org.jetbrains.kotlin.test.ConfigurationKind;
import org.jetbrains.kotlin.test.InTextDirectivesUtils;
import org.jetbrains.kotlin.test.KotlinTestUtils;
@@ -26,6 +25,8 @@ import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase;
import java.io.File;
import java.util.*;
import static org.jetbrains.kotlin.script.ScriptTestUtilKt.loadScriptingPlugin;
public abstract class KotlinMultiFileTestWithJava<M, F> extends KtUsefulTestCase {
protected File javaFilesDir;
private File kotlinSourceRoot;
@@ -61,6 +62,11 @@ public abstract class KotlinMultiFileTestWithJava<M, F> extends KtUsefulTestCase
}
}
@NotNull
protected Boolean isScriptingNeeded(@NotNull File file) {
return file.getName().endsWith(KotlinParserDefinition.STD_SCRIPT_EXT);
}
@NotNull
protected KotlinCoreEnvironment createEnvironment(@NotNull File file) {
CompilerConfiguration configuration = KotlinTestUtils.newConfiguration(
@@ -69,7 +75,9 @@ public abstract class KotlinMultiFileTestWithJava<M, F> extends KtUsefulTestCase
getClasspath(file),
isJavaSourceRootNeeded() ? Collections.singletonList(javaFilesDir) : Collections.emptyList()
);
configuration.add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, StandardScriptDefinition.INSTANCE);
if (isScriptingNeeded(file)) {
loadScriptingPlugin(configuration);
}
if (isKotlinSourceRootNeeded()) {
ContentRootsKt.addKotlinSourceRoot(configuration, kotlinSourceRoot.getPath());
}
@@ -0,0 +1,23 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. 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.script
import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.utils.PathUtil
import java.io.File
fun loadScriptingPlugin(configuration: CompilerConfiguration) {
val libPath = PathUtil.kotlinPathsForCompiler.libPath
val pluginClasspath = with (PathUtil) {
listOf(
KOTLIN_SCRIPTING_COMPILER_PLUGIN_JAR,
KOTLIN_SCRIPTING_COMMON_JAR,
KOTLIN_SCRIPTING_JVM_JAR
).map { File(libPath, it).path }
}
PluginCliParser.loadPluginsSafe(pluginClasspath, null, configuration)
}
@@ -18,7 +18,9 @@ import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace
import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
import org.jetbrains.kotlin.script.loadScriptingPlugin
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind
@@ -106,6 +108,10 @@ abstract class AbstractKotlinUastTest : AbstractUastTest() {
put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
put(CommonConfigurationKeys.MODULE_NAME, "test-module")
if (sourceFile.extension == KotlinParserDefinition.STD_SCRIPT_SUFFIX) {
loadScriptingPlugin(this)
}
}
}