[VISUALIZER] Add new visualizer tests processing codegen box test data

This commit is contained in:
Ivan Kylchik
2021-03-10 21:01:44 +03:00
committed by TeamCityServer
parent 427a1295c8
commit 0f70ec032d
4 changed files with 41063 additions and 0 deletions
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.test.runners.*
import org.jetbrains.kotlin.test.runners.codegen.*
import org.jetbrains.kotlin.test.runners.ir.AbstractFir2IrTextTest
import org.jetbrains.kotlin.test.runners.ir.AbstractIrTextTest
import org.jetbrains.kotlin.visualizer.AbstractVisualizerBlackBoxTest
import org.jetbrains.kotlin.visualizer.fir.AbstractFirVisualizerTest
import org.jetbrains.kotlin.visualizer.psi.AbstractPsiVisualizerTest
import org.junit.jupiter.api.parallel.Execution
@@ -177,5 +178,11 @@ fun generateJUnit5CompilerTests(args: Array<String>) {
model("uncommonCases/testFiles")
}
}
testGroup("compiler/visualizer/tests-gen", "compiler/testData") {
testClass<AbstractVisualizerBlackBoxTest>() {
model("codegen/box")
}
}
}
}
@@ -0,0 +1,79 @@
/*
* 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
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.test.TestRunner
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.builders.testConfiguration
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade
import org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade
import org.jetbrains.kotlin.test.model.DependencyKind
import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerTest
import org.jetbrains.kotlin.test.services.*
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator
import org.jetbrains.kotlin.test.services.impl.BackendKindExtractorImpl
import org.jetbrains.kotlin.test.services.impl.TemporaryDirectoryManagerImpl
import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsSourceFilesProvider
import org.jetbrains.kotlin.test.services.sourceProviders.CodegenHelpersSourceFilesProvider
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
abstract class AbstractVisualizerBlackBoxTest {
private val commonConfiguration: TestConfigurationBuilder.() -> Unit = {
assertions = JUnit5Assertions
testInfo = KotlinTestInfo("_undefined_", "_testUndefined_", setOf())
useAdditionalService<TemporaryDirectoryManager>(::TemporaryDirectoryManagerImpl)
useAdditionalService<BackendKindExtractor>(::BackendKindExtractorImpl)
useSourcePreprocessor(*AbstractKotlinCompilerTest.defaultPreprocessors.toTypedArray())
useDirectives(*AbstractKotlinCompilerTest.defaultDirectiveContainers.toTypedArray())
globalDefaults {
targetPlatform = JvmPlatforms.defaultJvmPlatform
dependencyKind = DependencyKind.Source
}
defaultDirectives {
+JvmEnvironmentConfigurationDirectives.WITH_STDLIB
}
useConfigurators(
::CommonEnvironmentConfigurator,
::JvmEnvironmentConfigurator,
)
useFrontendFacades(
::ClassicFrontendFacade,
::FirFrontendFacade
)
useAdditionalSourceProviders(
::AdditionalDiagnosticsSourceFilesProvider,
::CoroutineHelpersSourceFilesProvider,
::CodegenHelpersSourceFilesProvider
)
}
fun runTest(filePath: String) {
val psiConfiguration = testConfiguration(filePath) {
commonConfiguration()
globalDefaults { frontend = FrontendKinds.ClassicFrontend }
}
TestRunner(psiConfiguration).runTest(filePath)
val firConfiguration = testConfiguration(filePath) {
commonConfiguration()
globalDefaults { frontend = FrontendKinds.FIR }
}
TestRunner(firConfiguration).runTest(filePath)
VisualizerBlackBoxHandler(psiConfiguration.testServices, firConfiguration.testServices).process()
}
}
@@ -0,0 +1,35 @@
/*
* 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
import org.jetbrains.kotlin.compiler.visualizer.FirVisualizer
import org.jetbrains.kotlin.compiler.visualizer.PsiVisualizer
import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.assertions
import org.jetbrains.kotlin.test.services.dependencyProvider
class VisualizerBlackBoxHandler(private val psiTestServices: TestServices, private val firTestServices: TestServices) {
private val assertions = psiTestServices.assertions
fun process() {
val psiDependencyProvider = psiTestServices.dependencyProvider
val psiModule = psiDependencyProvider.getTestModule("main")
val psiArtifact = psiDependencyProvider.getArtifact(psiModule, FrontendKinds.ClassicFrontend)
val firDependencyProvider = firTestServices.dependencyProvider
val firModule = firDependencyProvider.getTestModule("main")
val firArtifact = firDependencyProvider.getArtifact(firModule, FrontendKinds.FIR)
val psiRenderer = psiArtifact.ktFiles.values.firstOrNull()?.let { PsiVisualizer(it, psiArtifact.analysisResult) } ?: return
val psiRenderResult = psiRenderer.render()
val firRenderer = firArtifact.firFiles.values.firstOrNull()?.let { FirVisualizer(it) } ?: return
val firRenderResult = firRenderer.render()
assertions.assertEquals(psiRenderResult, firRenderResult)
}
}