Use test path relative to testDataPath in fixture.configureByFile to be complaint with 193, part 2

This commit is contained in:
Vladimir Dolzhenko
2019-09-29 10:43:38 +02:00
parent d7a2de59ac
commit 3b563eaca1
16 changed files with 119 additions and 121 deletions
@@ -19,16 +19,7 @@ package org.jetbrains.kotlin.generators.tests
import org.jetbrains.kotlin.AbstractDataFlowValueRenderingTest import org.jetbrains.kotlin.AbstractDataFlowValueRenderingTest
import org.jetbrains.kotlin.addImport.AbstractAddImportTest import org.jetbrains.kotlin.addImport.AbstractAddImportTest
import org.jetbrains.kotlin.allopen.AbstractBytecodeListingTestForAllOpen import org.jetbrains.kotlin.allopen.AbstractBytecodeListingTestForAllOpen
import org.jetbrains.kotlin.android.*
import org.jetbrains.kotlin.android.annotator.AbstractAndroidGutterIconTest
import org.jetbrains.kotlin.android.configure.AbstractConfigureProjectTest
import org.jetbrains.kotlin.android.folding.AbstractAndroidResourceFoldingTest
import org.jetbrains.kotlin.android.intention.AbstractAndroidIntentionTest
import org.jetbrains.kotlin.android.intention.AbstractAndroidResourceIntentionTest
import org.jetbrains.kotlin.android.lint.AbstractKotlinLintTest
import org.jetbrains.kotlin.android.parcel.AbstractParcelBytecodeListingTest import org.jetbrains.kotlin.android.parcel.AbstractParcelBytecodeListingTest
import org.jetbrains.kotlin.android.quickfix.AbstractAndroidLintQuickfixTest
import org.jetbrains.kotlin.android.quickfix.AbstractAndroidQuickFixMultiFileTest
import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidBoxTest import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidBoxTest
import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidBytecodeShapeTest import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidBytecodeShapeTest
import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidSyntheticPropertyDescriptorTest import org.jetbrains.kotlin.android.synthetic.test.AbstractAndroidSyntheticPropertyDescriptorTest
@@ -1333,4 +1324,5 @@ fun main(args: Array<String>) {
model("android/gutterIcon") model("android/gutterIcon")
} }
} }
*/
} }
@@ -29,6 +29,7 @@ import com.intellij.psi.search.FileTypeIndex
import com.intellij.psi.search.ProjectScope import com.intellij.psi.search.ProjectScope
import com.intellij.testFramework.LightProjectDescriptor import com.intellij.testFramework.LightProjectDescriptor
import com.intellij.testFramework.LoggedErrorProcessor import com.intellij.testFramework.LoggedErrorProcessor
import com.sun.tools.corba.se.idl.toJavaPortable.Util.fileName
import org.apache.log4j.Logger import org.apache.log4j.Logger
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.config.CompilerSettings import org.jetbrains.kotlin.config.CompilerSettings
@@ -62,8 +63,15 @@ abstract class KotlinLightCodeInsightFixtureTestCase : KotlinLightCodeInsightFix
protected open val captureExceptions = true protected open val captureExceptions = true
protected fun testPath(): String = protected fun testDataFile(): File = File(testDataPath, fileName())
File(testDataPath, fileName()).toString()
protected fun testPath(): String = testDataFile().toString()
protected open fun fileName(): String = KotlinTestUtils.getTestDataFileName(this::class.java, this.name) ?: (getTestName(false) + ".kt")
override fun getTestDataPath(): String {
return this::class.findAnnotation<TestMetadata>()?.value ?: super.getTestDataPath()
}
override fun setUp() { override fun setUp() {
super.setUp() super.setUp()
@@ -194,8 +202,6 @@ abstract class KotlinLightCodeInsightFixtureTestCase : KotlinLightCodeInsightFix
protected fun isAllFilesPresentInTest(): Boolean = KotlinTestUtils.isAllFilesPresentTest(getTestName(false)) protected fun isAllFilesPresentInTest(): Boolean = KotlinTestUtils.isAllFilesPresentTest(getTestName(false))
protected open fun fileName(): String = KotlinTestUtils.getTestDataFileName(this::class.java, this.name) ?: (getTestName(false) + ".kt")
protected fun performNotWriteEditorAction(actionId: String): Boolean { protected fun performNotWriteEditorAction(actionId: String): Boolean {
val dataContext = (myFixture.editor as EditorEx).dataContext val dataContext = (myFixture.editor as EditorEx).dataContext
@@ -215,9 +221,6 @@ abstract class KotlinLightCodeInsightFixtureTestCase : KotlinLightCodeInsightFix
return true return true
} }
override fun getTestDataPath(): String {
return this::class.findAnnotation<TestMetadata>()?.value ?: super.getTestDataPath()
}
} }
@@ -12,7 +12,6 @@ import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.idea.AbstractCopyPasteTest import org.jetbrains.kotlin.idea.AbstractCopyPasteTest
import org.jetbrains.kotlin.idea.perf.Stats.Companion.WARM_UP import org.jetbrains.kotlin.idea.perf.Stats.Companion.WARM_UP
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File import java.io.File
@@ -22,8 +21,6 @@ import java.io.File
abstract class AbstractPerformanceLiteralKotlinToKotlinCopyPasteTest : AbstractCopyPasteTest() { abstract class AbstractPerformanceLiteralKotlinToKotlinCopyPasteTest : AbstractCopyPasteTest() {
companion object { companion object {
val BASE_PATH = PluginTestCaseBase.getTestDataPathBase() + "/copyPaste/literal"
@JvmStatic @JvmStatic
var warmedUp: Boolean = false var warmedUp: Boolean = false
@@ -36,8 +33,6 @@ abstract class AbstractPerformanceLiteralKotlinToKotlinCopyPasteTest : AbstractC
} }
} }
override fun getTestDataPath() = BASE_PATH
override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE
override fun setUp() { override fun setUp() {
@@ -83,14 +78,17 @@ abstract class AbstractPerformanceLiteralKotlinToKotlinCopyPasteTest : AbstractC
) )
} }
fun doPerfTest(path: String) { fun doPerfTest(unused: String) {
val testName = getTestName(false) val testName = getTestName(false)
val fileName = fileName()
val testPath = testPath()
val expectedPath = File(testPath.replace(".kt", ".expected.kt"))
val fileEditorManager = FileEditorManagerEx.getInstance(project) val fileEditorManager = FileEditorManagerEx.getInstance(project)
stats.perfTest<Array<PsiFile>, Unit>( stats.perfTest<Array<PsiFile>, Unit>(
testName = testName, testName = testName,
setUp = { setUp = {
it.setUpValue = myFixture.configureByFiles("$testName.kt", "$testName.to.kt") it.setUpValue = myFixture.configureByFiles(fileName, fileName.replace(".kt", ".to.kt"))
}, },
test = { test = {
fileEditorManager.setSelectedEditor(it.setUpValue!![0].virtualFile, "") fileEditorManager.setSelectedEditor(it.setUpValue!![0].virtualFile, "")
@@ -100,7 +98,7 @@ abstract class AbstractPerformanceLiteralKotlinToKotlinCopyPasteTest : AbstractC
myFixture.performEditorAction(IdeActions.ACTION_PASTE) myFixture.performEditorAction(IdeActions.ACTION_PASTE)
}, },
tearDown = { tearDown = {
KotlinTestUtils.assertEqualsToFile(File(path.replace(".kt", ".expected.kt")), it.setUpValue!![1].text) KotlinTestUtils.assertEqualsToFile(expectedPath, it.setUpValue!![1].text)
// to avoid VFS refresh // to avoid VFS refresh
myFixture.performEditorAction(IdeActions.ACTION_UNDO) myFixture.performEditorAction(IdeActions.ACTION_UNDO)
@@ -5,15 +5,21 @@
package org.jetbrains.kotlin.idea.testFramework package org.jetbrains.kotlin.idea.testFramework
import com.intellij.ide.startup.impl.StartupManagerImpl
import com.intellij.lang.LanguageAnnotators
import com.intellij.lang.LanguageExtensionPoint
import com.intellij.lang.annotation.Annotator
import com.intellij.openapi.Disposable import com.intellij.openapi.Disposable
import com.intellij.openapi.editor.Document import com.intellij.openapi.editor.Document
import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.project.ex.ProjectManagerEx import com.intellij.openapi.project.ex.ProjectManagerEx
import com.intellij.openapi.startup.StartupManager
import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.impl.PsiDocumentManagerBase import com.intellij.psi.impl.PsiDocumentManagerBase
import com.intellij.testFramework.EdtTestUtil import com.intellij.testFramework.EdtTestUtil
import com.intellij.testFramework.PlatformTestUtil
import com.intellij.testFramework.runInEdtAndWait import com.intellij.testFramework.runInEdtAndWait
import com.intellij.util.ThrowableRunnable import com.intellij.util.ThrowableRunnable
import com.intellij.util.ui.UIUtil import com.intellij.util.ui.UIUtil
@@ -55,13 +61,23 @@ fun dispatchAllInvocationEvents() {
} }
} }
fun loadProjectWithName(path: String, name: String): Project? =
ProjectManagerEx.getInstanceEx().loadProject(name, path)
fun closeProject(project: Project) { fun closeProject(project: Project) {
dispatchAllInvocationEvents() dispatchAllInvocationEvents()
val projectManagerEx = ProjectManagerEx.getInstanceEx() val projectManagerEx = ProjectManagerEx.getInstanceEx()
projectManagerEx.closeAndDispose(project) projectManagerEx.closeAndDispose(project)
} }
// BUNCH: 183 fun runStartupActivities(project: Project) {
with(StartupManager.getInstance(project) as StartupManagerImpl) {
scheduleInitialVfsRefresh()
runStartupActivities()
runPostStartupActivities()
}
}
fun waitForAllEditorsFinallyLoaded(project: Project) { fun waitForAllEditorsFinallyLoaded(project: Project) {
// 183 does not have this public api // 183 does not have this public api
} }
@@ -19,10 +19,10 @@ import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File import java.io.File
abstract class AbstractImportsTest : KotlinLightCodeInsightFixtureTestCase() { abstract class AbstractImportsTest : KotlinLightCodeInsightFixtureTestCase() {
override fun getTestDataPath() = KotlinTestUtils.getHomeDirectory()
override fun getProjectDescriptor(): LightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE override fun getProjectDescriptor(): LightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE
protected fun doTest(testPath: String) { protected fun doTest(unused: String) {
val testPath = testPath()
CodeStyle.setTemporarySettings(project, CodeStyle.getSettings(project).clone()) CodeStyle.setTemporarySettings(project, CodeStyle.getSettings(project).clone())
val codeStyleSettings = KotlinCodeStyleSettings.getInstance(project) val codeStyleSettings = KotlinCodeStyleSettings.getInstance(project)
@@ -30,13 +30,13 @@ abstract class AbstractImportsTest : KotlinLightCodeInsightFixtureTestCase() {
val fixture = myFixture val fixture = myFixture
val dependencySuffixes = listOf(".dependency.kt", ".dependency.java", ".dependency1.kt", ".dependency2.kt") val dependencySuffixes = listOf(".dependency.kt", ".dependency.java", ".dependency1.kt", ".dependency2.kt")
for (suffix in dependencySuffixes) { for (suffix in dependencySuffixes) {
val dependencyPath = testPath.replace(".kt", suffix) val dependencyPath = fileName().replace(".kt", suffix)
if (File(dependencyPath).exists()) { if (File(testDataPath, dependencyPath).exists()) {
fixture.configureByFile(dependencyPath) fixture.configureByFile(dependencyPath)
} }
} }
fixture.configureByFile(testPath) fixture.configureByFile(fileName())
val file = fixture.file as KtFile val file = fixture.file as KtFile
@@ -8,35 +8,36 @@ package org.jetbrains.kotlin.checkers
import com.intellij.codeInspection.ex.EntryPointsManagerBase import com.intellij.codeInspection.ex.EntryPointsManagerBase
import com.intellij.testFramework.LightProjectDescriptor import com.intellij.testFramework.LightProjectDescriptor
import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.TestMetadata
import org.junit.runner.RunWith import org.junit.runner.RunWith
@TestMetadata("idea/testData/checker/custom")
@RunWith(JUnit3WithIdeaConfigurationRunner::class) @RunWith(JUnit3WithIdeaConfigurationRunner::class)
class PsiCheckerCustomTest : AbstractPsiCheckerTest() { class PsiCheckerCustomTest : AbstractPsiCheckerTest() {
fun testNoUnusedParameterWhenCustom() { fun testNoUnusedParameterWhenCustom() {
val testAnnotation = "MyTestAnnotation" val testAnnotation = "MyTestAnnotation"
EntryPointsManagerBase.getInstance(project).ADDITIONAL_ANNOTATIONS.add(testAnnotation) EntryPointsManagerBase.getInstance(project).ADDITIONAL_ANNOTATIONS.add(testAnnotation)
try { try {
doTest(getTestDataFile("noUnusedParameterWhenCustom.kt")) doTest("noUnusedParameterWhenCustom.kt")
} } finally {
finally {
EntryPointsManagerBase.getInstance(project).ADDITIONAL_ANNOTATIONS.remove(testAnnotation) EntryPointsManagerBase.getInstance(project).ADDITIONAL_ANNOTATIONS.remove(testAnnotation)
} }
} }
fun testConflictingOverloadsMultifile1() { fun testConflictingOverloadsMultifile1() {
doTest(getTestDataFile("conflictingOverloadsMultifile1a.kt"), doTest(
getTestDataFile("conflictingOverloadsMultifile1b.kt")) "conflictingOverloadsMultifile1a.kt",
"conflictingOverloadsMultifile1b.kt"
)
} }
fun testConflictingOverloadsMultifile2() { fun testConflictingOverloadsMultifile2() {
doTest(getTestDataFile("conflictingOverloadsMultifile2a.kt"), doTest(
getTestDataFile("conflictingOverloadsMultifile2b.kt")) "conflictingOverloadsMultifile2a.kt",
"conflictingOverloadsMultifile2b.kt"
)
} }
private fun getTestDataFile(localName: String) = "idea/testData/checker/custom/$localName"
override fun getTestDataPath(): String = KotlinTestUtils.getHomeDirectory()
override fun getProjectDescriptor(): LightProjectDescriptor = getProjectDescriptorFromTestName() override fun getProjectDescriptor(): LightProjectDescriptor = getProjectDescriptorFromTestName()
} }
@@ -44,34 +44,39 @@ import kotlin.test.assertNotNull
import kotlin.test.assertTrue import kotlin.test.assertTrue
abstract class AbstractIdeLightClassTest : KotlinLightCodeInsightFixtureTestCase() { abstract class AbstractIdeLightClassTest : KotlinLightCodeInsightFixtureTestCase() {
fun doTest(testDataPath: String) { fun doTest(unused: String) {
forceUsingOldLightClassesForTest() forceUsingOldLightClassesForTest()
val fileName = fileName()
val extraFilePath = when { val extraFilePath = when {
testDataPath.endsWith(fileExtension) -> testDataPath.replace(fileExtension, ".extra" + fileExtension) fileName.endsWith(fileExtension) -> fileName.replace(fileExtension, ".extra" + fileExtension)
else -> error("Invalid test data extension") else -> error("Invalid test data extension")
} }
val testFiles = if (File(extraFilePath).isFile) listOf(testDataPath, extraFilePath) else listOf(testDataPath) val testFiles = if (File(testDataPath, extraFilePath).isFile) listOf(fileName, extraFilePath) else listOf(fileName)
val lazinessMode = lazinessModeByFileText(testDataPath) val lazinessMode = lazinessModeByFileText()
myFixture.configureByFiles(*testFiles.toTypedArray()) myFixture.configureByFiles(*testFiles.toTypedArray())
val ktFile = myFixture.file as KtFile val ktFile = myFixture.file as KtFile
val testData = File(testDataPath) val testData = testDataFile()
testLightClass(KotlinTestUtils.replaceExtension(testData, "java"), testData, { LightClassTestCommon.removeEmptyDefaultImpls(it) }, { fqName -> testLightClass(
val tracker = LightClassLazinessChecker.Tracker(fqName) KotlinTestUtils.replaceExtension(testData, "java"),
project.withServiceRegistered<StubComputationTracker, PsiClass?>(tracker) { testData,
findClass(fqName, ktFile, project)?.apply { { LightClassTestCommon.removeEmptyDefaultImpls(it) },
LightClassLazinessChecker.check(this as KtLightClass, tracker, lazinessMode) { fqName ->
tracker.allowLevel(EXACT) val tracker = LightClassLazinessChecker.Tracker(fqName)
PsiElementChecker.checkPsiElementStructure(this) project.withServiceRegistered<StubComputationTracker, PsiClass?>(tracker) {
findClass(fqName, ktFile, project)?.apply {
LightClassLazinessChecker.check(this as KtLightClass, tracker, lazinessMode)
tracker.allowLevel(EXACT)
PsiElementChecker.checkPsiElementStructure(this)
}
} }
} })
})
} }
private fun lazinessModeByFileText(testDataPath: String): LightClassLazinessChecker.Mode { private fun lazinessModeByFileText(): LightClassLazinessChecker.Mode {
return File(testDataPath).readText().run { return testDataFile().readText().run {
val argument = substringAfter("LAZINESS:", "").substringBefore(" ") val argument = substringAfter("LAZINESS:", "").substringBefore(" ")
LightClassLazinessChecker.Mode.values().firstOrNull { it.name == argument } ?: LightClassLazinessChecker.Mode.AllChecks LightClassLazinessChecker.Mode.values().firstOrNull { it.name == argument } ?: LightClassLazinessChecker.Mode.AllChecks
} }
@@ -9,21 +9,18 @@ import com.intellij.openapi.actionSystem.IdeActions
import org.jetbrains.kotlin.idea.AbstractCopyPasteTest import org.jetbrains.kotlin.idea.AbstractCopyPasteTest
import org.jetbrains.kotlin.idea.caches.resolve.forceResolveInWriteActionCheckInTests import org.jetbrains.kotlin.idea.caches.resolve.forceResolveInWriteActionCheckInTests
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File import java.io.File
abstract class AbstractLiteralTextToKotlinCopyPasteTest : AbstractCopyPasteTest() { abstract class AbstractLiteralTextToKotlinCopyPasteTest : AbstractCopyPasteTest() {
private val _basePath = PluginTestCaseBase.getTestDataPathBase() + "/copyPaste/plainTextLiteral"
override fun getTestDataPath() = _basePath
override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE
fun doTest(path: String) { fun doTest(unused: String) {
myFixture.testDataPath = _basePath val fileName = fileName()
val testName = getTestName(false) val targetFileName = fileName.replace(".txt", ".kt")
myFixture.configureByFiles("$testName.txt")
myFixture.configureByFile(fileName)
val fileText = myFixture.editor.document.text val fileText = myFixture.editor.document.text
if (!myFixture.editor.selectionModel.hasSelection()) if (!myFixture.editor.selectionModel.hasSelection())
@@ -33,12 +30,13 @@ abstract class AbstractLiteralTextToKotlinCopyPasteTest : AbstractCopyPasteTest(
myFixture.performEditorAction(IdeActions.ACTION_COPY) myFixture.performEditorAction(IdeActions.ACTION_COPY)
} }
configureTargetFile("$testName.kt") configureTargetFile(targetFileName)
forceResolveInWriteActionCheckInTests { forceResolveInWriteActionCheckInTests {
myFixture.performEditorAction(IdeActions.ACTION_PASTE) myFixture.performEditorAction(IdeActions.ACTION_PASTE)
} }
KotlinTestUtils.assertEqualsToFile(File(path.replace(".txt", ".expected.kt")), myFixture.file.text) val expectedFile = File(testPath().replace(".txt", ".expected.kt"))
KotlinTestUtils.assertEqualsToFile(expectedFile, myFixture.file.text)
} }
} }
@@ -6,21 +6,15 @@
package org.jetbrains.kotlin.idea.conversion.copy package org.jetbrains.kotlin.idea.conversion.copy
import com.intellij.openapi.actionSystem.IdeActions import com.intellij.openapi.actionSystem.IdeActions
import org.jetbrains.kotlin.idea.AbstractCopyPasteTest
import org.jetbrains.kotlin.idea.editor.KotlinEditorOptions import org.jetbrains.kotlin.idea.editor.KotlinEditorOptions
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.InTextDirectivesUtils
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File import java.io.File
abstract class AbstractTextJavaToKotlinCopyPasteConversionTest : AbstractJ2kCopyPasteTest() { abstract class AbstractTextJavaToKotlinCopyPasteConversionTest : AbstractJ2kCopyPasteTest() {
protected open val BASE_PATH = PluginTestCaseBase.getTestDataPathBase() + "/copyPaste/plainTextConversion"
private var oldEditorOptions: KotlinEditorOptions? = null private var oldEditorOptions: KotlinEditorOptions? = null
override fun getTestDataPath() = BASE_PATH
override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE
override fun setUp() { override fun setUp() {
@@ -35,10 +29,9 @@ abstract class AbstractTextJavaToKotlinCopyPasteConversionTest : AbstractJ2kCopy
super.tearDown() super.tearDown()
} }
fun doTest(path: String) { fun doTest(unused: String) {
myFixture.testDataPath = BASE_PATH val fileName = fileName()
val testName = getTestName(false) myFixture.configureByFile(fileName)
myFixture.configureByFiles(testName + ".txt")
val fileText = myFixture.editor.document.text val fileText = myFixture.editor.document.text
val noConversionExpected = InTextDirectivesUtils.findListWithPrefixes(fileText, "// NO_CONVERSION_EXPECTED").isNotEmpty() val noConversionExpected = InTextDirectivesUtils.findListWithPrefixes(fileText, "// NO_CONVERSION_EXPECTED").isNotEmpty()
@@ -46,18 +39,21 @@ abstract class AbstractTextJavaToKotlinCopyPasteConversionTest : AbstractJ2kCopy
myFixture.editor.selectionModel.setSelection(0, fileText.length) myFixture.editor.selectionModel.setSelection(0, fileText.length)
myFixture.performEditorAction(IdeActions.ACTION_COPY) myFixture.performEditorAction(IdeActions.ACTION_COPY)
configureByDependencyIfExists(testName + ".dependency.kt") configureByDependencyIfExists(fileName.replace(".txt", ".dependency.kt"))
configureByDependencyIfExists(testName + ".dependency.java") configureByDependencyIfExists(fileName.replace(".txt", ".dependency.java"))
configureTargetFile(testName + ".to.kt") configureTargetFile(fileName.replace(".txt", ".to.kt"))
ConvertTextJavaCopyPasteProcessor.conversionPerformed = false ConvertTextJavaCopyPasteProcessor.conversionPerformed = false
myFixture.performEditorAction(IdeActions.ACTION_PASTE) myFixture.performEditorAction(IdeActions.ACTION_PASTE)
kotlin.test.assertEquals(noConversionExpected, !ConvertTextJavaCopyPasteProcessor.conversionPerformed, kotlin.test.assertEquals(
if (noConversionExpected) "Conversion to Kotlin should not be suggested" else "No conversion to Kotlin suggested") noConversionExpected, !ConvertTextJavaCopyPasteProcessor.conversionPerformed,
if (noConversionExpected) "Conversion to Kotlin should not be suggested" else "No conversion to Kotlin suggested"
)
KotlinTestUtils.assertEqualsToFile(File(path.replace(".txt", ".expected.kt")), myFixture.file.text) val expectedFile = File(testPath().replace(".txt", ".expected.kt"))
KotlinTestUtils.assertEqualsToFile(expectedFile, myFixture.file.text)
} }
} }
@@ -8,29 +8,25 @@ package org.jetbrains.kotlin.idea.conversion.copy
import com.intellij.openapi.actionSystem.IdeActions import com.intellij.openapi.actionSystem.IdeActions
import org.jetbrains.kotlin.idea.AbstractCopyPasteTest import org.jetbrains.kotlin.idea.AbstractCopyPasteTest
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File import java.io.File
abstract class AbstractLiteralKotlinToKotlinCopyPasteTest : AbstractCopyPasteTest() { abstract class AbstractLiteralKotlinToKotlinCopyPasteTest : AbstractCopyPasteTest() {
private val BASE_PATH = PluginTestCaseBase.getTestDataPathBase() + "/copyPaste/literal"
override fun getTestDataPath() = BASE_PATH
override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE
fun doTest(unused: String) {
val fileName = fileName()
val testPath = testPath()
val expectedPath = File(testPath.replace(".kt", ".expected.kt"))
fun doTest(path: String) { myFixture.configureByFile(fileName)
myFixture.testDataPath = BASE_PATH
val testName = getTestName(false)
myFixture.configureByFiles(testName + ".kt")
myFixture.performEditorAction(IdeActions.ACTION_COPY) myFixture.performEditorAction(IdeActions.ACTION_COPY)
configureTargetFile(testName + ".to.kt") configureTargetFile(fileName.replace(".kt", ".to.kt"))
myFixture.performEditorAction(IdeActions.ACTION_PASTE) myFixture.performEditorAction(IdeActions.ACTION_PASTE)
KotlinTestUtils.assertEqualsToFile(File(path.replace(".kt", ".expected.kt")), myFixture.file.text) KotlinTestUtils.assertEqualsToFile(expectedPath, myFixture.file.text)
} }
} }
@@ -8,12 +8,12 @@ package org.jetbrains.kotlin.idea.highlighter
import com.intellij.codeInsight.highlighting.HighlightUsagesHandler import com.intellij.codeInsight.highlighting.HighlightUsagesHandler
import com.intellij.openapi.editor.colors.EditorColors import com.intellij.openapi.editor.colors.EditorColors
import com.intellij.openapi.editor.colors.EditorColorsManager import com.intellij.openapi.editor.colors.EditorColorsManager
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.InTextDirectivesUtils
abstract class AbstractHighlightExitPointsTest : LightCodeInsightFixtureTestCase() { abstract class AbstractHighlightExitPointsTest : KotlinLightCodeInsightFixtureTestCase() {
fun doTest(testDataPath: String) { fun doTest(unused: String) {
myFixture.configureByFile(testDataPath) myFixture.configureByFile(fileName())
HighlightUsagesHandler.invoke(myFixture.project, myFixture.editor, myFixture.file) HighlightUsagesHandler.invoke(myFixture.project, myFixture.editor, myFixture.file)
val text = myFixture.file.text val text = myFixture.file.text
@@ -18,14 +18,14 @@ import java.util.List;
public abstract class AbstractHighlightingTest extends KotlinLightCodeInsightFixtureTestCase { public abstract class AbstractHighlightingTest extends KotlinLightCodeInsightFixtureTestCase {
protected void doTest(String filePath) throws Exception { protected void doTest(String unused) throws Exception {
String fileText = FileUtil.loadFile(new File(filePath), true); String fileText = FileUtil.loadFile(new File(testPath()), true);
boolean checkInfos = !InTextDirectivesUtils.isDirectiveDefined(fileText, "// NO_CHECK_INFOS"); boolean checkInfos = !InTextDirectivesUtils.isDirectiveDefined(fileText, "// NO_CHECK_INFOS");
boolean checkWeakWarnings = !InTextDirectivesUtils.isDirectiveDefined(fileText, "// NO_CHECK_WEAK_WARNINGS"); boolean checkWeakWarnings = !InTextDirectivesUtils.isDirectiveDefined(fileText, "// NO_CHECK_WEAK_WARNINGS");
boolean checkWarnings = !InTextDirectivesUtils.isDirectiveDefined(fileText, "// NO_CHECK_WARNINGS"); boolean checkWarnings = !InTextDirectivesUtils.isDirectiveDefined(fileText, "// NO_CHECK_WARNINGS");
boolean expectedDuplicatedHighlighting = InTextDirectivesUtils.isDirectiveDefined(fileText, "// EXPECTED_DUPLICATED_HIGHLIGHTING"); boolean expectedDuplicatedHighlighting = InTextDirectivesUtils.isDirectiveDefined(fileText, "// EXPECTED_DUPLICATED_HIGHLIGHTING");
myFixture.configureByFile(filePath); myFixture.configureByFile(fileName());
withExpectedDuplicatedHighlighting(expectedDuplicatedHighlighting, () -> { withExpectedDuplicatedHighlighting(expectedDuplicatedHighlighting, () -> {
try { try {
@@ -14,20 +14,16 @@ import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression
import org.jetbrains.kotlin.psi.psiUtil.parents import org.jetbrains.kotlin.psi.psiUtil.parents
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestMetadata import org.jetbrains.kotlin.test.TestMetadata
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
import org.junit.runner.RunWith import org.junit.runner.RunWith
@TestMetadata("idea/testData/quickfix.special") @TestMetadata("idea/testData/quickfix.special/deprecatedSymbolUsage")
@TestDataPath("\$PROJECT_ROOT") @TestDataPath("\$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners::class) @RunWith(JUnit3RunnerWithInners::class)
class DeprecatedSymbolUsageFixSpecialTest : KotlinLightCodeInsightFixtureTestCase() { class DeprecatedSymbolUsageFixSpecialTest : KotlinLightCodeInsightFixtureTestCase() {
override fun getTestDataPath() = KotlinTestUtils.getHomeDirectory()
override fun getProjectDescriptor() = ProjectDescriptorWithStdlibSources.INSTANCE override fun getProjectDescriptor() = ProjectDescriptorWithStdlibSources.INSTANCE
private val TEST_DATA_DIR = "idea/testData/quickfix.special/deprecatedSymbolUsage"
fun testMemberInCompiledClass() { fun testMemberInCompiledClass() {
doTest("matches(input)") doTest("matches(input)")
} }
@@ -37,7 +33,7 @@ class DeprecatedSymbolUsageFixSpecialTest : KotlinLightCodeInsightFixtureTestCas
} }
private fun doTest(pattern: String) { private fun doTest(pattern: String) {
val testPath = KotlinTestUtils.navigationMetadata(TEST_DATA_DIR + "/" + getTestName(true) + ".kt") val testPath = getTestName(true) + ".kt"
myFixture.configureByFile(testPath) myFixture.configureByFile(testPath)
val offset = editor.caretModel.offset val offset = editor.caretModel.offset
@@ -30,21 +30,20 @@ import java.io.File
import java.util.* import java.util.*
abstract class AbstractPartialBodyResolveTest : KotlinLightCodeInsightFixtureTestCase() { abstract class AbstractPartialBodyResolveTest : KotlinLightCodeInsightFixtureTestCase() {
override fun getTestDataPath() = KotlinTestUtils.getHomeDirectory()
override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE
fun doTest(testPath: String) { fun doTest(unused: String) {
val testPath = testPath()
val dumpNormal = dump(testPath, BodyResolveMode.PARTIAL) val dumpNormal = dump(testPath, BodyResolveMode.PARTIAL)
val testPathNoExt = FileUtil.getNameWithoutExtension(testPath) val testPathNoExt = FileUtil.getNameWithoutExtension(testPath)
KotlinTestUtils.assertEqualsToFile(File(testPathNoExt + ".dump"), dumpNormal) KotlinTestUtils.assertEqualsToFile(File("$testPathNoExt.dump"), dumpNormal)
val dumpForCompletion = dump(testPath, BodyResolveMode.PARTIAL_FOR_COMPLETION) val dumpForCompletion = dump(testPath, BodyResolveMode.PARTIAL_FOR_COMPLETION)
val completionDump = File(testPathNoExt + ".completion") val completionDump = File("$testPathNoExt.completion")
if (dumpForCompletion != dumpNormal) { if (dumpForCompletion != dumpNormal) {
KotlinTestUtils.assertEqualsToFile(completionDump, dumpForCompletion) KotlinTestUtils.assertEqualsToFile(completionDump, dumpForCompletion)
} } else {
else {
Assert.assertFalse(completionDump.exists()) Assert.assertFalse(completionDump.exists())
} }
} }
@@ -64,11 +63,11 @@ abstract class AbstractPartialBodyResolveTest : KotlinLightCodeInsightFixtureTes
selectionModel.selectionEnd, selectionModel.selectionEnd,
KtExpression::class.java KtExpression::class.java
) )
?: error("No JetExpression at selection range") ?: error("No KtExpression at selection range")
} else { } else {
val offset = editor.caretModel.offset val offset = editor.caretModel.offset
val element = file.findElementAt(offset)!! val element = file.findElementAt(offset)!!
element.getNonStrictParentOfType<KtSimpleNameExpression>() ?: error("No JetSimpleNameExpression at caret") element.getNonStrictParentOfType<KtSimpleNameExpression>() ?: error("No KtSimpleNameExpression at caret")
} }
val resolutionFacade = file.getResolutionFacade() val resolutionFacade = file.getResolutionFacade()
@@ -86,8 +86,9 @@ abstract class AbstractScratchRunActionTest : FileEditorManagerTestCase() {
} }
} }
javaFiles.forEach { myFixture.copyFileToProject(it.path, FileUtil.getRelativePath(baseDir, it)!!) } val testDataPathFile = File(myFixture.testDataPath)
kotlinFiles.forEach { myFixture.copyFileToProject(it.path, FileUtil.getRelativePath(baseDir, it)!!) } javaFiles.forEach { myFixture.copyFileToProject(FileUtil.getRelativePath(testDataPathFile, it)!!, FileUtil.getRelativePath(baseDir, it)!!) }
kotlinFiles.forEach { myFixture.copyFileToProject(FileUtil.getRelativePath(testDataPathFile, it)!!, FileUtil.getRelativePath(baseDir, it)!!) }
val outputDir = createTempDir(dirName) val outputDir = createTempDir(dirName)
@@ -6,10 +6,7 @@
package org.jetbrains.kotlin.nj2k package org.jetbrains.kotlin.nj2k
import org.jetbrains.kotlin.idea.conversion.copy.AbstractTextJavaToKotlinCopyPasteConversionTest import org.jetbrains.kotlin.idea.conversion.copy.AbstractTextJavaToKotlinCopyPasteConversionTest
import org.jetbrains.kotlin.test.KotlinTestUtils
abstract class AbstractTextNewJavaToKotlinCopyPasteConversionTest : AbstractTextJavaToKotlinCopyPasteConversionTest() { abstract class AbstractTextNewJavaToKotlinCopyPasteConversionTest : AbstractTextJavaToKotlinCopyPasteConversionTest() {
override val BASE_PATH = KotlinTestUtils.getHomeDirectory() + "/nj2k/testData/copyPastePlainText"
override fun isNewJ2K(): Boolean = true override fun isNewJ2K(): Boolean = true
} }