FIR IDE: add tests based on compiler spec tests for ide

This commit is contained in:
Ilya Kirillov
2021-05-27 17:47:02 +02:00
parent a8a31231f7
commit 335a2d7b71
6 changed files with 69 additions and 22 deletions
@@ -17,19 +17,23 @@ abstract class AbstractFirDiagnosticTestSpec : AbstractFirDiagnosticTest() {
override fun configure(builder: TestConfigurationBuilder) {
super.configure(builder)
with(builder) {
defaultDirectives {
+SPEC_HELPERS
+WITH_STDLIB
}
useAdditionalSourceProviders(::SpecHelpersSourceFilesProvider)
useAfterAnalysisCheckers(
::FirIdenticalChecker,
::FirFailingTestSuppressor,
)
useMetaTestConfigurators(::FirOldFrontendMetaConfigurator)
baseFirSpecDiagnosticTestConfiguration()
}
}
}
fun TestConfigurationBuilder.baseFirSpecDiagnosticTestConfiguration() {
defaultDirectives {
+SPEC_HELPERS
+WITH_STDLIB
}
useAdditionalSourceProviders(::SpecHelpersSourceFilesProvider)
useAfterAnalysisCheckers(
::FirIdenticalChecker,
::FirFailingTestSuppressor,
)
useMetaTestConfigurators(::FirOldFrontendMetaConfigurator)
}
@@ -34,6 +34,7 @@ dependencies {
testCompile(projectTests(":plugins:parcelize:parcelize-ide"))
testCompile(projectTests(":kotlinx-serialization-ide-plugin"))
testCompile(projectTests(":compiler:tests-common"))
testCompile(projectTests(":compiler:tests-spec"))
}
val generateIdeaTests by generator("org.jetbrains.kotlin.generators.tests.idea.GenerateTestsKt")
@@ -89,6 +89,7 @@ import org.jetbrains.kotlin.idea.fir.intentions.AbstractHLIntentionTest
import org.jetbrains.kotlin.idea.fir.low.level.api.*
import org.jetbrains.kotlin.idea.fir.low.level.api.diagnostic.AbstractDiagnosticTraversalCounterTest
import org.jetbrains.kotlin.idea.fir.low.level.api.diagnostic.AbstractFirContextCollectionTest
import org.jetbrains.kotlin.idea.fir.low.level.api.diagnostic.compiler.based.AbstractDiagnosisCompilerTestDataSpecTest
import org.jetbrains.kotlin.idea.fir.low.level.api.diagnostic.compiler.based.AbstractDiagnosisCompilerTestDataTest
import org.jetbrains.kotlin.idea.fir.low.level.api.file.structure.AbstractFileStructureAndOutOfBlockModificationTrackerConsistencyTest
import org.jetbrains.kotlin.idea.fir.low.level.api.file.structure.AbstractFileStructureTest
@@ -171,7 +172,9 @@ import org.jetbrains.kotlin.search.AbstractAnnotatedMembersSearchTest
import org.jetbrains.kotlin.search.AbstractInheritorsSearchTest
import org.jetbrains.kotlin.idea.fir.shortenRefs.AbstractFirShortenRefsTest
import org.jetbrains.kotlin.shortenRefs.AbstractShortenRefsTest
import org.jetbrains.kotlin.spec.utils.GeneralConfiguration
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.runners.AbstractFirDiagnosticTestSpec
import org.jetbrains.kotlin.tools.projectWizard.cli.AbstractProjectTemplateBuildFileGenerationTest
import org.jetbrains.kotlin.tools.projectWizard.cli.AbstractYamlBuildFileGenerationTest
import org.jetbrains.kotlin.tools.projectWizard.wizard.AbstractProjectTemplateNewWizardProjectImportTest
@@ -179,6 +182,7 @@ import org.jetbrains.kotlin.tools.projectWizard.wizard.AbstractYamlNewWizardProj
import org.jetbrains.kotlinx.serialization.idea.AbstractSerializationPluginIdeDiagnosticTest
import org.jetbrains.kotlinx.serialization.idea.AbstractSerializationQuickFixTest
import org.jetbrains.uast.test.kotlin.*
import org.jetbrains.kotlin.spec.utils.tasks.detectDirsWithTestsMapFileOnly
fun main(args: Array<String>) {
System.setProperty("java.awt.headless", "true")
@@ -1111,6 +1115,17 @@ fun main(args: Array<String>) {
}
}
testGroup("idea/idea-frontend-fir/idea-fir-low-level-api/tests", testDataRoot = GeneralConfiguration.SPEC_TESTDATA_PATH
) {
testClass<AbstractDiagnosisCompilerTestDataSpecTest> {
model(
"diagnostics",
excludeDirs = listOf("helpers") + detectDirsWithTestsMapFileOnly("diagnostics"),
excludedPattern = excludedFirTestdataPattern
)
}
}
testGroup("idea/idea-fir/tests", "idea") {
testClass<AbstractFirHighlightingTest> {
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.idea.fir.low.level.api.compiler.based
import org.jetbrains.kotlin.test.WrappedException
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.model.AfterAnalysisChecker
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives
import org.jetbrains.kotlin.test.services.TestServices
@@ -58,4 +59,16 @@ class IdeTestIgnoreHandler(testServices: TestServices) : AfterAnalysisChecker(te
}
}
fun TestConfigurationBuilder.addIdeTestIgnoreHandler() {
/* IdeTestIgnoreHandler should be executed after FirFailingTestSuppressor,
otherwise IdeTestIgnoreHandler will suppress exceptions and FirFailingTestSuppressor will throw error
saying that file .fir.fail exists but test passes
*/
forTestsMatching("*") {
useAfterAnalysisCheckers(
::IdeTestIgnoreHandler
)
}
}
class TestWithFirIdeIgnoreAnnotationPassesException(override val message: String) : IllegalStateException()
@@ -0,0 +1,21 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.idea.fir.low.level.api.diagnostic.compiler.based
import org.jetbrains.kotlin.idea.fir.low.level.api.compiler.based.AbstractCompilerBasedTest
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.runners.baseFirDiagnosticTestConfiguration
import org.jetbrains.kotlin.idea.fir.low.level.api.compiler.based.IdeTestIgnoreHandler
import org.jetbrains.kotlin.idea.fir.low.level.api.compiler.based.addIdeTestIgnoreHandler
import org.jetbrains.kotlin.test.runners.baseFirSpecDiagnosticTestConfiguration
abstract class AbstractDiagnosisCompilerTestDataSpecTest : AbstractCompilerBasedTest() {
override fun TestConfigurationBuilder.configureTest() {
baseFirDiagnosticTestConfiguration()
baseFirSpecDiagnosticTestConfiguration()
addIdeTestIgnoreHandler()
}
}
@@ -9,18 +9,11 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.compiler.based.AbstractCompil
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.runners.baseFirDiagnosticTestConfiguration
import org.jetbrains.kotlin.idea.fir.low.level.api.compiler.based.IdeTestIgnoreHandler
import org.jetbrains.kotlin.idea.fir.low.level.api.compiler.based.addIdeTestIgnoreHandler
abstract class AbstractDiagnosisCompilerTestDataTest : AbstractCompilerBasedTest() {
override fun TestConfigurationBuilder.configureTest() {
baseFirDiagnosticTestConfiguration()
/* IdeTestIgnoreHandler should be executed after FirFailingTestSuppressor,
otherwise IdeTestIgnoreHandler will suppress exceptions and FirFailingTestSuppressor will throw error
saying that file .fir.fail exists but test passes
*/
forTestsMatching("*") {
useAfterAnalysisCheckers(
::IdeTestIgnoreHandler
)
}
addIdeTestIgnoreHandler()
}
}