UL classes flaky tests partially fix

#KT-32276 - Reduce affected tests count from 117 cases to 2 cases
This commit is contained in:
Igor Yakovlev
2019-06-27 12:46:02 +03:00
parent 5fe85e4767
commit 8b40005b0c
6 changed files with 27 additions and 28 deletions
@@ -1,3 +1,4 @@
//RELEASE_COROUTINE_NEEDED
class Foo { class Foo {
suspend fun doSomething(foo: Foo): Bar {} suspend fun doSomething(foo: Foo): Bar {}
} }
+1 -1
View File
@@ -1,4 +1,4 @@
//RELEASE_COROUTINE_NEEDED
suspend fun doSomething(foo: String): Int {} suspend fun doSomething(foo: String): Int {}
fun <T> async(block: suspend () -> T) fun <T> async(block: suspend () -> T)
@@ -6,11 +6,8 @@
package org.jetbrains.kotlin.asJava.classes package org.jetbrains.kotlin.asJava.classes
import com.intellij.testFramework.LightProjectDescriptor import com.intellij.testFramework.LightProjectDescriptor
import junit.framework.TestCase
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.idea.perf.UltraLightChecker import org.jetbrains.kotlin.idea.perf.UltraLightChecker
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtClassOrObject
@@ -22,7 +19,10 @@ abstract class AbstractUltraLightClassLoadingTest : KotlinLightCodeInsightFixtur
override fun getProjectDescriptor(): LightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE override fun getProjectDescriptor(): LightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE
fun doTest(testDataPath: String) { fun doTest(testDataPath: String) {
val file = myFixture.addFileToProject(testDataPath, File(testDataPath).readText()) as KtFile val sourceText = File(testDataPath).readText()
val file = myFixture.addFileToProject(testDataPath, sourceText) as KtFile
UltraLightChecker.checkForReleaseCoroutine(sourceText, module)
val expectedTextFile = File(testDataPath.replaceFirst("\\.kt\$".toRegex(), ".java")) val expectedTextFile = File(testDataPath.replaceFirst("\\.kt\$".toRegex(), ".java"))
if (expectedTextFile.exists()) { if (expectedTextFile.exists()) {
@@ -41,11 +41,6 @@ abstract class AbstractUltraLightClassLoadingTest : KotlinLightCodeInsightFixtur
return return
} }
TestCase.assertTrue(
"Test should be runned under language version that supports released coroutines",
module.languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines)
)
for (ktClass in UltraLightChecker.allClasses(file)) { for (ktClass in UltraLightChecker.allClasses(file)) {
val ultraLightClass = UltraLightChecker.checkClassEquivalence(ktClass) val ultraLightClass = UltraLightChecker.checkClassEquivalence(ktClass)
if (ultraLightClass != null) { if (ultraLightClass != null) {
@@ -6,10 +6,7 @@
package org.jetbrains.kotlin.asJava.classes package org.jetbrains.kotlin.asJava.classes
import com.intellij.testFramework.LightProjectDescriptor import com.intellij.testFramework.LightProjectDescriptor
import junit.framework.TestCase
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.idea.perf.UltraLightChecker import org.jetbrains.kotlin.idea.perf.UltraLightChecker
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
@@ -24,12 +21,10 @@ abstract class AbstractUltraLightClassSanityTest : KotlinLightCodeInsightFixture
return //tests allopen compiler plugin that we don't have in this test return //tests allopen compiler plugin that we don't have in this test
} }
val file = myFixture.addFileToProject(testDataPath, ioFile.readText()) as KtFile val sourceText = ioFile.readText()
val file = myFixture.addFileToProject(testDataPath, sourceText) as KtFile
TestCase.assertTrue( UltraLightChecker.checkForReleaseCoroutine(sourceText, module)
"Test should be runned under language version that supports released coroutines",
module.languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines)
)
UltraLightChecker.checkClassEquivalence(file) UltraLightChecker.checkClassEquivalence(file)
} }
@@ -7,11 +7,8 @@ package org.jetbrains.kotlin.asJava.classes
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import com.intellij.testFramework.LightProjectDescriptor import com.intellij.testFramework.LightProjectDescriptor
import junit.framework.TestCase
import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.idea.perf.UltraLightChecker import org.jetbrains.kotlin.idea.perf.UltraLightChecker
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.kdoc.psi.api.KDoc import org.jetbrains.kotlin.kdoc.psi.api.KDoc
@@ -24,21 +21,19 @@ abstract class AbstractUltraLightFacadeClassTest : KotlinLightCodeInsightFixture
override fun getProjectDescriptor(): LightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE override fun getProjectDescriptor(): LightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE
fun doTest(testDataPath: String) { fun doTest(testDataPath: String) {
val file = myFixture.addFileToProject(testDataPath, File(testDataPath).readText()) as KtFile val sourceText = File(testDataPath).readText()
val file = myFixture.addFileToProject(testDataPath, sourceText) as KtFile
UltraLightChecker.checkForReleaseCoroutine(sourceText, module)
val additionalFilePath = "$testDataPath.1" val additionalFilePath = "$testDataPath.1"
if(File(additionalFilePath).exists()) { if (File(additionalFilePath).exists()) {
myFixture.addFileToProject(additionalFilePath.replaceFirst(".kt.1", "1.kt"), File(additionalFilePath).readText()) myFixture.addFileToProject(additionalFilePath.replaceFirst(".kt.1", "1.kt"), File(additionalFilePath).readText())
} }
val scope = GlobalSearchScope.allScope(project) val scope = GlobalSearchScope.allScope(project)
val facades = KotlinAsJavaSupport.getInstance(project).getFacadeNames(FqName.ROOT, scope) val facades = KotlinAsJavaSupport.getInstance(project).getFacadeNames(FqName.ROOT, scope)
TestCase.assertTrue(
"Test should be runned under language version that supports released coroutines",
module.languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines)
)
for (facadeName in facades) { for (facadeName in facades) {
val ultraLightClass = UltraLightChecker.checkFacadeEquivalence(FqName(facadeName), scope, project) val ultraLightClass = UltraLightChecker.checkFacadeEquivalence(FqName(facadeName), scope, project)
if (ultraLightClass != null) { if (ultraLightClass != null) {
@@ -6,14 +6,18 @@
package org.jetbrains.kotlin.idea.perf package org.jetbrains.kotlin.idea.perf
import com.intellij.openapi.Disposable import com.intellij.openapi.Disposable
import com.intellij.openapi.module.Module
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Disposer
import com.intellij.psi.* import com.intellij.psi.*
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import com.intellij.testFramework.UsefulTestCase import com.intellij.testFramework.UsefulTestCase
import junit.framework.TestCase
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
import org.jetbrains.kotlin.asJava.classes.* import org.jetbrains.kotlin.asJava.classes.*
import org.jetbrains.kotlin.asJava.elements.KtLightNullabilityAnnotation import org.jetbrains.kotlin.asJava.elements.KtLightNullabilityAnnotation
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.load.kotlin.NON_EXISTENT_CLASS_NAME import org.jetbrains.kotlin.load.kotlin.NON_EXISTENT_CLASS_NAME
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtClassOrObject
@@ -34,6 +38,15 @@ object UltraLightChecker {
} }
} }
fun checkForReleaseCoroutine(sourceFileText: String, module: Module) {
if (sourceFileText.contains("//RELEASE_COROUTINE_NEEDED")) {
TestCase.assertTrue(
"Test should be runned under language version that supports released coroutines",
module.languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines)
)
}
}
fun allClasses(file: KtFile): List<KtClassOrObject> = fun allClasses(file: KtFile): List<KtClassOrObject> =
SyntaxTraverser.psiTraverser(file).filter(KtClassOrObject::class.java).toList() SyntaxTraverser.psiTraverser(file).filter(KtClassOrObject::class.java).toList()