[Test] Add empty platform module for MPP diagnostic test with only one module
After previous commits IrActualizer runs only there are at least two modules in backend input. So to check diagnostics from Actualizer all tests should contain at least two modules Diagnostics in test `extendExpectedClassWithAbstractMember.kt` were changed because there is an exception from IrActualizer caused by errors from frontend (`ABSTRACT_METHOD_NOT_IMPLEMENTED`), which is swallowed by this kind of tests
This commit is contained in:
committed by
Space Team
parent
62d269b3b9
commit
039baf95fc
+2
-5
@@ -34,14 +34,11 @@ import org.jetbrains.kotlin.test.model.AfterAnalysisChecker
|
||||
import org.jetbrains.kotlin.test.model.DependencyKind
|
||||
import org.jetbrains.kotlin.test.model.FrontendFacade
|
||||
import org.jetbrains.kotlin.test.model.FrontendKinds
|
||||
import org.jetbrains.kotlin.test.services.LibraryProvider
|
||||
import org.jetbrains.kotlin.test.services.TestService
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
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.configuration.ScriptingEnvironmentConfigurator
|
||||
import org.jetbrains.kotlin.test.services.fir.FirOldFrontendMetaConfigurator
|
||||
import org.jetbrains.kotlin.test.services.service
|
||||
import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsSourceFilesProvider
|
||||
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
|
||||
|
||||
@@ -111,7 +108,7 @@ abstract class AbstractFirWithActualizerDiagnosticsTest(val parser: FirParser) :
|
||||
useAdditionalService(::LibraryProvider)
|
||||
|
||||
@OptIn(TestInfrastructureInternals::class)
|
||||
useModuleStructureTransformers(DuplicateFileNameChecker)
|
||||
useModuleStructureTransformers(DuplicateFileNameChecker, PlatformModuleProvider)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -6,13 +6,14 @@
|
||||
package org.jetbrains.kotlin.test.runners
|
||||
|
||||
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
||||
import org.jetbrains.kotlin.test.services.DefaultsProvider
|
||||
import org.jetbrains.kotlin.test.services.ModuleStructureTransformer
|
||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
||||
|
||||
// TODO remove when duplicate files names are supported by prefix their path with the module name KT-63252
|
||||
@OptIn(TestInfrastructureInternals::class)
|
||||
object DuplicateFileNameChecker : ModuleStructureTransformer() {
|
||||
override fun transformModuleStructure(moduleStructure: TestModuleStructure): TestModuleStructure {
|
||||
override fun transformModuleStructure(moduleStructure: TestModuleStructure, defaultsProvider: DefaultsProvider): TestModuleStructure {
|
||||
val files = mutableSetOf<String>()
|
||||
|
||||
for (module in moduleStructure.modules) {
|
||||
@@ -25,4 +26,4 @@ object DuplicateFileNameChecker : ModuleStructureTransformer() {
|
||||
|
||||
return moduleStructure
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ class ModuleTransformerForSwitchingBackend(
|
||||
val backendForLib: TargetBackend,
|
||||
val backendForMain: TargetBackend
|
||||
) : ModuleStructureTransformer() {
|
||||
override fun transformModuleStructure(moduleStructure: TestModuleStructure): TestModuleStructure {
|
||||
override fun transformModuleStructure(moduleStructure: TestModuleStructure, defaultsProvider: DefaultsProvider): TestModuleStructure {
|
||||
if (moduleStructure.modules.size != 2) error("Test should contain only one module")
|
||||
val (first, second) = moduleStructure.modules
|
||||
|
||||
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright 2010-2023 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.services
|
||||
|
||||
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
||||
import org.jetbrains.kotlin.test.model.DependencyDescription
|
||||
import org.jetbrains.kotlin.test.model.DependencyRelation
|
||||
import org.jetbrains.kotlin.test.services.impl.TestModuleStructureImpl
|
||||
|
||||
/**
|
||||
* This provider adds additional empty module platform module if there is only one module in the module structure with common platform
|
||||
*
|
||||
* ```
|
||||
* // MODULE: some
|
||||
* ```
|
||||
* converted to
|
||||
* ```
|
||||
* // MODULE: some
|
||||
* ...
|
||||
* // MODULE: platform()()(some)
|
||||
* ```
|
||||
*
|
||||
* This is needed for MPP diagnostic tests, which sometimes omit specifying platform module, which causes Fir2Ir facade skip
|
||||
* IR actualizer, since there is only one module at all
|
||||
*/
|
||||
@OptIn(TestInfrastructureInternals::class)
|
||||
object PlatformModuleProvider : ModuleStructureTransformer() {
|
||||
override fun transformModuleStructure(moduleStructure: TestModuleStructure, defaultsProvider: DefaultsProvider): TestModuleStructure {
|
||||
val module = moduleStructure.modules.singleOrNull() ?: return moduleStructure
|
||||
val dependency = DependencyDescription(module.name, defaultsProvider.defaultDependencyKind, DependencyRelation.DependsOnDependency)
|
||||
val platformModule = module.copy(
|
||||
name = "${module.name}-platform",
|
||||
targetPlatform = defaultsProvider.defaultPlatform,
|
||||
allDependencies = listOf(dependency),
|
||||
files = emptyList()
|
||||
)
|
||||
return TestModuleStructureImpl(listOf(module, platformModule), moduleStructure.originalTestDataFiles)
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.test.services.impl.TestModuleStructureImpl
|
||||
*/
|
||||
@TestInfrastructureInternals
|
||||
class SplittingModuleTransformerForBoxTests : ModuleStructureTransformer() {
|
||||
override fun transformModuleStructure(moduleStructure: TestModuleStructure): TestModuleStructure {
|
||||
override fun transformModuleStructure(moduleStructure: TestModuleStructure, defaultsProvider: DefaultsProvider): TestModuleStructure {
|
||||
if (moduleStructure.modules.size > 1) {
|
||||
// The test is already multimodule, no need to split it into modules further.
|
||||
return moduleStructure
|
||||
|
||||
+2
-2
@@ -65,7 +65,7 @@ class ModuleStructureExtractorImpl(
|
||||
var result = extractor.splitTestDataByModules()
|
||||
for (transformer in moduleStructureTransformers) {
|
||||
result = try {
|
||||
transformer.transformModuleStructure(result)
|
||||
transformer.transformModuleStructure(result, testServices.defaultsProvider)
|
||||
} catch (e: Throwable) {
|
||||
throw ExceptionFromModuleStructureTransformer(e, result)
|
||||
}
|
||||
@@ -73,7 +73,7 @@ class ModuleStructureExtractorImpl(
|
||||
return result
|
||||
}
|
||||
|
||||
private inner class ModuleStructureExtractorWorker constructor(
|
||||
private inner class ModuleStructureExtractorWorker(
|
||||
private val testDataFiles: List<File>,
|
||||
private val directivesContainer: DirectivesContainer,
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user