From 8b40005b0c9f5f20f142d45c2461d6236bacfcef Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Thu, 27 Jun 2019 12:46:02 +0300 Subject: [PATCH] UL classes flaky tests partially fix #KT-32276 - Reduce affected tests count from 117 cases to 2 cases --- .../asJava/ultraLightClasses/coroutines.kt | 1 + .../asJava/ultraLightFacades/coroutines.kt | 2 +- .../classes/AbstractUltraLightClassLoadingTest.kt | 13 ++++--------- .../classes/AbstractUltraLightClassSanityTest.kt | 11 +++-------- .../AbstractUltraLightFacadeClassLoadingTest.kt | 15 +++++---------- .../kotlin/idea/perf/UltraLightChecker.kt | 13 +++++++++++++ 6 files changed, 27 insertions(+), 28 deletions(-) diff --git a/compiler/testData/asJava/ultraLightClasses/coroutines.kt b/compiler/testData/asJava/ultraLightClasses/coroutines.kt index 4472c5cda0a..afec85c8808 100644 --- a/compiler/testData/asJava/ultraLightClasses/coroutines.kt +++ b/compiler/testData/asJava/ultraLightClasses/coroutines.kt @@ -1,3 +1,4 @@ +//RELEASE_COROUTINE_NEEDED class Foo { suspend fun doSomething(foo: Foo): Bar {} } diff --git a/compiler/testData/asJava/ultraLightFacades/coroutines.kt b/compiler/testData/asJava/ultraLightFacades/coroutines.kt index a09b585db76..4e449475b24 100644 --- a/compiler/testData/asJava/ultraLightFacades/coroutines.kt +++ b/compiler/testData/asJava/ultraLightFacades/coroutines.kt @@ -1,4 +1,4 @@ - +//RELEASE_COROUTINE_NEEDED suspend fun doSomething(foo: String): Int {} fun async(block: suspend () -> T) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightClassLoadingTest.kt b/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightClassLoadingTest.kt index d818b50ddc2..b7dbe449bf0 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightClassLoadingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightClassLoadingTest.kt @@ -6,11 +6,8 @@ package org.jetbrains.kotlin.asJava.classes import com.intellij.testFramework.LightProjectDescriptor -import junit.framework.TestCase import org.jetbrains.kotlin.asJava.LightClassGenerationSupport -import org.jetbrains.kotlin.config.LanguageFeature 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.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.psi.KtClassOrObject @@ -22,7 +19,10 @@ abstract class AbstractUltraLightClassLoadingTest : KotlinLightCodeInsightFixtur override fun getProjectDescriptor(): LightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE 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")) if (expectedTextFile.exists()) { @@ -41,11 +41,6 @@ abstract class AbstractUltraLightClassLoadingTest : KotlinLightCodeInsightFixtur 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)) { val ultraLightClass = UltraLightChecker.checkClassEquivalence(ktClass) if (ultraLightClass != null) { diff --git a/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightClassSanityTest.kt b/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightClassSanityTest.kt index a6455b983f9..34c1a502c2e 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightClassSanityTest.kt +++ b/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightClassSanityTest.kt @@ -6,10 +6,7 @@ package org.jetbrains.kotlin.asJava.classes 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.project.languageVersionSettings import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor 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 } - val file = myFixture.addFileToProject(testDataPath, ioFile.readText()) as KtFile + val sourceText = ioFile.readText() + val file = myFixture.addFileToProject(testDataPath, sourceText) as KtFile - TestCase.assertTrue( - "Test should be runned under language version that supports released coroutines", - module.languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines) - ) + UltraLightChecker.checkForReleaseCoroutine(sourceText, module) UltraLightChecker.checkClassEquivalence(file) } diff --git a/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightFacadeClassLoadingTest.kt b/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightFacadeClassLoadingTest.kt index 37c0bbc4049..7c1b6eb4a09 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightFacadeClassLoadingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/asJava/classes/AbstractUltraLightFacadeClassLoadingTest.kt @@ -7,11 +7,8 @@ package org.jetbrains.kotlin.asJava.classes import com.intellij.psi.search.GlobalSearchScope import com.intellij.testFramework.LightProjectDescriptor -import junit.framework.TestCase import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport -import org.jetbrains.kotlin.config.LanguageFeature 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.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.kdoc.psi.api.KDoc @@ -24,21 +21,19 @@ abstract class AbstractUltraLightFacadeClassTest : KotlinLightCodeInsightFixture override fun getProjectDescriptor(): LightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE 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" - if(File(additionalFilePath).exists()) { + if (File(additionalFilePath).exists()) { myFixture.addFileToProject(additionalFilePath.replaceFirst(".kt.1", "1.kt"), File(additionalFilePath).readText()) } val scope = GlobalSearchScope.allScope(project) 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) { val ultraLightClass = UltraLightChecker.checkFacadeEquivalence(FqName(facadeName), scope, project) if (ultraLightClass != null) { diff --git a/idea/tests/org/jetbrains/kotlin/idea/perf/UltraLightChecker.kt b/idea/tests/org/jetbrains/kotlin/idea/perf/UltraLightChecker.kt index 0d0ab504c96..20b186e27ba 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/perf/UltraLightChecker.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/perf/UltraLightChecker.kt @@ -6,14 +6,18 @@ package org.jetbrains.kotlin.idea.perf import com.intellij.openapi.Disposable +import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project import com.intellij.openapi.util.Disposer import com.intellij.psi.* import com.intellij.psi.search.GlobalSearchScope import com.intellij.testFramework.UsefulTestCase +import junit.framework.TestCase import org.jetbrains.kotlin.asJava.LightClassGenerationSupport import org.jetbrains.kotlin.asJava.classes.* 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.name.FqName 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 = SyntaxTraverser.psiTraverser(file).filter(KtClassOrObject::class.java).toList()