Permit silencing FIR tests with results depending on configuration

This commit is contained in:
pyos
2021-07-29 15:53:43 +02:00
committed by TeamCityServer
parent 33251f6d50
commit cdc0f36859
2 changed files with 17 additions and 15 deletions
@@ -0,0 +1 @@
INCONSISTENT_DIAGNOSTICS
@@ -10,25 +10,26 @@ import org.jetbrains.kotlin.test.model.AfterAnalysisChecker
import org.jetbrains.kotlin.test.model.FrontendKinds import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.moduleStructure import org.jetbrains.kotlin.test.services.moduleStructure
import org.jetbrains.kotlin.test.utils.firTestDataFile
class FirFailingTestSuppressor(testServices: TestServices) : AfterAnalysisChecker(testServices) { class FirFailingTestSuppressor(testServices: TestServices) : AfterAnalysisChecker(testServices) {
override fun suppressIfNeeded(failedAssertions: List<WrappedException>): List<WrappedException> { override fun suppressIfNeeded(failedAssertions: List<WrappedException>): List<WrappedException> {
val testFile = testServices.moduleStructure.originalTestDataFiles.first() val testFile = testServices.moduleStructure.originalTestDataFiles.first().firTestDataFile
val failFile = testFile.parentFile.resolve("${testFile.nameWithoutExtension}.fail") val failFile = testFile.parentFile.resolve("${testFile.nameWithoutExtension}.fail").takeIf { it.exists() }
val exceptionFromFir = ?: return failedAssertions
failedAssertions.firstOrNull { val failReason = failFile.readText().trim()
when (it) { val hasFail = failedAssertions.any {
is WrappedException.FromFacade -> it.facade is FirFrontendFacade when (it) {
is WrappedException.FromHandler -> it.handler.artifactKind == FrontendKinds.FIR is WrappedException.FromFacade -> it.facade is FirFrontendFacade
else -> false is WrappedException.FromHandler -> it.handler.artifactKind == FrontendKinds.FIR
} else -> false
} }
return when {
failFile.exists() && exceptionFromFir != null -> emptyList()
failFile.exists() && exceptionFromFir == null -> {
failedAssertions + AssertionError("Fail file exists but no exception was throw. Please remove ${failFile.name}").wrap()
}
else -> failedAssertions
} }
if (hasFail || failReason == INCONSISTENT_DIAGNOSTICS) return emptyList()
return failedAssertions + AssertionError("Fail file exists but no exception was thrown. Please remove ${failFile.name}").wrap()
}
companion object {
const val INCONSISTENT_DIAGNOSTICS = "INCONSISTENT_DIAGNOSTICS"
} }
} }