diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinInTempDirTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinInTempDirTest.kt index 14a6cdbc5503..efe7d36594cb 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinInTempDirTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinInTempDirTest.kt @@ -5,14 +5,39 @@ package org.jetbrains.kotlin.idea.configuration +import com.intellij.openapi.Disposable +import com.intellij.openapi.util.Ref +import com.intellij.util.ThrowableRunnable import org.jetbrains.kotlin.idea.artifacts.KotlinArtifacts - +import org.jetbrains.kotlin.idea.test.runAll +import org.jetbrains.kotlin.test.KotlinRoot +import org.jetbrains.kotlin.test.KotlinTestUtils +import java.io.File import java.nio.file.Files import java.nio.file.Path abstract class AbstractConfigureKotlinInTempDirTest : AbstractConfigureKotlinTest() { + private lateinit var vfsDisposable: Ref + + override fun createProjectRoot(): File = KotlinTestUtils.tmpDirForReusableFolder("configure") + + override fun setUp() { + super.setUp() + vfsDisposable = KotlinTestUtils.allowRootAccess(this, projectRoot.path) + } + + override fun tearDown() { + runAll( + ThrowableRunnable { KotlinTestUtils.disposeVfsRootAccess(vfsDisposable) }, + ThrowableRunnable { super.tearDown() } + ) + } + override fun getProjectDirOrFile(isDirectoryBasedProject: Boolean): Path { - val projectRoot = super.getProjectDirOrFile(isDirectoryBasedProject) + val originalDir = KotlinRoot.DIR.resolve("idea/testData/configuration").resolve(projectName) + originalDir.copyRecursively(projectRoot) + val projectFile = projectRoot.resolve("projectFile.ipr") + val projectRoot = (if (projectFile.exists()) projectFile else projectRoot).toPath() val kotlinRuntime = projectRoot.resolve("lib/kotlin-stdlib.jar") if (getTestName(true).toLowerCase().contains("latestruntime") && Files.exists(kotlinRuntime)) { diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinTestBase.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinTestBase.kt index b254f2c926c8..ca03aec1b7f0 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinTestBase.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/AbstractConfigureKotlinTestBase.kt @@ -1,28 +1,19 @@ package org.jetbrains.kotlin.idea.configuration -import com.intellij.openapi.Disposable import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.module.Module import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.project.Project -import com.intellij.openapi.util.Ref import com.intellij.testFramework.HeavyPlatformTestCase import com.intellij.testFramework.IdeaTestUtil -import com.intellij.util.ThrowableRunnable import org.jetbrains.kotlin.idea.framework.KotlinSdkType import org.jetbrains.kotlin.idea.test.PluginTestCaseBase.addJdk -import org.jetbrains.kotlin.idea.test.runAll import org.jetbrains.kotlin.test.KotlinRoot -import org.jetbrains.kotlin.test.KotlinTestUtils -import org.jetbrains.kotlin.test.KotlinTestUtils.disposeVfsRootAccess import java.io.File import java.nio.file.Path abstract class AbstractConfigureKotlinTestBase : HeavyPlatformTestCase() { protected lateinit var projectRoot: File - private set - - private lateinit var vfsDisposable: Ref protected val jvmConfigurator: KotlinJavaModuleConfigurator by lazy { object : KotlinJavaModuleConfigurator() { @@ -39,21 +30,15 @@ abstract class AbstractConfigureKotlinTestBase : HeavyPlatformTestCase() { protected val modules: Array get() = ModuleManager.getInstance(myProject).modules - private val projectName: String + protected val projectName: String get() = getTestName(true).substringBefore("_") override fun setUp() { - projectRoot = KotlinTestUtils.tmpDirForReusableFolder("configure") - vfsDisposable = KotlinTestUtils.allowRootAccess(this, projectRoot.path) + projectRoot = createProjectRoot() super.setUp() } - override fun tearDown() { - runAll( - ThrowableRunnable { disposeVfsRootAccess(vfsDisposable) }, - ThrowableRunnable { super.tearDown() } - ) - } + open fun createProjectRoot(): File = KotlinRoot.DIR.resolve("idea/testData/configuration").resolve(projectName) override fun initApplication() { super.initApplication() @@ -68,16 +53,13 @@ abstract class AbstractConfigureKotlinTestBase : HeavyPlatformTestCase() { } override fun getProjectDirOrFile(isDirectoryBasedProject: Boolean): Path { - val originalDir = KotlinRoot.DIR.resolve("idea/testData/configuration").resolve(projectName) - originalDir.copyRecursively(projectRoot) - val projectFile = projectRoot.resolve("projectFile.ipr") return (if (projectFile.exists()) projectFile else projectRoot).toPath() } override fun setUpModule() { val modules = ModuleManager.getInstance(project).modules - myModule = modules.singleOrNull() ?: error("Single module expected, got $modules") + myModule = modules.first() } protected fun getOppositeConfigurator(configurator: KotlinWithLibraryConfigurator): KotlinWithLibraryConfigurator { diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt index 5f1cc0b7b4a0..7d85bb13c015 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt @@ -7,10 +7,13 @@ package org.jetbrains.kotlin.idea.configuration import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.impl.ApplicationImpl +import com.intellij.openapi.util.io.FileUtil +import com.intellij.testFramework.UsefulTestCase import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.config.VersionView +import org.jetbrains.kotlin.idea.artifacts.KotlinArtifactNames import org.jetbrains.kotlin.idea.compiler.configuration.Kotlin2JsCompilerArgumentsHolder import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings @@ -18,6 +21,7 @@ import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.junit.Assert import org.junit.internal.runners.JUnit38ClassRunner import org.junit.runner.RunWith +import java.io.File @RunWith(JUnit38ClassRunner::class) open class ConfigureKotlinInTempDirTest : AbstractConfigureKotlinInTempDirTest() { @@ -30,6 +34,29 @@ open class ConfigureKotlinInTempDirTest : AbstractConfigureKotlinInTempDirTest() Assert.assertTrue(project.baseDir.findFileByRelativePath(".idea/kotlinc.xml") == null) } + fun testTwoModulesWithNonDefaultPath_doNotCopyInDefault() { + doTestConfigureModulesWithNonDefaultSetup(jvmConfigurator) + assertEmpty(getCanBeConfiguredModules(myProject, jsConfigurator)) + } + + fun testTwoModulesWithJSNonDefaultPath_doNotCopyInDefault() { + doTestConfigureModulesWithNonDefaultSetup(jsConfigurator) + assertEmpty(getCanBeConfiguredModules(myProject, jvmConfigurator)) + } + + fun testLibraryNonDefault_libExistInDefault() { + val module = module + + // Move fake runtime jar to default library path to pretend library is already configured + FileUtil.copy( + File(project.basePath + "/lib/" + KotlinArtifactNames.KOTLIN_STDLIB), + File(jvmConfigurator.getDefaultPathToJarFile(project) + "/" + KotlinArtifactNames.KOTLIN_STDLIB) + ) + assertNotConfigured(module, jvmConfigurator) + jvmConfigurator.configure(myProject, emptyList()) + assertProperlyConfigured(module, jvmConfigurator) + } + fun testNoKotlincExistsNoSettingsLatestRuntime() { val application = ApplicationManager.getApplication() as ApplicationImpl application.isSaveAllowed = true @@ -104,7 +131,6 @@ open class ConfigureKotlinInTempDirTest : AbstractConfigureKotlinInTempDirTest() Assert.assertEquals(moduleFileContentBefore, moduleFileContentAfter) } - fun testLoadAndSaveOldNativePlatformOldNativeFacet() = doTestLoadAndSaveProjectWithFacetConfig( "platform=\"Native \"", "platform=\"Native (general) \" allPlatforms=\"Native []/Native [general]\"" diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java index f00bcb183c80..dad67c886b70 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java @@ -16,7 +16,6 @@ import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.RootPolicy; import com.intellij.openapi.roots.impl.libraries.LibraryEx; import com.intellij.openapi.roots.libraries.Library; -import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiJavaModule; import com.intellij.psi.PsiRequiresStatement; @@ -40,11 +39,10 @@ import org.jetbrains.kotlin.platform.TargetPlatform; import org.jetbrains.kotlin.platform.js.JsPlatforms; import org.jetbrains.kotlin.platform.jvm.JvmPlatforms; import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleKt; +import org.jetbrains.kotlin.utils.PathUtil; import org.junit.internal.runners.JUnit38ClassRunner; import org.junit.runner.RunWith; -import java.io.File; -import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.stream.StreamSupport; @@ -60,11 +58,21 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { ModuleRootManager.getInstance(getModule()).orderEntries().forEachLibrary(library -> { assertSameElements( Arrays.stream(library.getRootProvider().getFiles(OrderRootType.CLASSES)).map(VirtualFile::getName).toArray(), - KotlinArtifactNames.KOTLIN_STDLIB, KotlinArtifactNames.KOTLIN_REFLECT, KotlinArtifactNames.KOTLIN_TEST); + KotlinArtifactNames.KOTLIN_STDLIB, + KotlinArtifactNames.KOTLIN_REFLECT, + KotlinArtifactNames.KOTLIN_TEST, + KotlinArtifactNames.KOTLIN_STDLIB_JDK7, + KotlinArtifactNames.KOTLIN_STDLIB_JDK8 + ); assertSameElements( Arrays.stream(library.getRootProvider().getFiles(OrderRootType.SOURCES)).map(VirtualFile::getName).toArray(), - KotlinArtifactNames.KOTLIN_STDLIB, KotlinArtifactNames.KOTLIN_REFLECT, KotlinArtifactNames.KOTLIN_TEST); + KotlinArtifactNames.KOTLIN_STDLIB_SOURCES, + PathUtil.KOTLIN_TEST_SRC_JAR, + PathUtil.KOTLIN_REFLECT_SRC_JAR, + KotlinArtifactNames.KOTLIN_STDLIB_JDK7_SOURCES, + KotlinArtifactNames.KOTLIN_STDLIB_JDK8_SOURCES + ); return true; }); @@ -96,8 +104,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { if (module.getName().equals("module1")) { configure(module, KotlinWithLibraryConfigurator.FileState.DO_NOT_COPY, getJvmConfigurator()); assertConfigured(module, getJvmConfigurator()); - } - else if (module.getName().equals("module2")) { + } else if (module.getName().equals("module2")) { assertNotConfigured(module, getJvmConfigurator()); configure(module, KotlinWithLibraryConfigurator.FileState.EXISTS, getJvmConfigurator()); assertConfigured(module, getJvmConfigurator()); @@ -105,29 +112,6 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { } } - public void testLibraryNonDefault_libExistInDefault() throws IOException { - Module module = getModule(); - - // Move fake runtime jar to default library path to pretend library is already configured - FileUtil.copy( - new File(getProject().getBasePath() + "/lib/" + KotlinArtifactNames.KOTLIN_STDLIB), - new File(getJvmConfigurator().getDefaultPathToJarFile(getProject()) + "/" + KotlinArtifactNames.KOTLIN_STDLIB)); - - assertNotConfigured(module, getJvmConfigurator()); - getJvmConfigurator().configure(myProject, emptyList()); - assertProperlyConfigured(module, getJvmConfigurator()); - } - - public void testTwoModulesWithNonDefaultPath_doNotCopyInDefault() { - doTestConfigureModulesWithNonDefaultSetup(getJvmConfigurator()); - assertEmpty(ConfigureKotlinInProjectUtilsKt.getCanBeConfiguredModules(myProject, getJsConfigurator())); - } - - public void testTwoModulesWithJSNonDefaultPath_doNotCopyInDefault() { - doTestConfigureModulesWithNonDefaultSetup(getJsConfigurator()); - assertEmpty(ConfigureKotlinInProjectUtilsKt.getCanBeConfiguredModules(myProject, getJvmConfigurator())); - } - public void testNewLibrary_jarExists_js() { doTestSingleJsModule(KotlinWithLibraryConfigurator.FileState.EXISTS); } @@ -212,7 +196,8 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { assertEquals("1.0", arguments.getApiVersion()); assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, CoroutineSupport.byCompilerArguments(arguments)); assertEquals("1.7", arguments.getJvmTarget()); - assertEquals("-version -Xallow-kotlin-package -Xskip-metadata-version-check", settings.getCompilerSettings().getAdditionalArguments()); + assertEquals("-version -Xallow-kotlin-package -Xskip-metadata-version-check", + settings.getCompilerSettings().getAdditionalArguments()); } public void testJsProjectWithV1FacetConfig() { @@ -240,7 +225,8 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { assertEquals("1.0", arguments.getApiVersion()); assertEquals(LanguageFeature.State.ENABLED, CoroutineSupport.byCompilerArguments(arguments)); assertEquals("1.7", arguments.getJvmTarget()); - assertEquals("-version -Xallow-kotlin-package -Xskip-metadata-version-check", settings.getCompilerSettings().getAdditionalArguments()); + assertEquals("-version -Xallow-kotlin-package -Xskip-metadata-version-check", + settings.getCompilerSettings().getAdditionalArguments()); } public void testJsProjectWithV2FacetConfig() { @@ -268,7 +254,8 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { assertEquals("1.0", arguments.getApiVersion()); assertEquals(LanguageFeature.State.ENABLED, CoroutineSupport.byCompilerArguments(arguments)); assertEquals("1.7", arguments.getJvmTarget()); - assertEquals("-version -Xallow-kotlin-package -Xskip-metadata-version-check", settings.getCompilerSettings().getAdditionalArguments()); + assertEquals("-version -Xallow-kotlin-package -Xskip-metadata-version-check", + settings.getCompilerSettings().getAdditionalArguments()); } public void testJvmProjectWithJvmTarget11() { @@ -286,7 +273,8 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { assert module2 != null; assertEquals(emptyList(), KotlinFacet.Companion.get(module1).getConfiguration().getSettings().getImplementedModuleNames()); - assertEquals(singletonList("module1"), KotlinFacet.Companion.get(module2).getConfiguration().getSettings().getImplementedModuleNames()); + assertEquals(singletonList("module1"), + KotlinFacet.Companion.get(module2).getConfiguration().getSettings().getImplementedModuleNames()); } public void testJava9WithModuleInfo() { @@ -298,7 +286,8 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { } public void testProjectWithFreeArgs() { - assertEquals(singletonList("true"), KotlinCommonCompilerArgumentsHolder.Companion.getInstance(myProject).getSettings().getFreeArgs()); + assertEquals(singletonList("true"), + KotlinCommonCompilerArgumentsHolder.Companion.getInstance(myProject).getSettings().getFreeArgs()); } public void testProjectWithInternalArgs() { @@ -347,8 +336,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { assertEquals(platform, facet.getConfiguration().getSettings().getTargetPlatform()); assertEquals(jvmTarget.getDescription(), ((K2JVMCompilerArguments) facet.getConfiguration().getSettings().getCompilerArguments()).getJvmTarget()); - } - finally { + } finally { modelsProvider.dispose(); } } diff --git a/plugins/kotlin/idea/tests/testData/configuration/libraryNonDefault/projectFile.ipr b/plugins/kotlin/idea/tests/testData/configuration/libraryNonDefault/projectFile.ipr index 5696c089bbe9..a1f0f16a7568 100644 --- a/plugins/kotlin/idea/tests/testData/configuration/libraryNonDefault/projectFile.ipr +++ b/plugins/kotlin/idea/tests/testData/configuration/libraryNonDefault/projectFile.ipr @@ -5,15 +5,15 @@ - + - + - + diff --git a/plugins/kotlin/idea/tests/testData/configuration/mavenProvidedTestJsKind/module.iml b/plugins/kotlin/idea/tests/testData/configuration/mavenProvidedTestJsKind/module.iml index 8df57cb44ceb..27640a1ec0f5 100644 --- a/plugins/kotlin/idea/tests/testData/configuration/mavenProvidedTestJsKind/module.iml +++ b/plugins/kotlin/idea/tests/testData/configuration/mavenProvidedTestJsKind/module.iml @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/configuration/newLibrary/projectFile.ipr b/plugins/kotlin/idea/tests/testData/configuration/newLibrary/projectFile.ipr index f31a10aa0422..13ee60ef4a27 100644 --- a/plugins/kotlin/idea/tests/testData/configuration/newLibrary/projectFile.ipr +++ b/plugins/kotlin/idea/tests/testData/configuration/newLibrary/projectFile.ipr @@ -5,6 +5,6 @@ - + diff --git a/plugins/kotlin/idea/tests/testData/configuration/twoModules/module1.iml b/plugins/kotlin/idea/tests/testData/configuration/twoModules/module1.iml index 0c6965c378ce..5383975ec6e2 100644 --- a/plugins/kotlin/idea/tests/testData/configuration/twoModules/module1.iml +++ b/plugins/kotlin/idea/tests/testData/configuration/twoModules/module1.iml @@ -1,5 +1,5 @@ - + diff --git a/plugins/kotlin/idea/tests/testData/configuration/twoModules/module2.iml b/plugins/kotlin/idea/tests/testData/configuration/twoModules/module2.iml index 0c6965c378ce..5383975ec6e2 100644 --- a/plugins/kotlin/idea/tests/testData/configuration/twoModules/module2.iml +++ b/plugins/kotlin/idea/tests/testData/configuration/twoModules/module2.iml @@ -1,5 +1,5 @@ - + diff --git a/plugins/kotlin/idea/tests/testData/configuration/twoModules/projectFile.ipr b/plugins/kotlin/idea/tests/testData/configuration/twoModules/projectFile.ipr index 7a8b42e3b566..813eb35dc5bb 100644 --- a/plugins/kotlin/idea/tests/testData/configuration/twoModules/projectFile.ipr +++ b/plugins/kotlin/idea/tests/testData/configuration/twoModules/projectFile.ipr @@ -6,6 +6,6 @@ - + diff --git a/plugins/kotlin/idea/tests/testData/configuration/twoModulesWithJSNonDefaultPath/projectFile.ipr b/plugins/kotlin/idea/tests/testData/configuration/twoModulesWithJSNonDefaultPath/projectFile.ipr index 5985892cc93f..61771a7d9dd3 100644 --- a/plugins/kotlin/idea/tests/testData/configuration/twoModulesWithJSNonDefaultPath/projectFile.ipr +++ b/plugins/kotlin/idea/tests/testData/configuration/twoModulesWithJSNonDefaultPath/projectFile.ipr @@ -10,11 +10,11 @@ - + - + diff --git a/plugins/kotlin/idea/tests/testData/configuration/twoModulesWithNonDefaultPath/projectFile.ipr b/plugins/kotlin/idea/tests/testData/configuration/twoModulesWithNonDefaultPath/projectFile.ipr index f360e80a49ab..f682719438d9 100644 --- a/plugins/kotlin/idea/tests/testData/configuration/twoModulesWithNonDefaultPath/projectFile.ipr +++ b/plugins/kotlin/idea/tests/testData/configuration/twoModulesWithNonDefaultPath/projectFile.ipr @@ -10,11 +10,11 @@ - + - +