[Test] Allow facades to return null which indicates that facade can't complete it's job

This is needed for cases when test pipeline assumes that some part of
  pipeline may be unavailable because of errors on previous stage.

For example, this may occur in some test which check something on IR
  but contains backend facade for compiling binary dependencies. In
  this case testdata with frontend errors is allowed if test has only
  one module which should not be compiled
This commit is contained in:
Dmitriy Novozhilov
2021-01-18 15:44:46 +03:00
committed by TeamCityServer
parent 6a7cd0c811
commit acb6d2e196
2 changed files with 7 additions and 7 deletions
@@ -98,7 +98,7 @@ class TestRunner(private val testConfiguration: TestConfiguration) {
if (!frontendKind.shouldRunAnalysis) return if (!frontendKind.shouldRunAnalysis) return
val frontendArtifacts: ResultingArtifact.FrontendOutput<*> = testConfiguration.getFacade(SourcesKind, frontendKind) val frontendArtifacts: ResultingArtifact.FrontendOutput<*> = testConfiguration.getFacade(SourcesKind, frontendKind)
.transform(module, sourcesArtifact).also { dependencyProvider.registerArtifact(module, it) } .transform(module, sourcesArtifact)?.also { dependencyProvider.registerArtifact(module, it) } ?: return
val frontendHandlers: List<AnalysisHandler<*>> = testConfiguration.getHandlers(frontendKind) val frontendHandlers: List<AnalysisHandler<*>> = testConfiguration.getHandlers(frontendKind)
for (frontendHandler in frontendHandlers) { for (frontendHandler in frontendHandlers) {
withAssertionCatching { withAssertionCatching {
@@ -110,7 +110,7 @@ class TestRunner(private val testConfiguration: TestConfiguration) {
if (!backendKind.shouldRunAnalysis) return if (!backendKind.shouldRunAnalysis) return
val backendInputInfo = testConfiguration.getFacade(frontendKind, backendKind) val backendInputInfo = testConfiguration.getFacade(frontendKind, backendKind)
.hackyTransform(module, frontendArtifacts).also { dependencyProvider.registerArtifact(module, it) } .hackyTransform(module, frontendArtifacts)?.also { dependencyProvider.registerArtifact(module, it) } ?: return
val backendHandlers: List<AnalysisHandler<*>> = testConfiguration.getHandlers(backendKind) val backendHandlers: List<AnalysisHandler<*>> = testConfiguration.getHandlers(backendKind)
for (backendHandler in backendHandlers) { for (backendHandler in backendHandlers) {
@@ -120,9 +120,9 @@ class TestRunner(private val testConfiguration: TestConfiguration) {
for (artifactKind in moduleStructure.getTargetArtifactKinds(module)) { for (artifactKind in moduleStructure.getTargetArtifactKinds(module)) {
if (!artifactKind.shouldRunAnalysis) continue if (!artifactKind.shouldRunAnalysis) continue
val binaryArtifact = testConfiguration.getFacade(backendKind, artifactKind) val binaryArtifact = testConfiguration.getFacade(backendKind, artifactKind)
.hackyTransform(module, backendInputInfo).also { .hackyTransform(module, backendInputInfo)?.also {
dependencyProvider.registerArtifact(module, it) dependencyProvider.registerArtifact(module, it)
} } ?: return
val binaryHandlers: List<AnalysisHandler<*>> = testConfiguration.getHandlers(artifactKind) val binaryHandlers: List<AnalysisHandler<*>> = testConfiguration.getHandlers(artifactKind)
for (binaryHandler in binaryHandlers) { for (binaryHandler in binaryHandlers) {
@@ -167,7 +167,7 @@ private fun <A : ResultingArtifact<A>> AnalysisHandler<A>.processModule(module:
private fun AbstractTestFacade<*, *>.hackyTransform( private fun AbstractTestFacade<*, *>.hackyTransform(
module: TestModule, module: TestModule,
artifact: ResultingArtifact<*> artifact: ResultingArtifact<*>
): ResultingArtifact<*> { ): ResultingArtifact<*>? {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
return (this as AbstractTestFacade<ResultingArtifact.Source, ResultingArtifact.Source>) return (this as AbstractTestFacade<ResultingArtifact.Source, ResultingArtifact.Source>)
.transform(module, artifact as ResultingArtifact<ResultingArtifact.Source>) .transform(module, artifact as ResultingArtifact<ResultingArtifact.Source>)
@@ -176,7 +176,7 @@ private fun AbstractTestFacade<*, *>.hackyTransform(
private fun <I : ResultingArtifact<I>, O : ResultingArtifact<O>> AbstractTestFacade<I, O>.transform( private fun <I : ResultingArtifact<I>, O : ResultingArtifact<O>> AbstractTestFacade<I, O>.transform(
module: TestModule, module: TestModule,
inputArtifact: ResultingArtifact<I> inputArtifact: ResultingArtifact<I>
): O { ): O? {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
return transform(module, inputArtifact as I) return transform(module, inputArtifact as I)
} }
@@ -13,7 +13,7 @@ abstract class AbstractTestFacade<I : ResultingArtifact<I>, O : ResultingArtifac
abstract val inputKind: TestArtifactKind<I> abstract val inputKind: TestArtifactKind<I>
abstract val outputKind: TestArtifactKind<O> abstract val outputKind: TestArtifactKind<O>
abstract fun transform(module: TestModule, inputArtifact: I): O abstract fun transform(module: TestModule, inputArtifact: I): O?
open val additionalServices: List<ServiceRegistrationData> open val additionalServices: List<ServiceRegistrationData>
get() = emptyList() get() = emptyList()