mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-04-11 08:31:32 +00:00
Support custom options in quick fix test framework
This commit is contained in:
@@ -21,7 +21,7 @@ import com.intellij.codeInsight.lookup.LookupElement
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import org.jetbrains.kotlin.idea.caches.project.LibraryModificationTracker
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.idea.test.configureLanguageVersion
|
||||
import org.jetbrains.kotlin.idea.test.configureCompilerOptions
|
||||
import org.jetbrains.kotlin.resolve.TargetPlatform
|
||||
import java.io.File
|
||||
|
||||
@@ -39,7 +39,7 @@ abstract class KotlinFixtureCompletionBaseTestCase : KotlinLightCodeInsightFixtu
|
||||
|
||||
try {
|
||||
val fileText = FileUtil.loadFile(File(testPath), true)
|
||||
configureLanguageVersion(fileText, project, module)
|
||||
configureCompilerOptions(fileText, project, module)
|
||||
|
||||
assertTrue("\"<caret>\" is missing in file \"$testPath\"", fileText.contains("<caret>"));
|
||||
|
||||
|
||||
@@ -28,7 +28,9 @@ import com.intellij.psi.search.ProjectScope
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import com.intellij.testFramework.LoggedErrorProcessor
|
||||
import org.apache.log4j.Logger
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
||||
import org.jetbrains.kotlin.config.*
|
||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
import org.jetbrains.kotlin.idea.actions.internal.KotlinInternalMode
|
||||
import org.jetbrains.kotlin.idea.facet.configureFacet
|
||||
@@ -180,14 +182,29 @@ abstract class KotlinLightCodeInsightFixtureTestCase : KotlinLightCodeInsightFix
|
||||
}
|
||||
}
|
||||
|
||||
fun configureLanguageVersion(fileText: String, project: Project, module: Module) {
|
||||
fun configureCompilerOptions(fileText: String, project: Project, module: Module) {
|
||||
val version = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// LANGUAGE_VERSION: ")
|
||||
if (version != null) {
|
||||
val jvmTarget = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// JVM_TARGET: ")
|
||||
val options = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// COMPILER_ARGUMENTS: ")
|
||||
if (version != null || jvmTarget != null || options != null) {
|
||||
val accessToken = WriteAction.start()
|
||||
try {
|
||||
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
||||
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false)
|
||||
facet.configureFacet(version, LanguageFeature.State.DISABLED, null, modelsProvider)
|
||||
|
||||
facet.configureFacet(
|
||||
version ?: LanguageVersion.LATEST_STABLE.versionString,
|
||||
LanguageFeature.State.DISABLED,
|
||||
if (jvmTarget != null) TargetPlatformKind.Jvm(JvmTarget.fromString(jvmTarget)!!) else null,
|
||||
modelsProvider
|
||||
)
|
||||
if (options != null) {
|
||||
val compilerSettings = facet.configuration.settings.compilerSettings ?: CompilerSettings().also {
|
||||
facet.configuration.settings.compilerSettings = it
|
||||
}
|
||||
compilerSettings.additionalArguments = options
|
||||
facet.configuration.settings.updateMergedArguments()
|
||||
}
|
||||
modelsProvider.commit()
|
||||
}
|
||||
finally {
|
||||
|
||||
@@ -26,7 +26,7 @@ import junit.framework.ComparisonFailure
|
||||
import junit.framework.TestCase
|
||||
import org.jetbrains.kotlin.idea.test.DirectiveBasedActionUtils
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.idea.test.configureLanguageVersion
|
||||
import org.jetbrains.kotlin.idea.test.configureCompilerOptions
|
||||
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
@@ -83,7 +83,7 @@ abstract class AbstractLocalInspectionTest : KotlinLightCodeInsightFixtureTestCa
|
||||
val fileText = FileUtil.loadFile(mainFile, true)
|
||||
TestCase.assertTrue("\"<caret>\" is missing in file \"$mainFile\"", fileText.contains("<caret>"))
|
||||
|
||||
configureLanguageVersion(fileText, project, module)
|
||||
configureCompilerOptions(fileText, project, module)
|
||||
|
||||
val minJavaVersion = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// MIN_JAVA_VERSION: ")
|
||||
if (minJavaVersion != null && !SystemInfo.isJavaVersionAtLeast(minJavaVersion)) return
|
||||
|
||||
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
import org.jetbrains.kotlin.idea.quickfix.utils.findInspectionFile
|
||||
import org.jetbrains.kotlin.idea.test.DirectiveBasedActionUtils
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.idea.test.configureCompilerOptions
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.test.testFramework.runWriteAction
|
||||
@@ -194,6 +195,7 @@ abstract class AbstractQuickFixMultiFileTest : KotlinLightCodeInsightFixtureTest
|
||||
private fun doTest(beforeFileName: String) {
|
||||
val mainFile = File(beforeFileName)
|
||||
val originalFileText = FileUtil.loadFile(mainFile, true)
|
||||
configureCompilerOptions(originalFileText, project, module)
|
||||
|
||||
val mainFileDir = mainFile.parentFile!!
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ abstract class AbstractQuickFixTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||
@Throws(Exception::class)
|
||||
protected fun doTest(beforeFileName: String) {
|
||||
val beforeFileText = FileUtil.loadFile(File(beforeFileName))
|
||||
configureLanguageVersion(beforeFileText, project, module)
|
||||
configureCompilerOptions(beforeFileText, project, module)
|
||||
|
||||
val inspections = parceInspectionsToEnable(beforeFileName, beforeFileText).toTypedArray()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user