[Test] Support running Fir/Native diagnostic tests with backend
^KT-64393
This commit is contained in:
committed by
Space Team
parent
b3efc05728
commit
b0dc5b8a93
+54
-23
@@ -6,13 +6,19 @@
|
|||||||
package org.jetbrains.kotlin.konan.test.diagnostics
|
package org.jetbrains.kotlin.konan.test.diagnostics
|
||||||
|
|
||||||
import org.jetbrains.kotlin.konan.target.HostManager
|
import org.jetbrains.kotlin.konan.target.HostManager
|
||||||
|
import org.jetbrains.kotlin.konan.test.Fir2IrNativeResultsConverter
|
||||||
|
import org.jetbrains.kotlin.konan.test.FirNativeKlibBackendFacade
|
||||||
import org.jetbrains.kotlin.platform.konan.NativePlatforms
|
import org.jetbrains.kotlin.platform.konan.NativePlatforms
|
||||||
import org.jetbrains.kotlin.test.Constructor
|
import org.jetbrains.kotlin.test.Constructor
|
||||||
import org.jetbrains.kotlin.test.FirParser
|
import org.jetbrains.kotlin.test.FirParser
|
||||||
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
||||||
|
import org.jetbrains.kotlin.test.TargetBackend
|
||||||
|
import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor
|
||||||
|
import org.jetbrains.kotlin.test.backend.handlers.KlibBackendDiagnosticsHandler
|
||||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||||
import org.jetbrains.kotlin.test.builders.classicFrontendHandlersStep
|
import org.jetbrains.kotlin.test.builders.classicFrontendHandlersStep
|
||||||
import org.jetbrains.kotlin.test.builders.firHandlersStep
|
import org.jetbrains.kotlin.test.builders.firHandlersStep
|
||||||
|
import org.jetbrains.kotlin.test.builders.klibArtifactsHandlersStep
|
||||||
import org.jetbrains.kotlin.test.directives.*
|
import org.jetbrains.kotlin.test.directives.*
|
||||||
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives.WITH_PLATFORM_LIBS
|
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives.WITH_PLATFORM_LIBS
|
||||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade
|
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade
|
||||||
@@ -38,16 +44,19 @@ import java.io.File
|
|||||||
abstract class AbstractDiagnosticsNativeTestBase<R : ResultingArtifact.FrontendOutput<R>> : AbstractKotlinCompilerTest() {
|
abstract class AbstractDiagnosticsNativeTestBase<R : ResultingArtifact.FrontendOutput<R>> : AbstractKotlinCompilerTest() {
|
||||||
abstract val targetFrontend: FrontendKind<R>
|
abstract val targetFrontend: FrontendKind<R>
|
||||||
abstract val frontend: Constructor<FrontendFacade<R>>
|
abstract val frontend: Constructor<FrontendFacade<R>>
|
||||||
abstract fun handlersSetup(builder: TestConfigurationBuilder)
|
|
||||||
|
|
||||||
override fun TestConfigurationBuilder.configuration() {
|
final override fun TestConfigurationBuilder.configuration() = Unit
|
||||||
|
|
||||||
|
override fun configure(builder: TestConfigurationBuilder) = with(builder) {
|
||||||
|
super.configure(builder)
|
||||||
|
|
||||||
globalDefaults {
|
globalDefaults {
|
||||||
frontend = targetFrontend
|
frontend = targetFrontend
|
||||||
targetPlatform = NativePlatforms.unspecifiedNativePlatform
|
targetPlatform = NativePlatforms.unspecifiedNativePlatform
|
||||||
dependencyKind = DependencyKind.Source
|
dependencyKind = DependencyKind.Source
|
||||||
}
|
}
|
||||||
|
useAfterAnalysisCheckers(::BlackBoxCodegenSuppressor)
|
||||||
baseNativeDiagnosticTestConfiguration(frontend)
|
baseNativeDiagnosticTestConfiguration(frontend)
|
||||||
handlersSetup(this)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun runTest(filePath: String) {
|
override fun runTest(filePath: String) {
|
||||||
@@ -56,7 +65,8 @@ abstract class AbstractDiagnosticsNativeTestBase<R : ResultingArtifact.FrontendO
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun mutePlatformTestIfNecessary(filePath: String) {
|
private fun mutePlatformTestIfNecessary(filePath: String) {
|
||||||
if(HostManager.hostIsMac) return
|
if (HostManager.hostIsMac) return
|
||||||
|
|
||||||
if (InTextDirectivesUtils.isDirectiveDefined(File(filePath).readText(), WITH_PLATFORM_LIBS.name))
|
if (InTextDirectivesUtils.isDirectiveDefined(File(filePath).readText(), WITH_PLATFORM_LIBS.name))
|
||||||
Assumptions.abort<Nothing>("Diagnostic tests using platform libs are not supported at non-Mac hosts. Test source: $filePath")
|
Assumptions.abort<Nothing>("Diagnostic tests using platform libs are not supported at non-Mac hosts. Test source: $filePath")
|
||||||
}
|
}
|
||||||
@@ -85,7 +95,6 @@ fun <R : ResultingArtifact.FrontendOutput<R>> TestConfigurationBuilder.baseNativ
|
|||||||
|
|
||||||
facadeStep(frontendFacade)
|
facadeStep(frontendFacade)
|
||||||
|
|
||||||
|
|
||||||
forTestsMatching("testData/diagnostics/nativeTests/*") {
|
forTestsMatching("testData/diagnostics/nativeTests/*") {
|
||||||
defaultDirectives {
|
defaultDirectives {
|
||||||
+LanguageSettingsDirectives.ALLOW_KOTLIN_PACKAGE
|
+LanguageSettingsDirectives.ALLOW_KOTLIN_PACKAGE
|
||||||
@@ -100,41 +109,61 @@ abstract class AbstractDiagnosticsNativeTest : AbstractDiagnosticsNativeTestBase
|
|||||||
override val frontend: Constructor<FrontendFacade<ClassicFrontendOutputArtifact>>
|
override val frontend: Constructor<FrontendFacade<ClassicFrontendOutputArtifact>>
|
||||||
get() = ::ClassicFrontendFacade
|
get() = ::ClassicFrontendFacade
|
||||||
|
|
||||||
override fun handlersSetup(builder: TestConfigurationBuilder) {
|
override fun configure(builder: TestConfigurationBuilder) = with(builder) {
|
||||||
builder.classicFrontendHandlersStep {
|
super.configure(builder)
|
||||||
|
|
||||||
|
classicFrontendHandlersStep {
|
||||||
useHandlers(
|
useHandlers(
|
||||||
::DeclarationsDumpHandler,
|
::DeclarationsDumpHandler,
|
||||||
::ClassicDiagnosticsHandler,
|
::ClassicDiagnosticsHandler,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
builder.useAdditionalService(::LibraryProvider)
|
useAdditionalService(::LibraryProvider)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class AbstractFirNativeDiagnosticsTestBase(val parser: FirParser) : AbstractDiagnosticsNativeTestBase<FirOutputArtifact>() {
|
abstract class AbstractFirNativeDiagnosticsTestBase(
|
||||||
|
private val parser: FirParser
|
||||||
|
) : AbstractDiagnosticsNativeTestBase<FirOutputArtifact>() {
|
||||||
override val targetFrontend: FrontendKind<FirOutputArtifact>
|
override val targetFrontend: FrontendKind<FirOutputArtifact>
|
||||||
get() = FrontendKinds.FIR
|
get() = FrontendKinds.FIR
|
||||||
|
|
||||||
override val frontend: Constructor<FrontendFacade<FirOutputArtifact>>
|
override val frontend: Constructor<FrontendFacade<FirOutputArtifact>>
|
||||||
get() = ::FirFrontendFacade
|
get() = ::FirFrontendFacade
|
||||||
|
|
||||||
override fun handlersSetup(builder: TestConfigurationBuilder) {
|
override fun configure(builder: TestConfigurationBuilder) = with(builder) {
|
||||||
builder.baseFirNativeDiagnosticTestConfiguration()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun configure(builder: TestConfigurationBuilder) {
|
|
||||||
super.configure(builder)
|
super.configure(builder)
|
||||||
with(builder) {
|
|
||||||
configureFirParser(parser)
|
|
||||||
enableLazyResolvePhaseChecking()
|
|
||||||
|
|
||||||
forTestsMatching("compiler/testData/diagnostics/*") {
|
configureFirParser(parser)
|
||||||
configurationForClassicAndFirTestsAlongside()
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultDirectives {
|
baseFirNativeDiagnosticTestConfiguration()
|
||||||
LanguageSettingsDirectives.LANGUAGE + "+EnableDfaWarningsInK2"
|
enableLazyResolvePhaseChecking()
|
||||||
}
|
|
||||||
|
forTestsMatching("compiler/testData/diagnostics/*") {
|
||||||
|
configurationForClassicAndFirTestsAlongside()
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultDirectives {
|
||||||
|
LanguageSettingsDirectives.LANGUAGE + "+EnableDfaWarningsInK2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class AbstractFirNativeDiagnosticsWithBackendTestBase(parser: FirParser) : AbstractFirNativeDiagnosticsTestBase(parser) {
|
||||||
|
override fun configure(builder: TestConfigurationBuilder) = with(builder) {
|
||||||
|
super.configure(builder)
|
||||||
|
|
||||||
|
globalDefaults {
|
||||||
|
targetBackend = TargetBackend.NATIVE
|
||||||
|
}
|
||||||
|
|
||||||
|
useAdditionalService(::LibraryProvider)
|
||||||
|
|
||||||
|
facadeStep(::Fir2IrNativeResultsConverter)
|
||||||
|
facadeStep(::FirNativeKlibBackendFacade)
|
||||||
|
|
||||||
|
klibArtifactsHandlersStep {
|
||||||
|
useHandlers(::KlibBackendDiagnosticsHandler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -155,3 +184,5 @@ fun TestConfigurationBuilder.baseFirNativeDiagnosticTestConfiguration() {
|
|||||||
|
|
||||||
abstract class AbstractFirPsiNativeDiagnosticsTest : AbstractFirNativeDiagnosticsTestBase(FirParser.Psi)
|
abstract class AbstractFirPsiNativeDiagnosticsTest : AbstractFirNativeDiagnosticsTestBase(FirParser.Psi)
|
||||||
abstract class AbstractFirLightTreeNativeDiagnosticsTest : AbstractFirNativeDiagnosticsTestBase(FirParser.LightTree)
|
abstract class AbstractFirLightTreeNativeDiagnosticsTest : AbstractFirNativeDiagnosticsTestBase(FirParser.LightTree)
|
||||||
|
|
||||||
|
abstract class AbstractFirPsiNativeDiagnosticsWithBackendTestBase : AbstractFirNativeDiagnosticsWithBackendTestBase(FirParser.Psi)
|
||||||
|
|||||||
Reference in New Issue
Block a user