[Test] Split IR verification and IR dump to different handlers

This commit is contained in:
Dmitriy Novozhilov
2021-05-11 17:00:24 +03:00
committed by TeamCityServer
parent c9cd49d34f
commit 2530ae6b3d
4 changed files with 42 additions and 12 deletions
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.test.backend.handlers
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies
import org.jetbrains.kotlin.ir.IrVerifier
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrFile
@@ -67,11 +66,6 @@ class IrTextDumpHandler(testServices: TestServices) : AbstractIrHandler(testServ
if (EXTERNAL_FILE in testFile.directives) continue
val actualDump = irFile.dumpTreesFromLineNumber(lineNumber = 0, normalizeNames = true)
builder.append(actualDump)
verify(irFile)
val irFileCopy = irFile.deepCopyWithSymbols()
val dumpOfCopy = irFileCopy.dumpTreesFromLineNumber(lineNumber = 0, normalizeNames = true)
assertions.assertEquals(actualDump, dumpOfCopy) { "IR dump mismatch after deep copy with symbols" }
}
compareDumpsOfExternalClasses(module, info)
}
@@ -122,10 +116,6 @@ class IrTextDumpHandler(testServices: TestServices) : AbstractIrHandler(testServ
}
}
private fun verify(irFile: IrFile) {
IrVerifier(assertions).verifyWithAssert(irFile)
}
private val TestModule.dumpExtension: String
get() = computeDumpExtension(this, DUMP_EXTENSION)
}
@@ -0,0 +1,40 @@
/*
* 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.test.backend.handlers
import org.jetbrains.kotlin.ir.IrVerifier
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
import org.jetbrains.kotlin.ir.util.dumpTreesFromLineNumber
import org.jetbrains.kotlin.test.backend.handlers.IrTextDumpHandler.Companion.groupWithTestFiles
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.TestServices
class IrTreeVerifierHandler(testServices: TestServices) : AbstractIrHandler(testServices) {
override val directivesContainers: List<DirectivesContainer>
get() = listOf(CodegenTestDirectives)
override fun processModule(module: TestModule, info: IrBackendInput) {
if (CodegenTestDirectives.DUMP_IR !in module.directives) return
val irFiles = info.backendInput.irModuleFragment.files
val testFileToIrFile = irFiles.groupWithTestFiles(module)
for ((testFile, irFile) in testFileToIrFile) {
if (CodegenTestDirectives.EXTERNAL_FILE in testFile.directives) continue
IrVerifier(assertions).verifyWithAssert(irFile)
val actualDump = irFile.dumpTreesFromLineNumber(lineNumber = 0, normalizeNames = true)
val irFileCopy = irFile.deepCopyWithSymbols()
val dumpOfCopy = irFileCopy.dumpTreesFromLineNumber(lineNumber = 0, normalizeNames = true)
assertions.assertEquals(actualDump, dumpOfCopy) { "IR dump mismatch after deep copy with symbols" }
}
}
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {}
}
@@ -53,7 +53,7 @@ fun <R : ResultingArtifact.FrontendOutput<R>> TestConfigurationBuilder.commonCon
}
fun TestConfigurationBuilder.dumpHandlersForCodegenTest() {
useBackendHandlers(::IrTextDumpHandler)
useBackendHandlers(::IrTreeVerifierHandler, ::IrTextDumpHandler)
useArtifactsHandlers(::BytecodeListingHandler)
}
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor
import org.jetbrains.kotlin.test.backend.handlers.*
import org.jetbrains.kotlin.test.backend.ir.JvmIrBackendFacade
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.DUMP_IR
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.DUMP_KT_IR
@@ -70,6 +69,7 @@ abstract class AbstractIrTextTestBase(
useBackendHandlers(
::IrTextDumpHandler,
::IrTreeVerifierHandler,
::IrPrettyKotlinDumpHandler
)
}