UpdateConfigurationQuickFixTest: update tests

This commit is contained in:
Dmitry Gridin
2019-07-16 11:44:14 +03:00
parent cb432acfb7
commit 0d49ffa831
2 changed files with 65 additions and 16 deletions
@@ -14,11 +14,14 @@ import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEdito
import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.JarFileSystem import com.intellij.openapi.vfs.JarFileSystem
import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.testFramework.exceptionCases.AbstractExceptionCase
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments.Companion.DEFAULT
import org.jetbrains.kotlin.config.CompilerSettings.Companion.DEFAULT_ADDITIONAL_ARGUMENTS
import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder
import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCompilerSettings
import org.jetbrains.kotlin.idea.configuration.KotlinJavaModuleConfigurator import org.jetbrains.kotlin.idea.configuration.KotlinJavaModuleConfigurator
import org.jetbrains.kotlin.idea.facet.KotlinFacetType import org.jetbrains.kotlin.idea.facet.KotlinFacetType
import org.jetbrains.kotlin.idea.facet.getRuntimeLibraryVersion import org.jetbrains.kotlin.idea.facet.getRuntimeLibraryVersion
@@ -42,8 +45,23 @@ class UpdateConfigurationQuickFixTest : LightPlatformCodeInsightFixtureTestCase(
myFixture.configureByText("foo.kt", "inline class My(val n: Int)") myFixture.configureByText("foo.kt", "inline class My(val n: Int)")
assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, inlineClassesSupport) assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, inlineClassesSupport)
myFixture.launchAction(myFixture.findSingleIntention("Disable inline classes support in the project")) assertException(object : AbstractExceptionCase<AssertionError>() {
assertEquals(LanguageFeature.State.DISABLED, inlineClassesSupport) override fun getExpectedExceptionClass(): Class<AssertionError> = AssertionError::class.java
override fun tryClosure() {
myFixture.findSingleIntention("Disable inline classes support in the project")
}
})
}
fun testEnableInlineClasses() {
configureRuntime("mockRuntime11")
resetProjectSettings(LanguageVersion.KOTLIN_1_3)
myFixture.configureByText("foo.kt", "inline class My(val n: Int)")
assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, inlineClassesSupport)
myFixture.launchAction(myFixture.findSingleIntention("Enable inline classes support in the project"))
assertEquals(LanguageFeature.State.ENABLED, inlineClassesSupport)
} }
fun testEnableCoroutines() { fun testEnableCoroutines() {
@@ -51,7 +69,7 @@ class UpdateConfigurationQuickFixTest : LightPlatformCodeInsightFixtureTestCase(
resetProjectSettings(LanguageVersion.KOTLIN_1_1) resetProjectSettings(LanguageVersion.KOTLIN_1_1)
myFixture.configureByText("foo.kt", "suspend fun foo()") myFixture.configureByText("foo.kt", "suspend fun foo()")
assertEquals(CommonCompilerArguments.WARN, KotlinCommonCompilerArgumentsHolder.getInstance(project).settings.coroutinesState) assertEquals(DEFAULT, KotlinCommonCompilerArgumentsHolder.getInstance(project).settings.coroutinesState)
assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, coroutineSupport) assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, coroutineSupport)
myFixture.launchAction(myFixture.findSingleIntention("Enable coroutine support in the project")) myFixture.launchAction(myFixture.findSingleIntention("Enable coroutine support in the project"))
assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) assertEquals(LanguageFeature.State.ENABLED, coroutineSupport)
@@ -62,7 +80,7 @@ class UpdateConfigurationQuickFixTest : LightPlatformCodeInsightFixtureTestCase(
resetProjectSettings(LanguageVersion.KOTLIN_1_1) resetProjectSettings(LanguageVersion.KOTLIN_1_1)
myFixture.configureByText("foo.kt", "suspend fun foo()") myFixture.configureByText("foo.kt", "suspend fun foo()")
assertEquals(CommonCompilerArguments.WARN, KotlinCommonCompilerArgumentsHolder.getInstance(project).settings.coroutinesState) assertEquals(DEFAULT, KotlinCommonCompilerArgumentsHolder.getInstance(project).settings.coroutinesState)
assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, coroutineSupport) assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, coroutineSupport)
myFixture.launchAction(myFixture.findSingleIntention("Disable coroutine support in the project")) myFixture.launchAction(myFixture.findSingleIntention("Disable coroutine support in the project"))
assertEquals(LanguageFeature.State.ENABLED_WITH_ERROR, coroutineSupport) assertEquals(LanguageFeature.State.ENABLED_WITH_ERROR, coroutineSupport)
@@ -159,12 +177,14 @@ class UpdateConfigurationQuickFixTest : LightPlatformCodeInsightFixtureTestCase(
fun testAddKotlinReflect() { fun testAddKotlinReflect() {
configureRuntime("mockRuntime11") configureRuntime("mockRuntime11")
myFixture.configureByText("foo.kt", """class Foo(val prop: Any) { myFixture.configureByText(
"foo.kt", """class Foo(val prop: Any) {
fun func() {} fun func() {}
} }
fun y01() = Foo::prop.gett<caret>er fun y01() = Foo::prop.gett<caret>er
""") """
)
myFixture.launchAction(myFixture.findSingleIntention("Add kotlin-reflect.jar to the classpath")) myFixture.launchAction(myFixture.findSingleIntention("Add kotlin-reflect.jar to the classpath"))
val kotlinRuntime = KotlinJavaModuleConfigurator.instance.getKotlinLibrary(module)!! val kotlinRuntime = KotlinJavaModuleConfigurator.instance.getKotlinLibrary(module)!!
val classes = kotlinRuntime.getFiles(OrderRootType.CLASSES).map { it.name } val classes = kotlinRuntime.getFiles(OrderRootType.CLASSES).map { it.name }
@@ -190,10 +210,13 @@ class UpdateConfigurationQuickFixTest : LightPlatformCodeInsightFixtureTestCase(
} }
private fun resetProjectSettings(version: LanguageVersion) { private fun resetProjectSettings(version: LanguageVersion) {
KotlinCompilerSettings.getInstance(project).update {
additionalArguments = DEFAULT_ADDITIONAL_ARGUMENTS
}
KotlinCommonCompilerArgumentsHolder.getInstance(project).update { KotlinCommonCompilerArgumentsHolder.getInstance(project).update {
languageVersion = version.versionString languageVersion = version.versionString
apiVersion = version.versionString apiVersion = version.versionString
coroutinesState = CommonCompilerArguments.WARN coroutinesState = DEFAULT
} }
} }
@@ -204,6 +227,7 @@ class UpdateConfigurationQuickFixTest : LightPlatformCodeInsightFixtureTestCase(
get() = project.getLanguageVersionSettings().getFeatureSupport(LanguageFeature.InlineClasses) get() = project.getLanguageVersionSettings().getFeatureSupport(LanguageFeature.InlineClasses)
override fun tearDown() { override fun tearDown() {
resetProjectSettings(LanguageVersion.KOTLIN_1_3)
FacetManager.getInstance(module).getFacetByType(KotlinFacetType.TYPE_ID)?.let { FacetManager.getInstance(module).getFacetByType(KotlinFacetType.TYPE_ID)?.let {
FacetUtil.deleteFacet(it) FacetUtil.deleteFacet(it)
} }
@@ -7,17 +7,21 @@ package org.jetbrains.kotlin.idea.quickfix
import com.intellij.facet.FacetManager import com.intellij.facet.FacetManager
import com.intellij.facet.impl.FacetUtil import com.intellij.facet.impl.FacetUtil
import com.intellij.openapi.module.Module
import com.intellij.openapi.roots.ModuleRootModificationUtil.updateModel import com.intellij.openapi.roots.ModuleRootModificationUtil.updateModel
import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.roots.OrderRootType
import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor
import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.JarFileSystem import com.intellij.openapi.vfs.JarFileSystem
import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.testFramework.exceptionCases.AbstractExceptionCase
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments.Companion.DEFAULT
import org.jetbrains.kotlin.config.CompilerSettings.Companion.DEFAULT_ADDITIONAL_ARGUMENTS
import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder
import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCompilerSettings
import org.jetbrains.kotlin.idea.configuration.KotlinJavaModuleConfigurator import org.jetbrains.kotlin.idea.configuration.KotlinJavaModuleConfigurator
import org.jetbrains.kotlin.idea.facet.KotlinFacetType import org.jetbrains.kotlin.idea.facet.KotlinFacetType
import org.jetbrains.kotlin.idea.facet.getRuntimeLibraryVersion import org.jetbrains.kotlin.idea.facet.getRuntimeLibraryVersion
@@ -38,8 +42,23 @@ class UpdateConfigurationQuickFixTest : LightPlatformCodeInsightFixtureTestCase(
myFixture.configureByText("foo.kt", "inline class My(val n: Int)") myFixture.configureByText("foo.kt", "inline class My(val n: Int)")
assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, inlineClassesSupport) assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, inlineClassesSupport)
myFixture.launchAction(myFixture.findSingleIntention("Disable inline classes support in the project")) assertException(object : AbstractExceptionCase<AssertionError>() {
assertEquals(LanguageFeature.State.DISABLED, inlineClassesSupport) override fun getExpectedExceptionClass(): Class<AssertionError> = AssertionError::class.java
override fun tryClosure() {
myFixture.findSingleIntention("Disable inline classes support in the project")
}
})
}
fun testEnableInlineClasses() {
configureRuntime("mockRuntime11")
resetProjectSettings(LanguageVersion.KOTLIN_1_3)
myFixture.configureByText("foo.kt", "inline class My(val n: Int)")
assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, inlineClassesSupport)
myFixture.launchAction(myFixture.findSingleIntention("Enable inline classes support in the project"))
assertEquals(LanguageFeature.State.ENABLED, inlineClassesSupport)
} }
fun testEnableCoroutines() { fun testEnableCoroutines() {
@@ -47,7 +66,7 @@ class UpdateConfigurationQuickFixTest : LightPlatformCodeInsightFixtureTestCase(
resetProjectSettings(LanguageVersion.KOTLIN_1_1) resetProjectSettings(LanguageVersion.KOTLIN_1_1)
myFixture.configureByText("foo.kt", "suspend fun foo()") myFixture.configureByText("foo.kt", "suspend fun foo()")
assertEquals(CommonCompilerArguments.WARN, KotlinCommonCompilerArgumentsHolder.getInstance(project).settings.coroutinesState) assertEquals(DEFAULT, KotlinCommonCompilerArgumentsHolder.getInstance(project).settings.coroutinesState)
assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, coroutineSupport) assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, coroutineSupport)
myFixture.launchAction(myFixture.findSingleIntention("Enable coroutine support in the project")) myFixture.launchAction(myFixture.findSingleIntention("Enable coroutine support in the project"))
assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) assertEquals(LanguageFeature.State.ENABLED, coroutineSupport)
@@ -58,7 +77,7 @@ class UpdateConfigurationQuickFixTest : LightPlatformCodeInsightFixtureTestCase(
resetProjectSettings(LanguageVersion.KOTLIN_1_1) resetProjectSettings(LanguageVersion.KOTLIN_1_1)
myFixture.configureByText("foo.kt", "suspend fun foo()") myFixture.configureByText("foo.kt", "suspend fun foo()")
assertEquals(CommonCompilerArguments.WARN, KotlinCommonCompilerArgumentsHolder.getInstance(project).settings.coroutinesState) assertEquals(DEFAULT, KotlinCommonCompilerArgumentsHolder.getInstance(project).settings.coroutinesState)
assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, coroutineSupport) assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, coroutineSupport)
myFixture.launchAction(myFixture.findSingleIntention("Disable coroutine support in the project")) myFixture.launchAction(myFixture.findSingleIntention("Disable coroutine support in the project"))
assertEquals(LanguageFeature.State.ENABLED_WITH_ERROR, coroutineSupport) assertEquals(LanguageFeature.State.ENABLED_WITH_ERROR, coroutineSupport)
@@ -155,12 +174,14 @@ class UpdateConfigurationQuickFixTest : LightPlatformCodeInsightFixtureTestCase(
fun testAddKotlinReflect() { fun testAddKotlinReflect() {
configureRuntime("mockRuntime11") configureRuntime("mockRuntime11")
myFixture.configureByText("foo.kt", """class Foo(val prop: Any) { myFixture.configureByText(
"foo.kt", """class Foo(val prop: Any) {
fun func() {} fun func() {}
} }
fun y01() = Foo::prop.gett<caret>er fun y01() = Foo::prop.gett<caret>er
""") """
)
myFixture.launchAction(myFixture.findSingleIntention("Add kotlin-reflect.jar to the classpath")) myFixture.launchAction(myFixture.findSingleIntention("Add kotlin-reflect.jar to the classpath"))
val kotlinRuntime = KotlinJavaModuleConfigurator.instance.getKotlinLibrary(module)!! val kotlinRuntime = KotlinJavaModuleConfigurator.instance.getKotlinLibrary(module)!!
val classes = kotlinRuntime.getFiles(OrderRootType.CLASSES).map { it.name } val classes = kotlinRuntime.getFiles(OrderRootType.CLASSES).map { it.name }
@@ -186,10 +207,13 @@ class UpdateConfigurationQuickFixTest : LightPlatformCodeInsightFixtureTestCase(
} }
private fun resetProjectSettings(version: LanguageVersion) { private fun resetProjectSettings(version: LanguageVersion) {
KotlinCompilerSettings.getInstance(project).update {
additionalArguments = DEFAULT_ADDITIONAL_ARGUMENTS
}
KotlinCommonCompilerArgumentsHolder.getInstance(project).update { KotlinCommonCompilerArgumentsHolder.getInstance(project).update {
languageVersion = version.versionString languageVersion = version.versionString
apiVersion = version.versionString apiVersion = version.versionString
coroutinesState = CommonCompilerArguments.WARN coroutinesState = DEFAULT
} }
} }
@@ -200,6 +224,7 @@ class UpdateConfigurationQuickFixTest : LightPlatformCodeInsightFixtureTestCase(
get() = project.getLanguageVersionSettings().getFeatureSupport(LanguageFeature.InlineClasses) get() = project.getLanguageVersionSettings().getFeatureSupport(LanguageFeature.InlineClasses)
override fun tearDown() { override fun tearDown() {
resetProjectSettings(LanguageVersion.KOTLIN_1_3)
FacetManager.getInstance(module).getFacetByType(KotlinFacetType.TYPE_ID)?.let { FacetManager.getInstance(module).getFacetByType(KotlinFacetType.TYPE_ID)?.let {
FacetUtil.deleteFacet(it) FacetUtil.deleteFacet(it)
} }