[LL FIR] allow muting tests with MUTE_LL_FIR directive in all compiler-based tests

This commit is contained in:
Ilya Kirillov
2023-10-26 19:02:11 +02:00
committed by Space Team
parent 68235b978b
commit f26300a43e
3 changed files with 41 additions and 31 deletions
@@ -9,6 +9,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.LLFirCompiledBasedTestSuppressor
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.facades.LLFirAnalyzerFacadeFactory
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.FirLowLevelCompilerBasedTestConfigurator
import org.jetbrains.kotlin.analysis.project.structure.KtModule
@@ -59,6 +60,7 @@ abstract class AbstractCompilerBasedTestForFir : AbstractCompilerBasedTest() {
useMetaTestConfigurators(::LLFirMetaTestConfigurator)
useAfterAnalysisCheckers(::LLFirIdenticalChecker)
useAfterAnalysisCheckers(::LLFirDivergenceCommentChecker)
useAfterAnalysisCheckers(::LLFirCompiledBasedTestSuppressor)
}
open fun TestConfigurationBuilder.configureTest() {}
@@ -9,12 +9,9 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based.AbstractCo
import org.jetbrains.kotlin.test.InTextDirectivesUtils
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.TestConfiguration
import org.jetbrains.kotlin.test.WrappedException
import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.builders.firHandlersStep
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
import org.jetbrains.kotlin.test.frontend.fir.handlers.FirCfgDumpHandler
import org.jetbrains.kotlin.test.frontend.fir.handlers.FirDiagnosticsHandler
import org.jetbrains.kotlin.test.frontend.fir.handlers.FirDumpHandler
@@ -23,10 +20,8 @@ import org.jetbrains.kotlin.test.frontend.fir.handlers.FirScopeDumpHandler
import org.jetbrains.kotlin.test.model.AfterAnalysisChecker
import org.jetbrains.kotlin.test.runners.codegen.baseFirBlackBoxCodegenTestDirectivesConfiguration
import org.jetbrains.kotlin.test.runners.codegen.configureModernJavaWhenNeeded
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator
import org.jetbrains.kotlin.test.services.moduleStructure
import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsSourceFilesProvider
import org.jetbrains.kotlin.test.services.sourceProviders.CodegenHelpersSourceFilesProvider
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
@@ -62,7 +57,7 @@ abstract class AbstractLLFirBlackBoxCodegenBasedTestBase : AbstractCompilerBased
)
}
useAfterAnalysisCheckers(::LLFirBlackBoxCodegenSuppressor, ::BlackBoxCodegenSuppressor)
useAfterAnalysisCheckers(::BlackBoxCodegenSuppressor)
}
override fun shouldSkipTest(filePath: String, configuration: TestConfiguration): Boolean {
@@ -78,28 +73,4 @@ abstract class AbstractLLFirBlackBoxCodegenBasedTestBase : AbstractCompilerBased
InTextDirectivesUtils.IGNORE_BACKEND_K2_DIRECTIVE_PREFIX,
)
}
}
private class LLFirBlackBoxCodegenSuppressor(testServices: TestServices) : AfterAnalysisChecker(testServices) {
override val directiveContainers: List<DirectivesContainer> get() = listOf(Companion)
override fun suppressIfNeeded(failedAssertions: List<WrappedException>): List<WrappedException> {
if (MUTE_LL_FIR !in testServices.moduleStructure.allDirectives) return failedAssertions
return if (failedAssertions.isEmpty()) {
listOf(
AssertionError(
"Test contains $MUTE_LL_FIR directive but no errors was reported. Please remove directive",
).wrap()
)
} else {
emptyList()
}
}
private companion object : SimpleDirectivesContainer() {
val MUTE_LL_FIR by stringDirective(
"Temporary mute Low Level FIR implementation due to some error. YT ticket must be provided"
)
}
}
}
@@ -0,0 +1,37 @@
/*
* Copyright 2010-2023 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.analysis.low.level.api.fir.diagnostic.compiler.based
import org.jetbrains.kotlin.test.WrappedException
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
import org.jetbrains.kotlin.test.model.AfterAnalysisChecker
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.moduleStructure
class LLFirCompiledBasedTestSuppressor(testServices: TestServices) : AfterAnalysisChecker(testServices) {
override val directiveContainers: List<DirectivesContainer> get() = listOf(Companion)
override fun suppressIfNeeded(failedAssertions: List<WrappedException>): List<WrappedException> {
if (MUTE_LL_FIR !in testServices.moduleStructure.allDirectives) return failedAssertions
return if (failedAssertions.isEmpty()) {
listOf(
AssertionError(
"Test contains $MUTE_LL_FIR directive but no errors was reported. Please remove directive",
).wrap()
)
} else {
emptyList()
}
}
private companion object : SimpleDirectivesContainer() {
val MUTE_LL_FIR by stringDirective(
"Temporary mute Low Level FIR implementation due to some error. YT ticket must be provided"
)
}
}