[Test] Migrate all jvm tests runners for boxInline tests
This commit is contained in:
+976
-478
File diff suppressed because it is too large
Load Diff
@@ -42,3 +42,8 @@ abstract class TestConfiguration {
|
||||
abstract fun getAllHandlers(): List<AnalysisHandler<*>>
|
||||
}
|
||||
|
||||
// ---------------------------- Utils ----------------------------
|
||||
|
||||
fun <T, R> ((TestServices, T) -> R).bind(value: T): Constructor<R> {
|
||||
return { this.invoke(it, value) }
|
||||
}
|
||||
|
||||
@@ -35,11 +35,17 @@ class TestRunner(private val testConfiguration: TestConfiguration) {
|
||||
configurator.transformTestDataPath(fileName)
|
||||
}
|
||||
|
||||
val moduleStructure = testConfiguration.moduleStructureExtractor.splitTestDataByModules(
|
||||
testDataFileName,
|
||||
testConfiguration.directives,
|
||||
).also {
|
||||
services.register(TestModuleStructure::class, it)
|
||||
val moduleStructure = try {
|
||||
testConfiguration.moduleStructureExtractor.splitTestDataByModules(
|
||||
testDataFileName,
|
||||
testConfiguration.directives,
|
||||
).also {
|
||||
services.register(TestModuleStructure::class, it)
|
||||
}
|
||||
} catch (e: ExceptionFromModuleStructureTransformer) {
|
||||
services.register(TestModuleStructure::class, e.alreadyParsedModuleStructure)
|
||||
val exception = filterFailedExceptions(listOf(e.cause)).singleOrNull() ?: return
|
||||
throw exception
|
||||
}
|
||||
|
||||
testConfiguration.metaTestConfigurators.forEach {
|
||||
@@ -84,15 +90,17 @@ class TestRunner(private val testConfiguration: TestConfiguration) {
|
||||
}
|
||||
}
|
||||
|
||||
val filteredFailedAssertions = testConfiguration.afterAnalysisCheckers
|
||||
.fold<AfterAnalysisChecker, List<Throwable>>(failedAssertions) { assertions, checker ->
|
||||
checker.suppressIfNeeded(assertions)
|
||||
}
|
||||
.map { if (it is ExceptionFromTestError) it.cause else it }
|
||||
val filteredFailedAssertions = filterFailedExceptions(failedAssertions)
|
||||
|
||||
services.assertions.assertAll(filteredFailedAssertions)
|
||||
}
|
||||
|
||||
private fun filterFailedExceptions(failedExceptions: List<Throwable>): List<Throwable> = testConfiguration.afterAnalysisCheckers
|
||||
.fold(failedExceptions) { assertions, checker ->
|
||||
checker.suppressIfNeeded(assertions)
|
||||
}
|
||||
.map { if (it is ExceptionFromTestError) it.cause else it }
|
||||
|
||||
private fun processModule(
|
||||
services: TestServices,
|
||||
module: TestModule,
|
||||
|
||||
+5
@@ -11,3 +11,8 @@ import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
||||
abstract class ModuleStructureTransformer {
|
||||
abstract fun transformModuleStructure(moduleStructure: TestModuleStructure): TestModuleStructure
|
||||
}
|
||||
|
||||
class ExceptionFromModuleStructureTransformer(
|
||||
override val cause: Throwable,
|
||||
val alreadyParsedModuleStructure: TestModuleStructure
|
||||
) : Exception(cause)
|
||||
|
||||
+976
-478
File diff suppressed because it is too large
Load Diff
+976
-478
File diff suppressed because it is too large
Load Diff
+976
-478
File diff suppressed because it is too large
Load Diff
+976
-478
File diff suppressed because it is too large
Load Diff
+976
-478
File diff suppressed because it is too large
Load Diff
+976
-478
File diff suppressed because it is too large
Load Diff
+18
-9
@@ -13,23 +13,32 @@ import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
||||
import org.jetbrains.kotlin.test.directives.model.ValueDirective
|
||||
import org.jetbrains.kotlin.test.model.AfterAnalysisChecker
|
||||
import org.jetbrains.kotlin.test.model.FrontendKinds
|
||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
import org.jetbrains.kotlin.test.services.moduleStructure
|
||||
import org.jetbrains.kotlin.test.services.*
|
||||
import org.jetbrains.kotlin.test.util.joinToArrayString
|
||||
|
||||
class BlackBoxCodegenSuppressor(testServices: TestServices) : AfterAnalysisChecker(testServices) {
|
||||
class BlackBoxCodegenSuppressor(
|
||||
testServices: TestServices,
|
||||
val customIgnoreDirective: ValueDirective<TargetBackend>? = null
|
||||
) : AfterAnalysisChecker(testServices) {
|
||||
override val directives: List<DirectivesContainer>
|
||||
get() = listOf(CodegenTestDirectives)
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
override fun suppressIfNeeded(failedAssertions: List<Throwable>): List<Throwable> {
|
||||
val moduleStructure = testServices.moduleStructure
|
||||
val targetBackends = moduleStructure.modules.mapNotNull { it.targetBackend }
|
||||
return when (moduleStructure.modules.map { it.frontendKind }.first()) {
|
||||
FrontendKinds.ClassicFrontend -> processIgnoreBackend(moduleStructure, IGNORE_BACKEND, targetBackends, failedAssertions)
|
||||
FrontendKinds.FIR -> processIgnoreBackend(moduleStructure, IGNORE_BACKEND_FIR, targetBackends, failedAssertions)
|
||||
else -> failedAssertions
|
||||
val targetBackends = buildList {
|
||||
testServices.defaultsProvider.defaultTargetBackend?.let {
|
||||
add(it)
|
||||
return@buildList
|
||||
}
|
||||
moduleStructure.modules.mapNotNullTo(this) { it.targetBackend }
|
||||
}
|
||||
val ignoreDirective = when (moduleStructure.modules.map { it.frontendKind }.first()) {
|
||||
FrontendKinds.ClassicFrontend -> customIgnoreDirective ?: IGNORE_BACKEND
|
||||
FrontendKinds.FIR -> IGNORE_BACKEND_FIR
|
||||
else -> return failedAssertions
|
||||
}
|
||||
return processIgnoreBackend(moduleStructure, ignoreDirective, targetBackends, failedAssertions)
|
||||
}
|
||||
|
||||
private fun processIgnoreBackend(
|
||||
|
||||
+16
-9
@@ -6,27 +6,34 @@
|
||||
package org.jetbrains.kotlin.test.backend.handlers
|
||||
|
||||
import org.jetbrains.kotlin.codegen.InlineTestUtil
|
||||
import org.jetbrains.kotlin.codegen.filterClassFiles
|
||||
import org.jetbrains.kotlin.codegen.getClassFiles
|
||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.NO_CHECK_LAMBDA_INLINING
|
||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.SKIP_INLINE_CHECK_IN
|
||||
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
||||
import org.jetbrains.kotlin.test.model.ArtifactKinds
|
||||
import org.jetbrains.kotlin.test.model.BinaryArtifacts
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
import org.jetbrains.kotlin.test.services.dependencyProvider
|
||||
import org.jetbrains.kotlin.test.services.moduleStructure
|
||||
|
||||
class BytecodeInliningHandler(testServices: TestServices) : JvmBinaryArtifactHandler(testServices) {
|
||||
override val directivesContainers: List<DirectivesContainer>
|
||||
get() = listOf(CodegenTestDirectives)
|
||||
|
||||
override fun processModule(module: TestModule, info: BinaryArtifacts.Jvm) {
|
||||
InlineTestUtil.checkNoCallsToInline(
|
||||
info.classFileFactory.getClassFiles(),
|
||||
skipParameterCheckingInDirectives = NO_CHECK_LAMBDA_INLINING in module.directives,
|
||||
skippedMethods = module.directives[SKIP_INLINE_CHECK_IN].toSet()
|
||||
)
|
||||
}
|
||||
override fun processModule(module: TestModule, info: BinaryArtifacts.Jvm) {}
|
||||
|
||||
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {}
|
||||
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {
|
||||
val classFiles = testServices.moduleStructure.modules.flatMap {
|
||||
testServices.dependencyProvider.getArtifact(it, ArtifactKinds.Jvm).classFileFactory.getClassFiles()
|
||||
}
|
||||
val allDirectives = testServices.moduleStructure.allDirectives
|
||||
InlineTestUtil.checkNoCallsToInline(
|
||||
classFiles,
|
||||
skipParameterCheckingInDirectives = NO_CHECK_LAMBDA_INLINING in allDirectives,
|
||||
skippedMethods = allDirectives[SKIP_INLINE_CHECK_IN].toSet()
|
||||
)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+4
-1
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.test.backend.handlers
|
||||
|
||||
import org.jetbrains.kotlin.codegen.CommonSMAPTestUtil
|
||||
import org.jetbrains.kotlin.codegen.getClassFiles
|
||||
import org.jetbrains.kotlin.codegen.inline.GENERATE_SMAP
|
||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.DUMP_SMAP
|
||||
@@ -34,7 +35,7 @@ class SMAPDumpHandler(testServices: TestServices) : JvmBinaryArtifactHandler(tes
|
||||
if (!GENERATE_SMAP) return
|
||||
if (DUMP_SMAP !in module.directives) return
|
||||
|
||||
val compiledSmaps = CommonSMAPTestUtil.extractSMAPFromClasses(info.classFileFactory.currentOutput)
|
||||
val compiledSmaps = CommonSMAPTestUtil.extractSMAPFromClasses(info.classFileFactory.getClassFiles())
|
||||
|
||||
CommonSMAPTestUtil.checkNoConflictMappings(compiledSmaps, assertions)
|
||||
|
||||
@@ -54,6 +55,8 @@ class SMAPDumpHandler(testServices: TestServices) : JvmBinaryArtifactHandler(tes
|
||||
}
|
||||
|
||||
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {
|
||||
if (dumper.isEmpty()) return
|
||||
|
||||
val separateDumpEnabled = separateDumpsEnabled()
|
||||
val isSeparateCompilation = isSeparateCompilation()
|
||||
|
||||
|
||||
+5
@@ -23,6 +23,11 @@ object CodegenTestDirectives : SimpleDirectivesContainer() {
|
||||
applicability = Global
|
||||
)
|
||||
|
||||
val IGNORE_BACKEND_MULTI_MODULE by enumDirective<TargetBackend>(
|
||||
description = "Ignore failures of multimodule test on target backend",
|
||||
applicability = Global
|
||||
)
|
||||
|
||||
val JAVAC_OPTIONS by stringDirective(
|
||||
description = "Specify javac options to compile java files"
|
||||
)
|
||||
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.codegen
|
||||
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
|
||||
open class AbstractBlackBoxInlineCodegenTest : AbstractBlackBoxCodegenTest() {
|
||||
override fun configure(builder: TestConfigurationBuilder) {
|
||||
super.configure(builder)
|
||||
builder.useInlineHandlers()
|
||||
}
|
||||
}
|
||||
|
||||
open class AbstractIrBlackBoxInlineCodegenTest : AbstractIrBlackBoxCodegenTest() {
|
||||
override fun configure(builder: TestConfigurationBuilder) {
|
||||
super.configure(builder)
|
||||
builder.useInlineHandlers()
|
||||
}
|
||||
}
|
||||
|
||||
open class AbstractFirBlackBoxInlineCodegenTest : AbstractFirBlackBoxCodegenTest() {
|
||||
override fun configure(builder: TestConfigurationBuilder) {
|
||||
super.configure(builder)
|
||||
builder.useInlineHandlers()
|
||||
}
|
||||
}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.codegen
|
||||
|
||||
import org.jetbrains.kotlin.test.Constructor
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
||||
import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor
|
||||
import org.jetbrains.kotlin.test.backend.classic.ClassicBackendInput
|
||||
import org.jetbrains.kotlin.test.backend.classic.ClassicJvmBackendFacade
|
||||
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
|
||||
import org.jetbrains.kotlin.test.backend.ir.JvmIrBackendFacade
|
||||
import org.jetbrains.kotlin.test.bind
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.IGNORE_BACKEND_MULTI_MODULE
|
||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontend2ClassicBackendConverter
|
||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontend2IrConverter
|
||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade
|
||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact
|
||||
import org.jetbrains.kotlin.test.model.*
|
||||
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerWithTargetBackendTest
|
||||
import org.jetbrains.kotlin.test.services.ModuleTransformerForTwoFilesBoxTests
|
||||
|
||||
|
||||
@OptIn(TestInfrastructureInternals::class)
|
||||
abstract class AbstractCompileKotlinAgainstInlineKotlinTestBase<I : ResultingArtifact.BackendInput<I>>(
|
||||
targetBackend: TargetBackend
|
||||
) : AbstractKotlinCompilerWithTargetBackendTest(targetBackend) {
|
||||
abstract val frontendToBackendConverter: Constructor<Frontend2BackendConverter<ClassicFrontendOutputArtifact, I>>
|
||||
abstract val backendFacade: Constructor<BackendFacade<I, BinaryArtifacts.Jvm>>
|
||||
|
||||
override fun TestConfigurationBuilder.configuration() {
|
||||
commonConfigurationForCodegenTest(
|
||||
FrontendKinds.ClassicFrontend,
|
||||
::ClassicFrontendFacade,
|
||||
frontendToBackendConverter,
|
||||
backendFacade
|
||||
)
|
||||
useInlineHandlers()
|
||||
commonHandlersForCodegenTest()
|
||||
useModuleStructureTransformers(
|
||||
ModuleTransformerForTwoFilesBoxTests()
|
||||
)
|
||||
useAfterAnalysisCheckers(::BlackBoxCodegenSuppressor.bind(IGNORE_BACKEND_MULTI_MODULE))
|
||||
}
|
||||
}
|
||||
|
||||
open class AbstractCompileKotlinAgainstInlineKotlinTest :
|
||||
AbstractCompileKotlinAgainstInlineKotlinTestBase<ClassicBackendInput>(TargetBackend.JVM) {
|
||||
override val frontendToBackendConverter: Constructor<Frontend2BackendConverter<ClassicFrontendOutputArtifact, ClassicBackendInput>>
|
||||
get() = ::ClassicFrontend2ClassicBackendConverter
|
||||
|
||||
override val backendFacade: Constructor<BackendFacade<ClassicBackendInput, BinaryArtifacts.Jvm>>
|
||||
get() = ::ClassicJvmBackendFacade
|
||||
}
|
||||
|
||||
open class AbstractIrCompileKotlinAgainstInlineKotlinTest :
|
||||
AbstractCompileKotlinAgainstInlineKotlinTestBase<IrBackendInput>(TargetBackend.JVM_IR) {
|
||||
override val frontendToBackendConverter: Constructor<Frontend2BackendConverter<ClassicFrontendOutputArtifact, IrBackendInput>>
|
||||
get() = ::ClassicFrontend2IrConverter
|
||||
|
||||
override val backendFacade: Constructor<BackendFacade<IrBackendInput, BinaryArtifacts.Jvm>>
|
||||
get() = ::JvmIrBackendFacade
|
||||
}
|
||||
+3
-14
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.test.runners.codegen
|
||||
import org.jetbrains.kotlin.test.Constructor
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor
|
||||
import org.jetbrains.kotlin.test.backend.handlers.*
|
||||
import org.jetbrains.kotlin.test.backend.handlers.BytecodeListingHandler
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.model.*
|
||||
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerWithTargetBackendTest
|
||||
@@ -23,19 +23,8 @@ abstract class AbstractJvmBlackBoxCodegenTestBase<R : ResultingArtifact.Frontend
|
||||
|
||||
override fun TestConfigurationBuilder.configuration() {
|
||||
commonConfigurationForCodegenTest(targetFrontend, frontendFacade, frontendToBackendConverter, backendFacade)
|
||||
|
||||
useFrontendHandlers(
|
||||
::NoCompilationErrorsHandler,
|
||||
::NoFirCompilationErrorsHandler,
|
||||
)
|
||||
|
||||
useArtifactsHandlers(
|
||||
::JvmBoxRunner,
|
||||
::NoJvmSpecificCompilationErrorsHandler,
|
||||
::BytecodeListingHandler,
|
||||
::DxCheckerHandler,
|
||||
)
|
||||
|
||||
commonHandlersForCodegenTest()
|
||||
useArtifactsHandlers(::BytecodeListingHandler)
|
||||
useAfterAnalysisCheckers(::BlackBoxCodegenSuppressor)
|
||||
}
|
||||
}
|
||||
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.codegen
|
||||
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
||||
import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor
|
||||
import org.jetbrains.kotlin.test.backend.classic.ClassicJvmBackendFacade
|
||||
import org.jetbrains.kotlin.test.backend.ir.JvmIrBackendFacade
|
||||
import org.jetbrains.kotlin.test.bind
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
|
||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontend2ClassicBackendConverter
|
||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontend2IrConverter
|
||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade
|
||||
import org.jetbrains.kotlin.test.model.FrontendKinds
|
||||
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerWithTargetBackendTest
|
||||
import org.jetbrains.kotlin.test.services.ModuleTransformerForSwitchingBackend
|
||||
import org.jetbrains.kotlin.test.services.ModuleTransformerForTwoFilesBoxTests
|
||||
|
||||
@OptIn(TestInfrastructureInternals::class)
|
||||
open class AbstractBackendAgainstBackendBoxTestBase(
|
||||
targetBackend: TargetBackend,
|
||||
val backendForLib: TargetBackend,
|
||||
val backendForMain: TargetBackend
|
||||
) : AbstractKotlinCompilerWithTargetBackendTest(targetBackend) {
|
||||
override fun TestConfigurationBuilder.configuration() {
|
||||
commonConfigurationForCodegenTest(
|
||||
FrontendKinds.ClassicFrontend,
|
||||
::ClassicFrontendFacade,
|
||||
::ClassicFrontend2ClassicBackendConverter,
|
||||
::ClassicJvmBackendFacade
|
||||
)
|
||||
useFrontend2BackendConverters(::ClassicFrontend2IrConverter)
|
||||
useBackendFacades(::JvmIrBackendFacade)
|
||||
|
||||
commonHandlersForCodegenTest()
|
||||
useInlineHandlers()
|
||||
|
||||
useAfterAnalysisCheckers(::BlackBoxCodegenSuppressor.bind(CodegenTestDirectives.IGNORE_BACKEND_MULTI_MODULE))
|
||||
|
||||
useModuleStructureTransformers(
|
||||
ModuleTransformerForTwoFilesBoxTests(),
|
||||
ModuleTransformerForSwitchingBackend(backendForLib, backendForMain)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
open class AbstractJvmIrAgainstOldBoxInlineTest : AbstractBackendAgainstBackendBoxTestBase(
|
||||
targetBackend = TargetBackend.JVM_MULTI_MODULE_IR_AGAINST_OLD,
|
||||
backendForLib = TargetBackend.JVM,
|
||||
backendForMain = TargetBackend.JVM_IR
|
||||
)
|
||||
|
||||
open class AbstractJvmOldAgainstIrBoxInlineTest : AbstractBackendAgainstBackendBoxTestBase(
|
||||
targetBackend = TargetBackend.JVM_MULTI_MODULE_OLD_AGAINST_IR,
|
||||
backendForLib = TargetBackend.JVM_IR,
|
||||
backendForMain = TargetBackend.JVM_OLD
|
||||
)
|
||||
+20
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.test.runners.codegen
|
||||
|
||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||
import org.jetbrains.kotlin.test.Constructor
|
||||
import org.jetbrains.kotlin.test.backend.handlers.*
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.RUN_DEX_CHECKER
|
||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING
|
||||
@@ -49,3 +50,22 @@ fun <R : ResultingArtifact.FrontendOutput<R>> TestConfigurationBuilder.commonCon
|
||||
useFrontend2BackendConverters(frontendToBackendConverter)
|
||||
useBackendFacades(backendFacade)
|
||||
}
|
||||
|
||||
fun TestConfigurationBuilder.commonHandlersForCodegenTest() {
|
||||
useFrontendHandlers(
|
||||
::NoCompilationErrorsHandler,
|
||||
::NoFirCompilationErrorsHandler,
|
||||
)
|
||||
|
||||
useArtifactsHandlers(
|
||||
::JvmBoxRunner,
|
||||
::NoJvmSpecificCompilationErrorsHandler,
|
||||
::DxCheckerHandler,
|
||||
)
|
||||
}
|
||||
|
||||
fun TestConfigurationBuilder.useInlineHandlers() {
|
||||
useArtifactsHandlers(
|
||||
::BytecodeInliningHandler
|
||||
)
|
||||
}
|
||||
|
||||
+2
-2
@@ -47,8 +47,8 @@ class ModuleTransformerForTwoFilesBoxTests : ModuleStructureTransformer() {
|
||||
module.frontendKind,
|
||||
module.binaryKind,
|
||||
files = listOf(second) + additionalFiles,
|
||||
dependencies = listOf(DependencyDescription("lib", DependencyKind.Binary, DependencyRelation.Dependency)),
|
||||
friends = emptyList(),
|
||||
dependencies = emptyList(),
|
||||
friends = listOf(DependencyDescription("lib", DependencyKind.Binary, DependencyRelation.Dependency)),
|
||||
module.directives,
|
||||
module.languageVersionSettings
|
||||
)
|
||||
|
||||
+5
-1
@@ -62,7 +62,11 @@ class ModuleStructureExtractorImpl(
|
||||
val extractor = ModuleStructureExtractorWorker(listOf(testDataFile), directivesContainer)
|
||||
var result = extractor.splitTestDataByModules()
|
||||
for (transformer in moduleStructureTransformers) {
|
||||
result = transformer.transformModuleStructure(result)
|
||||
result = try {
|
||||
transformer.transformModuleStructure(result)
|
||||
} catch (e: Throwable) {
|
||||
throw ExceptionFromModuleStructureTransformer(e, result)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.codegen
|
||||
|
||||
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
||||
import java.io.File
|
||||
|
||||
abstract class AbstractCompileKotlinAgainstInlineKotlinTest : AbstractCompileKotlinAgainstKotlinTest() {
|
||||
override fun doMultiFileTest(wholeFile: File, files: List<TestFile>) {
|
||||
val isIgnored = InTextDirectivesUtils.isIgnoredTarget(backend, wholeFile, ignoreBackendDirectivePrefix)
|
||||
val (factory1, factory2) = doTwoFileTest(
|
||||
files.filter { it.name.endsWith(".kt") },
|
||||
!isIgnored
|
||||
)
|
||||
try {
|
||||
val allGeneratedFiles = factory1.asList() + factory2.asList()
|
||||
InlineTestUtil.checkNoCallsToInline(
|
||||
allGeneratedFiles.filterClassFiles(),
|
||||
skipParameterCheckingInDirectives = files.any { "NO_CHECK_LAMBDA_INLINING" in it.directives },
|
||||
skippedMethods = files.flatMapTo(mutableSetOf()) { it.directives.listValues("SKIP_INLINE_CHECK_IN") ?: emptyList() }
|
||||
)
|
||||
SMAPTestUtil.checkSMAP(files, allGeneratedFiles.filterClassFiles(), true)
|
||||
} catch (e: Throwable) {
|
||||
if (!isIgnored) {
|
||||
println("FIRST:\n\n${factory1.createText()}\n\nSECOND:\n\n${factory2.createText()}")
|
||||
}
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
override fun getIgnoreBackendDirectivePrefix(): String = "// IGNORE_BACKEND_MULTI_MODULE: "
|
||||
}
|
||||
-27
@@ -1,27 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2019 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.codegen.ir
|
||||
|
||||
import org.jetbrains.kotlin.codegen.AbstractCompileKotlinAgainstInlineKotlinTest
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
|
||||
abstract class AbstractIrCompileKotlinAgainstInlineKotlinTest : AbstractCompileKotlinAgainstInlineKotlinTest() {
|
||||
override val backend: TargetBackend get() = TargetBackend.JVM_IR
|
||||
}
|
||||
|
||||
abstract class AbstractJvmIrAgainstOldBoxInlineTest : AbstractIrCompileKotlinAgainstInlineKotlinTest() {
|
||||
override val backend: TargetBackend get() = TargetBackend.JVM_MULTI_MODULE_IR_AGAINST_OLD
|
||||
|
||||
override fun getBackendA(): TargetBackend = TargetBackend.JVM
|
||||
override fun getBackendB(): TargetBackend = TargetBackend.JVM_IR
|
||||
}
|
||||
|
||||
abstract class AbstractJvmOldAgainstIrBoxInlineTest : AbstractIrCompileKotlinAgainstInlineKotlinTest() {
|
||||
override val backend: TargetBackend get() = TargetBackend.JVM_MULTI_MODULE_OLD_AGAINST_IR
|
||||
|
||||
override fun getBackendA(): TargetBackend = TargetBackend.JVM_IR
|
||||
override fun getBackendB(): TargetBackend = TargetBackend.JVM
|
||||
}
|
||||
-34
@@ -113,10 +113,6 @@ fun generateJUnit3CompilerTests(args: Array<String>) {
|
||||
model("codegen/asmLike", targetBackend = TargetBackend.JVM)
|
||||
}
|
||||
|
||||
testClass<AbstractBlackBoxInlineCodegenTest> {
|
||||
model("codegen/boxInline", targetBackend = TargetBackend.JVM)
|
||||
}
|
||||
|
||||
testClass<AbstractBlackBoxAgainstJavaCodegenTest> {
|
||||
model("codegen/boxAgainstJava")
|
||||
}
|
||||
@@ -474,10 +470,6 @@ fun generateJUnit3CompilerTests(args: Array<String>) {
|
||||
model("debug/localVariables", targetBackend = TargetBackend.JVM_IR)
|
||||
}
|
||||
|
||||
testClass<AbstractIrBlackBoxInlineCodegenTest> {
|
||||
model("codegen/boxInline", targetBackend = TargetBackend.JVM_IR)
|
||||
}
|
||||
|
||||
testClass<AbstractIrAsmLikeInstructionListingTest> {
|
||||
model("codegen/asmLike", targetBackend = TargetBackend.JVM_IR)
|
||||
}
|
||||
@@ -492,37 +484,11 @@ fun generateJUnit3CompilerTests(args: Array<String>) {
|
||||
testRunnerMethodName = "runTestWithCustomIgnoreDirective",
|
||||
additionalRunnerArguments = listOf("\"// IGNORE_BACKEND_FIR: \"")
|
||||
) {
|
||||
testClass<AbstractFirBlackBoxInlineCodegenTest> {
|
||||
model("codegen/boxInline", targetBackend = TargetBackend.JVM_IR, excludeDirs = listOf("oldLanguageVersions"))
|
||||
}
|
||||
|
||||
testClass<AbstractFirBlackBoxAgainstJavaCodegenTest> {
|
||||
model("codegen/boxAgainstJava", targetBackend = TargetBackend.JVM_IR, excludeDirs = listOf("oldLanguageVersions"))
|
||||
}
|
||||
}
|
||||
|
||||
testGroup(
|
||||
"compiler/tests-gen", "compiler/testData",
|
||||
testRunnerMethodName = "runTestWithCustomIgnoreDirective",
|
||||
additionalRunnerArguments = listOf("\"// IGNORE_BACKEND_MULTI_MODULE: \"")
|
||||
) {
|
||||
testClass<AbstractCompileKotlinAgainstInlineKotlinTest> {
|
||||
model("codegen/boxInline", targetBackend = TargetBackend.JVM)
|
||||
}
|
||||
testClass<AbstractIrCompileKotlinAgainstInlineKotlinTest> {
|
||||
model("codegen/boxInline", targetBackend = TargetBackend.JVM_IR)
|
||||
}
|
||||
testClass<AbstractJvmIrAgainstOldBoxInlineTest> {
|
||||
model("codegen/boxInline", targetBackend = TargetBackend.JVM_MULTI_MODULE_IR_AGAINST_OLD)
|
||||
}
|
||||
testClass<AbstractJvmOldAgainstIrBoxInlineTest> {
|
||||
model(
|
||||
"codegen/boxInline",
|
||||
targetBackend = TargetBackend.JVM_MULTI_MODULE_OLD_AGAINST_IR
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
testGroup("compiler/fir/raw-fir/psi2fir/tests-gen", "compiler/fir/raw-fir/psi2fir/testData") {
|
||||
testClass<AbstractRawFirBuilderTestCase> {
|
||||
model("rawBuilder", testMethod = "doRawFirTest")
|
||||
|
||||
+28
@@ -79,6 +79,30 @@ fun generateJUnit5CompilerTests(args: Array<String>) {
|
||||
testClass<AbstractIrBytecodeTextTest> {
|
||||
model("codegen/bytecodeText", excludeDirs = listOf("oldLanguageVersions"))
|
||||
}
|
||||
|
||||
testClass<AbstractBlackBoxInlineCodegenTest> {
|
||||
model("codegen/boxInline")
|
||||
}
|
||||
|
||||
testClass<AbstractIrBlackBoxInlineCodegenTest> {
|
||||
model("codegen/boxInline")
|
||||
}
|
||||
|
||||
testClass<AbstractCompileKotlinAgainstInlineKotlinTest> {
|
||||
model("codegen/boxInline")
|
||||
}
|
||||
|
||||
testClass<AbstractIrCompileKotlinAgainstInlineKotlinTest> {
|
||||
model("codegen/boxInline")
|
||||
}
|
||||
|
||||
testClass<AbstractJvmIrAgainstOldBoxInlineTest> {
|
||||
model("codegen/boxInline")
|
||||
}
|
||||
|
||||
testClass<AbstractJvmOldAgainstIrBoxInlineTest> {
|
||||
model("codegen/boxInline")
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------- FIR tests ----------------------------------------------
|
||||
@@ -92,6 +116,10 @@ fun generateJUnit5CompilerTests(args: Array<String>) {
|
||||
testClass<AbstractFirBlackBoxCodegenTest> {
|
||||
model("codegen/box", excludeDirs = listOf("oldLanguageVersions"))
|
||||
}
|
||||
|
||||
testClass<AbstractFirBlackBoxInlineCodegenTest> {
|
||||
model("codegen/boxInline", excludeDirs = listOf("oldLanguageVersions"))
|
||||
}
|
||||
}
|
||||
|
||||
testGroup("compiler/fir/analysis-tests/tests-gen", "compiler/fir/analysis-tests/testData") {
|
||||
|
||||
Reference in New Issue
Block a user