Configure sdk properly in configure Kotlin tests

This commit is contained in:
Nikolay Krasko
2017-10-01 00:46:20 +03:00
parent 0f61a0f7bd
commit 2634ed15fa
3 changed files with 44 additions and 0 deletions
@@ -16,9 +16,13 @@
package org.jetbrains.kotlin.idea.test;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess;
import org.jetbrains.annotations.NotNull;
@@ -56,6 +60,17 @@ public class PluginTestCaseBase {
return getSdk("compiler/testData/mockJDK/jre", "Mock JDK");
}
@NotNull
public static Sdk mockJdk6() {
return getSdk("compiler/testData/mockJDK/jre", "1.6");
}
@NotNull
public static Sdk mockJdk8() {
// Using JDK 6, but with version 1.8
return getSdk("compiler/testData/mockJDK/jre", "1.8");
}
@TestOnly
@NotNull
public static Sdk mockJdk9() {
@@ -89,4 +104,14 @@ public class PluginTestCaseBase {
public static boolean isAllFilesPresentTest(@NotNull String testName) {
return StringUtil.startsWithIgnoreCase(testName, "allFilesPresentIn");
}
@TestOnly
public static void clearSdkTable(@NotNull Disposable disposable) {
Disposer.register(disposable, () -> ApplicationManager.getApplication().runWriteAction(() -> {
ProjectJdkTable jdkTable = ProjectJdkTable.getInstance();
for (Sdk sdk : jdkTable.getAllJdks()) {
jdkTable.removeJdk(sdk);
}
}));
}
}
@@ -20,6 +20,7 @@
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="KotlinJavaRuntime (2)" level="project" />
</component>
@@ -16,10 +16,14 @@
package org.jetbrains.kotlin.idea.configuration
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.PathMacros
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.ProjectRootManager
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.util.io.FileUtilRt
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess
@@ -27,6 +31,7 @@ import com.intellij.testFramework.PlatformTestCase
import com.intellij.testFramework.UsefulTestCase
import junit.framework.TestCase
import org.jetbrains.kotlin.idea.configuration.KotlinWithLibraryConfigurator.FileState
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.utils.PathUtil
import java.io.File
import java.io.IOException
@@ -63,6 +68,14 @@ abstract class AbstractConfigureKotlinTest : PlatformTestCase() {
override fun initApplication() {
super.initApplication()
ApplicationManager.getApplication().runWriteAction {
ProjectJdkTable.getInstance().addJdk(PluginTestCaseBase.mockJdk6())
ProjectJdkTable.getInstance().addJdk(PluginTestCaseBase.mockJdk8())
ProjectJdkTable.getInstance().addJdk(PluginTestCaseBase.mockJdk9())
}
PluginTestCaseBase.clearSdkTable(testRootDisposable)
val tempLibDir = FileUtil.createTempDirectory("temp", null)
PathMacros.getInstance().setMacro(TEMP_DIR_MACRO_KEY, FileUtilRt.toSystemDependentName(tempLibDir.absolutePath))
}
@@ -241,4 +254,9 @@ abstract class AbstractConfigureKotlinTest : PlatformTestCase() {
return tempPath + '/' + relativePath
}
}
override fun getTestProjectJdk(): Sdk {
val projectRootManager = ProjectRootManager.getInstance(project)
return projectRootManager.projectSdk ?: throw IllegalStateException("SDK ${projectRootManager.projectSdkName} was not found")
}
}