[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:
Dmitriy Novozhilov
2023-11-21 17:29:28 +02:00
committed by Space Team
parent 62d269b3b9
commit 039baf95fc
24 changed files with 114 additions and 144 deletions
@@ -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)
}
}
@@ -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
}
}
}
@@ -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
@@ -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)
}
}
@@ -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
@@ -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,
) {