Extract output handlers in visualiser's tests to separate files

This commit is contained in:
Ivan Kylchik
2021-02-25 00:36:28 +03:00
committed by TeamCityServer
parent 6a439ad186
commit de351d8bd3
4 changed files with 69 additions and 58 deletions
@@ -5,45 +5,14 @@
package org.jetbrains.kotlin.visualizer.fir
import org.jetbrains.kotlin.compiler.visualizer.FirVisualizer
import org.jetbrains.kotlin.test.Constructor
import org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade
import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact
import org.jetbrains.kotlin.test.frontend.fir.handlers.FirAnalysisHandler
import org.jetbrains.kotlin.test.model.*
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.visualizer.AbstractVisualizerTest
import org.jetbrains.kotlin.visualizer.VisualizerDirectives
import java.io.File
abstract class AbstractFirVisualizerTest : AbstractVisualizerTest() {
override val frontendKind: FrontendKind<*> = FrontendKinds.FIR
override val frontendFacade: Constructor<FrontendFacade<*>> = ::FirFrontendFacade
override val handler: Constructor<FrontendOutputHandler<*>> = ::FirOutputHandler
override val handler: Constructor<FrontendOutputHandler<*>> = {
object : FirAnalysisHandler(it) {
override fun processModule(module: TestModule, info: FirOutputArtifact) {
val renderer = FirVisualizer(info.firFiles.values.first())
val firRenderResult = renderer.render()
val replaceFrom = module.directives[VisualizerDirectives.TEST_FILE_PATH].first()
val replaceTo = module.directives[VisualizerDirectives.EXPECTED_FILE_PATH].first()
val path = module.files.first().originalFile.absolutePath.replace(replaceFrom, replaceTo)
val expectedText = File(path).readLines()
if (expectedText[0].startsWith("// FIR_IGNORE")) {
assertions.assertFalse(expectedText.drop(1).joinToString("\n") == firRenderResult.trim()) {
"Files are identical, please delete ignore directive"
}
return
}
assertions.assertEqualsToFile(File(path), firRenderResult) { text ->
text.replace("// FIR_IGNORE\n", "")
}
}
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {
}
}
}
}
@@ -0,0 +1,37 @@
/*
* 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.visualizer.fir
import org.jetbrains.kotlin.compiler.visualizer.FirVisualizer
import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact
import org.jetbrains.kotlin.test.frontend.fir.handlers.FirAnalysisHandler
import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.visualizer.VisualizerDirectives
import java.io.File
internal class FirOutputHandler(testServices: TestServices) : FirAnalysisHandler(testServices) {
override fun processModule(module: TestModule, info: FirOutputArtifact) {
val renderer = FirVisualizer(info.firFiles.values.first())
val firRenderResult = renderer.render()
val replaceFrom = module.directives[VisualizerDirectives.TEST_FILE_PATH].first()
val replaceTo = module.directives[VisualizerDirectives.EXPECTED_FILE_PATH].first()
val path = module.files.first().originalFile.absolutePath.replace(replaceFrom, replaceTo)
val expectedText = File(path).readLines()
if (expectedText[0].startsWith("// FIR_IGNORE")) {
assertions.assertFalse(expectedText.drop(1).joinToString("\n") == firRenderResult.trim()) {
"Files are identical, please delete ignore directive"
}
return
}
assertions.assertEqualsToFile(File(path), firRenderResult) { text ->
text.replace("// FIR_IGNORE\n", "")
}
}
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {}
}
@@ -5,38 +5,13 @@
package org.jetbrains.kotlin.visualizer.psi
import org.jetbrains.kotlin.compiler.visualizer.PsiVisualizer
import org.jetbrains.kotlin.test.Constructor
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact
import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicFrontendAnalysisHandler
import org.jetbrains.kotlin.test.model.*
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.visualizer.AbstractVisualizerTest
import org.jetbrains.kotlin.visualizer.VisualizerDirectives
import java.io.File
abstract class AbstractPsiVisualizerTest : AbstractVisualizerTest() {
override val frontendKind: FrontendKind<*> = FrontendKinds.ClassicFrontend
override val frontendFacade: Constructor<FrontendFacade<*>> = ::ClassicFrontendFacade
override val handler: Constructor<FrontendOutputHandler<*>> = {
object : ClassicFrontendAnalysisHandler(it) {
override fun processModule(module: TestModule, info: ClassicFrontendOutputArtifact) {
val renderer = PsiVisualizer(info.ktFiles.values.first(), info.analysisResult)
val psiRenderResult = renderer.render()
val replaceFrom = module.directives[VisualizerDirectives.TEST_FILE_PATH].first()
val replaceTo = module.directives[VisualizerDirectives.EXPECTED_FILE_PATH].first()
val path = module.files.first().originalFile.absolutePath.replace(replaceFrom, replaceTo)
assertions.assertEqualsToFile(File(path), psiRenderResult) { text ->
text.replace("// FIR_IGNORE\n", "")
}
}
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {
}
}
}
override val handler: Constructor<FrontendOutputHandler<*>> = ::PsiOutputHandler
}
@@ -0,0 +1,30 @@
/*
* 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.visualizer.psi
import org.jetbrains.kotlin.compiler.visualizer.PsiVisualizer
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact
import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicFrontendAnalysisHandler
import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.visualizer.VisualizerDirectives
import java.io.File
internal class PsiOutputHandler(testServices: TestServices) : ClassicFrontendAnalysisHandler(testServices) {
override fun processModule(module: TestModule, info: ClassicFrontendOutputArtifact) {
val renderer = PsiVisualizer(info.ktFiles.values.first(), info.analysisResult)
val psiRenderResult = renderer.render()
val replaceFrom = module.directives[VisualizerDirectives.TEST_FILE_PATH].first()
val replaceTo = module.directives[VisualizerDirectives.EXPECTED_FILE_PATH].first()
val path = module.files.first().originalFile.absolutePath.replace(replaceFrom, replaceTo)
assertions.assertEqualsToFile(File(path), psiRenderResult) { text ->
text.replace("// FIR_IGNORE\n", "")
}
}
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {}
}