[Test] Replace three fixed phases of tests with step system

Now each test is just a sequence of any number of different steps. There
  are two kinds of steps:
1. Run some facade
2. Run handlers of specific artifact kind

Through the test each module passed to each step (if it is compatible
  by kinds of artifacts)
This commit is contained in:
Dmitriy Novozhilov
2021-07-20 16:54:37 +03:00
committed by teamcityserver
parent ba48f80e53
commit a66f3d26fd
37 changed files with 900 additions and 559 deletions
@@ -8,8 +8,9 @@ package org.jetbrains.kotlin.visualizer
import org.jetbrains.kotlin.compiler.visualizer.FirVisualizer
import org.jetbrains.kotlin.compiler.visualizer.PsiVisualizer
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.test.Constructor
import org.jetbrains.kotlin.test.TestConfiguration
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
@@ -26,9 +27,14 @@ import org.jetbrains.kotlin.test.services.sourceProviders.CodegenHelpersSourceFi
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
abstract class AbstractVisualizerBlackBoxTest {
private val commonConfiguration: TestConfigurationBuilder.() -> Unit = {
private fun <O : ResultingArtifact.FrontendOutput<O>> createConfiguration(
filePath: String,
frontendKind: FrontendKind<O>,
frontendFacade: Constructor<FrontendFacade<O>>
): TestConfiguration = testConfiguration(filePath) {
assertions = JUnit5Assertions
testInfo = KotlinTestInfo("_undefined_", "_testUndefined_", setOf())
startingArtifactFactory = { ResultingArtifact.Source() }
useAdditionalService<TemporaryDirectoryManager>(::TemporaryDirectoryManagerImpl)
useAdditionalService<BackendKindExtractor>(::BackendKindExtractorImpl)
@@ -38,6 +44,7 @@ abstract class AbstractVisualizerBlackBoxTest {
globalDefaults {
targetPlatform = JvmPlatforms.defaultJvmPlatform
dependencyKind = DependencyKind.Source
frontend = frontendKind
}
defaultDirectives {
@@ -49,28 +56,20 @@ abstract class AbstractVisualizerBlackBoxTest {
::JvmEnvironmentConfigurator,
)
useFrontendFacades(
::ClassicFrontendFacade,
::FirFrontendFacade
)
useAdditionalSourceProviders(
::AdditionalDiagnosticsSourceFilesProvider,
::CoroutineHelpersSourceFilesProvider,
::CodegenHelpersSourceFilesProvider
)
}
private fun createConfiguration(filePath: String, frontend: FrontendKind<*>) = testConfiguration(filePath) {
commonConfiguration()
globalDefaults { this.frontend = frontend }
facadeStep(frontendFacade)
}
fun runTest(filePath: String) {
lateinit var psiRenderResult: String
lateinit var firRenderResult: String
val psiConfiguration = createConfiguration(filePath, FrontendKinds.ClassicFrontend)
val psiConfiguration = createConfiguration(filePath, FrontendKinds.ClassicFrontend, ::ClassicFrontendFacade)
TestRunner(psiConfiguration).runTest(filePath) { testConfiguration ->
testConfiguration.testServices.moduleStructure.modules.forEach { psiModule ->
val psiArtifact = testConfiguration.testServices.dependencyProvider.getArtifact(psiModule, FrontendKinds.ClassicFrontend)
@@ -79,7 +78,7 @@ abstract class AbstractVisualizerBlackBoxTest {
}
}
val firConfiguration = createConfiguration(filePath, FrontendKinds.FIR)
val firConfiguration = createConfiguration(filePath, FrontendKinds.FIR, ::FirFrontendFacade)
TestRunner(firConfiguration).runTest(filePath) { testConfiguration ->
testConfiguration.testServices.moduleStructure.modules.forEach { firModule ->
val firArtifact = testConfiguration.testServices.dependencyProvider.getArtifact(firModule, FrontendKinds.FIR)
@@ -33,11 +33,12 @@ abstract class AbstractVisualizerTest : AbstractKotlinCompilerTest() {
::CommonEnvironmentConfigurator,
::JvmEnvironmentConfigurator,
)
useFrontendFacades(
::FirFrontendFacade,
::ClassicFrontendFacade
)
useFrontendHandlers(handler)
// TODO
// useFrontendFacades(
// ::FirFrontendFacade,
// ::ClassicFrontendFacade
// )
// useFrontendHandlers(handler)
defaultDirectives {
+JvmEnvironmentConfigurationDirectives.WITH_STDLIB