From 3bd3545a05e5ad486e0c89d7a83e6d8ad91b96c7 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Fri, 4 Dec 2020 13:16:56 +0300 Subject: [PATCH] [TEST] Add abstract test runners for some of compiler test in new infrastructure This commit includes runners for FE 1.0 and FIR diagnostics tests and JVM black box tests for old backend --- .../test/runners/AbstractDiagnosticTest.kt | 65 +++++++++++++++++ .../AbstractDiagnosticUsingJavacTest.kt | 22 ++++++ .../test/runners/AbstractFirDiagnosticTest.kt | 70 +++++++++++++++++++ .../runners/AbstractKotlinCompilerTest.kt | 54 ++++++++++++++ 4 files changed, 211 insertions(+) create mode 100644 compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticTest.kt create mode 100644 compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticUsingJavacTest.kt create mode 100644 compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractFirDiagnosticTest.kt create mode 100644 compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractKotlinCompilerTest.kt diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticTest.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticTest.kt new file mode 100644 index 00000000000..9b304e7dd55 --- /dev/null +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticTest.kt @@ -0,0 +1,65 @@ +/* + * Copyright 2010-2020 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.runners + +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING +import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.WITH_STDLIB +import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade +import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler +import org.jetbrains.kotlin.test.frontend.classic.handlers.DeclarationsDumpHandler +import org.jetbrains.kotlin.test.frontend.classic.handlers.FirTestDataConsistencyHandler +import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaInfoProcessor +import org.jetbrains.kotlin.test.model.BackendKind +import org.jetbrains.kotlin.test.model.DependencyKind +import org.jetbrains.kotlin.test.model.FrontendKinds +import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider +import org.jetbrains.kotlin.test.services.CoroutineHelpersSourceFilesProvider +import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator +import org.jetbrains.kotlin.test.services.configuration.ScriptingEnvironmentConfigurator + +abstract class AbstractDiagnosticTest : AbstractKotlinCompilerTest() { + override fun TestConfigurationBuilder.configuration() { + globalDefaults { + frontend = FrontendKinds.ClassicFrontend + backend = BackendKind.NoBackend + targetPlatform = JvmPlatforms.defaultJvmPlatform + dependencyKind = DependencyKind.Source + } + + defaultDirectives { + +USE_PSI_CLASS_FILES_READING + } + + enableMetaInfoHandler() + + useConfigurators( + ::JvmEnvironmentConfigurator, + ::ScriptingEnvironmentConfigurator + ) + + useMetaInfoProcessors(::OldNewInferenceMetaInfoProcessor) + useAdditionalSourceProviders( + ::AdditionalDiagnosticsSourceFilesProvider, + ::CoroutineHelpersSourceFilesProvider, + ) + + useFrontendFacades(::ClassicFrontendFacade) + useFrontendHandlers( + ::DeclarationsDumpHandler, + ::ClassicDiagnosticsHandler, + ) + + useAfterAnalysisCheckers(::FirTestDataConsistencyHandler) + + forTestsMatching("compiler/testData/diagnostics/testsWithStdLib/*") { + defaultDirectives { + +WITH_STDLIB + } + } + } +} diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticUsingJavacTest.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticUsingJavacTest.kt new file mode 100644 index 00000000000..6c9f9bb2a28 --- /dev/null +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticUsingJavacTest.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2010-2020 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.runners + +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives +import org.jetbrains.kotlin.test.frontend.classic.handlers.DiagnosticTestWithJavacSkipConfigurator + +abstract class AbstractDiagnosticUsingJavacTest : AbstractDiagnosticTest() { + override fun configure(builder: TestConfigurationBuilder) { + super.configure(builder) + builder.apply { + defaultDirectives { + +JvmEnvironmentConfigurationDirectives.USE_JAVAC + } + useMetaTestConfigurators(::DiagnosticTestWithJavacSkipConfigurator) + } + } +} diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractFirDiagnosticTest.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractFirDiagnosticTest.kt new file mode 100644 index 00000000000..1c194a73391 --- /dev/null +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractFirDiagnosticTest.kt @@ -0,0 +1,70 @@ +/* + * Copyright 2010-2020 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.runners + +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives +import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives +import org.jetbrains.kotlin.test.frontend.fir.FirFailingTestSuppressor +import org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade +import org.jetbrains.kotlin.test.frontend.fir.handlers.* +import org.jetbrains.kotlin.test.model.BackendKind +import org.jetbrains.kotlin.test.model.DependencyKind +import org.jetbrains.kotlin.test.model.FrontendKinds +import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider +import org.jetbrains.kotlin.test.services.CoroutineHelpersSourceFilesProvider +import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator +import org.jetbrains.kotlin.test.services.fir.FirOldFrontendMetaConfigurator + +abstract class AbstractFirDiagnosticTest : AbstractKotlinCompilerTest() { + override fun TestConfigurationBuilder.configuration() { + globalDefaults { + frontend = FrontendKinds.FIR + backend = BackendKind.NoBackend + targetPlatform = JvmPlatforms.defaultJvmPlatform + dependencyKind = DependencyKind.Source + } + + enableMetaInfoHandler() + + useConfigurators(::JvmEnvironmentConfigurator) + useAdditionalSourceProviders( + ::AdditionalDiagnosticsSourceFilesProvider, + ::CoroutineHelpersSourceFilesProvider, + ) + useFrontendFacades(::FirFrontendFacade) + useFrontendHandlers( + ::FirDiagnosticsHandler, + ::FirDumpHandler, + ::FirCfgDumpHandler, + ::FirCfgConsistencyHandler, + ) + + forTestsMatching("compiler/testData/diagnostics/*") { + useAfterAnalysisCheckers( + ::FirIdenticalChecker, + ::FirFailingTestSuppressor, + ) + useMetaTestConfigurators(::FirOldFrontendMetaConfigurator) + } + + forTestsMatching("compiler/fir/analysis-tests/testData/*") { + defaultDirectives { + +FirDiagnosticsDirectives.FIR_DUMP + } + } + + forTestsMatching( + "compiler/testData/diagnostics/testsWithStdLib/*" or + "compiler/fir/analysis-tests/testData/resolveWithStdlib/*" + ) { + defaultDirectives { + +JvmEnvironmentConfigurationDirectives.WITH_STDLIB + } + } + } +} diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractKotlinCompilerTest.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractKotlinCompilerTest.kt new file mode 100644 index 00000000000..89db141e50f --- /dev/null +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractKotlinCompilerTest.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2010-2020 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.runners + +import com.intellij.testFramework.TestDataFile +import org.jetbrains.kotlin.test.builders.Constructor +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.builders.testRunner +import org.jetbrains.kotlin.test.directives.ConfigurationDirectives +import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives +import org.jetbrains.kotlin.test.preprocessors.MetaInfosCleanupPreprocessor +import org.jetbrains.kotlin.test.services.JUnit5Assertions +import org.jetbrains.kotlin.test.services.SourceFilePreprocessor +import org.jetbrains.kotlin.types.AbstractTypeChecker +import org.jetbrains.kotlin.types.FlexibleTypeImpl + +abstract class AbstractKotlinCompilerTest { + companion object { + val defaultDirectiveContainers = listOf( + ConfigurationDirectives, + LanguageSettingsDirectives + ) + + val defaultPreprocessors: List> = listOf( + ::MetaInfosCleanupPreprocessor + ) + } + + private val configuration: TestConfigurationBuilder.() -> Unit = { + assertions = JUnit5Assertions + useSourcePreprocessor(*defaultPreprocessors.toTypedArray()) + useDirectives(*defaultDirectiveContainers.toTypedArray()) + configureDebugFlags() + configure(this) + } + + private fun configureDebugFlags() { + AbstractTypeChecker.RUN_SLOW_ASSERTIONS = true + FlexibleTypeImpl.RUN_SLOW_ASSERTIONS = true + } + + abstract fun TestConfigurationBuilder.configuration() + + open fun configure(builder: TestConfigurationBuilder) { + builder.configuration() + } + + fun runTest(@TestDataFile filePath: String) { + testRunner(filePath, configuration).runTest(filePath) + } +}