IDEA: don't try to create run configuration by JUnit and TestNG producers for Kotlin JS modules.

This commit is contained in:
Zalim Bashorov
2015-02-13 15:37:08 +03:00
parent 4704941488
commit 905ce426c7
5 changed files with 49 additions and 8 deletions
@@ -34,6 +34,7 @@ import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.asJava.LightClassUtil; import org.jetbrains.kotlin.asJava.LightClassUtil;
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil;
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil; import org.jetbrains.kotlin.idea.util.ProjectRootsUtil;
import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.psi.*;
@@ -65,6 +66,10 @@ public class JetJUnitConfigurationProducer extends RuntimeConfigurationProducer
JetFile jetFile = (JetFile) leaf.getContainingFile(); JetFile jetFile = (JetFile) leaf.getContainingFile();
if (ProjectStructureUtil.isJsKotlinModule(jetFile)) {
return null;
}
JetNamedFunction function = PsiTreeUtil.getParentOfType(leaf, JetNamedFunction.class, false); JetNamedFunction function = PsiTreeUtil.getParentOfType(leaf, JetNamedFunction.class, false);
if (function != null) { if (function != null) {
myElement = function; myElement = function;
@@ -33,6 +33,7 @@ import com.theoryinpractice.testng.configuration.TestNGConfigurationProducer;
import com.theoryinpractice.testng.util.TestNGUtil; import com.theoryinpractice.testng.util.TestNGUtil;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.asJava.LightClassUtil; import org.jetbrains.kotlin.asJava.LightClassUtil;
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil;
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil; import org.jetbrains.kotlin.idea.util.ProjectRootsUtil;
import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.psi.*;
@@ -62,6 +63,10 @@ public class JetTestNgConfigurationProducer extends TestNGConfigurationProducer
JetFile jetFile = (JetFile) leaf.getContainingFile(); JetFile jetFile = (JetFile) leaf.getContainingFile();
if (ProjectStructureUtil.isJsKotlinModule(jetFile)) {
return false;
}
JetNamedFunction function = PsiTreeUtil.getParentOfType(leaf, JetNamedFunction.class, false); JetNamedFunction function = PsiTreeUtil.getParentOfType(leaf, JetNamedFunction.class, false);
if (function != null) { if (function != null) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -0,0 +1,14 @@
package q
native
class Foo {
// RUN:
fun foo(s: Array<String>) = noImpl
}
// RUN:
native
fun main(s: Array<String>) {
println("Top-level")
}
@@ -47,8 +47,9 @@ import com.intellij.psi.PsiComment
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import org.jetbrains.kotlin.test.ConfigLibraryUtil import org.jetbrains.kotlin.test.ConfigLibraryUtil
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import com.intellij.openapi.projectRoots.Sdk
private val RUN_PREFIX = "// RUN: " private val RUN_PREFIX = "// RUN:"
class RunConfigurationTest: CodeInsightTestCase() { class RunConfigurationTest: CodeInsightTestCase() {
fun getTestProject() = myProject!! fun getTestProject() = myProject!!
@@ -87,11 +88,19 @@ class RunConfigurationTest: CodeInsightTestCase() {
} }
fun testClassesAndObjects() { fun testClassesAndObjects() {
doTest(ConfigLibraryUtil::configureKotlinRuntime)
}
fun testInJsModule() {
doTest(ConfigLibraryUtil::configureKotlinJsRuntime)
}
private fun doTest(configureRuntime: (Module, Sdk) -> Unit) {
val baseDir = getTestProject().getBaseDir()!! val baseDir = getTestProject().getBaseDir()!!
val createModuleResult = configureModule(moduleDirPath("module"), baseDir) val createModuleResult = configureModule(moduleDirPath("module"), baseDir)
val srcDir = createModuleResult.srcDir val srcDir = createModuleResult.srcDir
ConfigLibraryUtil.configureKotlinRuntime(createModuleResult.module, PluginTestCaseBase.fullJdk()) configureRuntime(createModuleResult.module, PluginTestCaseBase.fullJdk())
try { try {
val expectedClasses = ArrayList<String>() val expectedClasses = ArrayList<String>()
@@ -99,13 +108,14 @@ class RunConfigurationTest: CodeInsightTestCase() {
val testFile = PsiManager.getInstance(getTestProject()).findFile(srcDir.findFileByRelativePath("test.kt")) val testFile = PsiManager.getInstance(getTestProject()).findFile(srcDir.findFileByRelativePath("test.kt"))
testFile.accept( testFile.accept(
object: JetTreeVisitorVoid() { object : JetTreeVisitorVoid() {
override fun visitComment(comment: PsiComment) { override fun visitComment(comment: PsiComment) {
val declaration = comment.getStrictParentOfType<JetNamedDeclaration>()!! val declaration = comment.getStrictParentOfType<JetNamedDeclaration>()!!
val text = comment.getText() ?: return val text = comment.getText() ?: return
if (!text.startsWith(RUN_PREFIX)) return if (!text.startsWith(RUN_PREFIX)) return
expectedClasses.add(text.substring(RUN_PREFIX.length()).trim()) val expectedClass = text.substring(RUN_PREFIX.length()).trim()
if (expectedClass.isNotEmpty()) expectedClasses.add(expectedClass)
val dataContext = MapDataContext() val dataContext = MapDataContext()
dataContext.put(Location.DATA_KEY, PsiLocation(getTestProject(), declaration)) dataContext.put(Location.DATA_KEY, PsiLocation(getTestProject(), declaration))
@@ -26,27 +26,34 @@ import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEdito
import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Computable;
import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VfsUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime; import org.jetbrains.kotlin.utils.PathUtil;
import java.io.File;
/** /**
* Helper for configuring kotlin runtime in tested project. * Helper for configuring kotlin runtime in tested project.
*/ */
public class ConfigLibraryUtil { public class ConfigLibraryUtil {
private static final String DEFAULT_JAVA_RUNTIME_LIB_NAME = "JAVA_RUNTIME_LIB_NAME"; private static final String DEFAULT_JAVA_RUNTIME_LIB_NAME = "JAVA_RUNTIME_LIB_NAME";
private static final String DEFAULT_KOTLIN_JS_STDLIB_NAME = "KOTLIN_JS_STDLIB_NAME";
private ConfigLibraryUtil() { private ConfigLibraryUtil() {
} }
private static NewLibraryEditor getKotlinRuntimeLibEditor(String libName) { private static NewLibraryEditor getKotlinRuntimeLibEditor(String libName, File library) {
NewLibraryEditor editor = new NewLibraryEditor(); NewLibraryEditor editor = new NewLibraryEditor();
editor.setName(libName); editor.setName(libName);
editor.addRoot(VfsUtil.getUrlForLibraryRoot(ForTestCompileRuntime.runtimeJarForTests()), OrderRootType.CLASSES); editor.addRoot(VfsUtil.getUrlForLibraryRoot(library), OrderRootType.CLASSES);
return editor; return editor;
} }
public static void configureKotlinRuntime(Module module, Sdk sdk) { public static void configureKotlinRuntime(Module module, Sdk sdk) {
configureLibrary(module, sdk, getKotlinRuntimeLibEditor(DEFAULT_JAVA_RUNTIME_LIB_NAME)); configureLibrary(module, sdk, getKotlinRuntimeLibEditor(DEFAULT_JAVA_RUNTIME_LIB_NAME, PathUtil.getKotlinPathsForDistDirectory().getRuntimePath()));
}
public static void configureKotlinJsRuntime(Module module, Sdk sdk) {
configureLibrary(module, sdk, getKotlinRuntimeLibEditor(DEFAULT_KOTLIN_JS_STDLIB_NAME, PathUtil.getKotlinPathsForDistDirectory().getJsStdLibJarPath()));
} }
public static void unConfigureKotlinRuntime(Module module, Sdk sdk) { public static void unConfigureKotlinRuntime(Module module, Sdk sdk) {