From 2874462e3aedd5a4f74f7b36f31fa97449fda2d2 Mon Sep 17 00:00:00 2001 From: "Evgeniy.Zhelenskiy" Date: Mon, 6 Dec 2021 20:27:22 +0300 Subject: [PATCH] [Tests] Introduce transformers functions object --- .../FirBlackBoxCodegenTestGenerated.java | 5 +++-- .../codegen/BlackBoxCodegenTestGenerated.java | 3 ++- .../IrBlackBoxCodegenTestGenerated.java | 5 +++-- .../test/runners/TransformersFunctions.kt | 18 ++++++++++++++++++ .../generators/impl/TestGeneratorImpl.kt | 7 ++++++- .../LightAnalysisModeTestGenerated.java | 3 ++- .../kotlin/generators/NewTestGeneratorImpl.kt | 13 +++++++++---- .../model/TransformingTestMethodModel.kt | 3 +++ .../model/WithoutJvmInlineTestMethodModel.kt | 3 ++- .../js/test/JsCodegenBoxTestGenerated.java | 3 ++- .../test/ir/IrJsCodegenBoxTestGenerated.java | 3 ++- .../IrCodegenBoxWasmTestGenerated.java | 3 ++- 12 files changed, 54 insertions(+), 15 deletions(-) create mode 100644 compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/TransformersFunctions.kt diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index e796f204a5c..eb46ad428a1 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.test.runners.codegen; import com.intellij.testFramework.TestDataPath; import org.jetbrains.kotlin.test.util.KtTestUtil; import org.jetbrains.kotlin.test.TargetBackend; +import org.jetbrains.kotlin.test.runners.TransformersFunctions; import org.jetbrains.kotlin.test.TestMetadata; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -19291,13 +19292,13 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT @Test @TestMetadata("boxResultInlineClassOfConstructorCall.kt") public void testBoxResultInlineClassOfConstructorCall() throws Exception { - runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", s -> s.replaceAll("OPTIONAL_JVM_INLINE_ANNOTATION", "@kotlin.jvm.JvmInline")); + runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", TransformersFunctions::replaceOptionalJvmInlineAnnotationWithReal); } @Test @TestMetadata("boxResultInlineClassOfConstructorCall.kt") public void testBoxResultInlineClassOfConstructorCall_valueClasses() throws Exception { - runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", s -> s.replaceAll("OPTIONAL_JVM_INLINE_ANNOTATION", "")); + runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", TransformersFunctions::removeOptionalJvmInlineAnnotation); } @Test diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 3b34a0a3950..29ccbe1ee06 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.test.runners.codegen; import com.intellij.testFramework.TestDataPath; import org.jetbrains.kotlin.test.util.KtTestUtil; import org.jetbrains.kotlin.test.TargetBackend; +import org.jetbrains.kotlin.test.runners.TransformersFunctions; import org.jetbrains.kotlin.test.TestMetadata; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -18907,7 +18908,7 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { @Test @TestMetadata("boxResultInlineClassOfConstructorCall.kt") public void testBoxResultInlineClassOfConstructorCall() throws Exception { - runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", s -> s.replaceAll("OPTIONAL_JVM_INLINE_ANNOTATION", "@kotlin.jvm.JvmInline")); + runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", TransformersFunctions::replaceOptionalJvmInlineAnnotationWithReal); } @Test diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index fde6cc68682..8dc3c374434 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.test.runners.codegen; import com.intellij.testFramework.TestDataPath; import org.jetbrains.kotlin.test.util.KtTestUtil; import org.jetbrains.kotlin.test.TargetBackend; +import org.jetbrains.kotlin.test.runners.TransformersFunctions; import org.jetbrains.kotlin.test.TestMetadata; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -19291,13 +19292,13 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes @Test @TestMetadata("boxResultInlineClassOfConstructorCall.kt") public void testBoxResultInlineClassOfConstructorCall() throws Exception { - runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", s -> s.replaceAll("OPTIONAL_JVM_INLINE_ANNOTATION", "@kotlin.jvm.JvmInline")); + runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", TransformersFunctions::replaceOptionalJvmInlineAnnotationWithReal); } @Test @TestMetadata("boxResultInlineClassOfConstructorCall.kt") public void testBoxResultInlineClassOfConstructorCall_valueClasses() throws Exception { - runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", s -> s.replaceAll("OPTIONAL_JVM_INLINE_ANNOTATION", "")); + runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", TransformersFunctions::removeOptionalJvmInlineAnnotation); } @Test diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/TransformersFunctions.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/TransformersFunctions.kt new file mode 100644 index 00000000000..dcc1ceb77a7 --- /dev/null +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/TransformersFunctions.kt @@ -0,0 +1,18 @@ +/* + * 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 + +object TransformersFunctions { + @JvmStatic + fun replaceOptionalJvmInlineAnnotationWithReal(source: String): String { + return source.replace("OPTIONAL_JVM_INLINE_ANNOTATION", "@JvmInline") + } + + @JvmStatic + fun removeOptionalJvmInlineAnnotation(source: String): String { + return source.replace("OPTIONAL_JVM_INLINE_ANNOTATION", "") + } +} \ No newline at end of file diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/generators/impl/TestGeneratorImpl.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/generators/impl/TestGeneratorImpl.kt index 5f2eb613dd3..c4fda6fbb41 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/generators/impl/TestGeneratorImpl.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/generators/impl/TestGeneratorImpl.kt @@ -124,7 +124,12 @@ private class TestGeneratorImplInstance( p.println("import " + KtTestUtil::class.java.canonicalName + ";") for (clazz in testClassModels.flatMapTo(mutableSetOf()) { classModel -> classModel.imports }) { - p.println("import ${clazz.name};") + val realName = when (clazz) { + TransformingTestMethodModel.TransformerFunctionsClassPlaceHolder::class.java -> + "org.jetbrains.kotlin.test.runners.TransformersFunctions" + else -> clazz.name + } + p.println("import $realName;") } if (suiteClassPackage != baseTestClassPackage) { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 84ba01f6d46..e14cad1b7f1 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; import org.jetbrains.kotlin.test.KotlinTestUtils; import org.jetbrains.kotlin.test.util.KtTestUtil; import org.jetbrains.kotlin.test.TargetBackend; +import org.jetbrains.kotlin.test.runners.TransformersFunctions; import org.jetbrains.kotlin.test.TestMetadata; import org.junit.runner.RunWith; @@ -15780,7 +15781,7 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes @TestMetadata("boxResultInlineClassOfConstructorCall.kt") public void testBoxResultInlineClassOfConstructorCall() throws Exception { - runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", s -> s.replaceAll("OPTIONAL_JVM_INLINE_ANNOTATION", "@kotlin.jvm.JvmInline")); + runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", TransformersFunctions::replaceOptionalJvmInlineAnnotationWithReal); } @TestMetadata("boxUnboxInlineClassesWithOperatorsGetSet.kt") diff --git a/generators/test-generator/tests/org/jetbrains/kotlin/generators/NewTestGeneratorImpl.kt b/generators/test-generator/tests/org/jetbrains/kotlin/generators/NewTestGeneratorImpl.kt index 560e60e2746..37623f30c7f 100644 --- a/generators/test-generator/tests/org/jetbrains/kotlin/generators/NewTestGeneratorImpl.kt +++ b/generators/test-generator/tests/org/jetbrains/kotlin/generators/NewTestGeneratorImpl.kt @@ -129,7 +129,12 @@ object NewTestGeneratorImpl : TestGenerator(METHOD_GENERATORS) { p.println("import ${KtTestUtil::class.java.canonicalName};") for (clazz in testClassModels.flatMapTo(mutableSetOf()) { classModel -> classModel.imports }) { - p.println("import ${clazz.name};") + val realName = when (clazz) { + TransformingTestMethodModel.TransformerFunctionsClassPlaceHolder::class.java -> + "org.jetbrains.kotlin.test.runners.TransformersFunctions" + else -> clazz.name + } + p.println("import $realName;") } if (suiteClassPackage != baseTestClassPackage) { @@ -208,7 +213,7 @@ object NewTestGeneratorImpl : TestGenerator(METHOD_GENERATORS) { var first = true - val transformers = testClassModel.predefinedTransformers(false) + val transformers = testClassModel.predefinedNativeTransformers(false) if (transformers.isNotEmpty()) { p.println("public ${testClassModel.name}() {") @@ -286,8 +291,8 @@ object NewTestGeneratorImpl : TestGenerator(METHOD_GENERATORS) { return false } - private fun TestClassModel.predefinedTransformers(recursive: Boolean): List> = + private fun TestClassModel.predefinedNativeTransformers(recursive: Boolean): List> = methods.mapNotNull { method -> (method as? TransformingTestMethodModel)?.takeIf { it.isNative }?.let { it.source.file.path to it.transformer } - } + if (recursive) innerTestClasses.flatMap { it.predefinedTransformers(recursive) } else listOf() + } + if (recursive) innerTestClasses.flatMap { it.predefinedNativeTransformers(recursive) } else listOf() } diff --git a/generators/test-generator/tests/org/jetbrains/kotlin/generators/model/TransformingTestMethodModel.kt b/generators/test-generator/tests/org/jetbrains/kotlin/generators/model/TransformingTestMethodModel.kt index a6ca4ed13f5..3a62a5c6ecf 100644 --- a/generators/test-generator/tests/org/jetbrains/kotlin/generators/model/TransformingTestMethodModel.kt +++ b/generators/test-generator/tests/org/jetbrains/kotlin/generators/model/TransformingTestMethodModel.kt @@ -16,8 +16,11 @@ abstract class TransformingTestMethodModel(val source: SimpleTestMethodModel, va override val tags: List get() = source.tags + object TransformerFunctionsClassPlaceHolder object Kind : MethodModel.Kind() + override fun imports(): Collection> = super.imports() + TransformerFunctionsClassPlaceHolder::class.java + internal val isNative get() = source.targetBackend in listOf(TargetBackend.NATIVE, TargetBackend.ANY) // Native tests load sources before runTest call if more than 1 test is called, so we need to register it before. diff --git a/generators/test-generator/tests/org/jetbrains/kotlin/generators/model/WithoutJvmInlineTestMethodModel.kt b/generators/test-generator/tests/org/jetbrains/kotlin/generators/model/WithoutJvmInlineTestMethodModel.kt index b25d4f2981d..88432b595ab 100644 --- a/generators/test-generator/tests/org/jetbrains/kotlin/generators/model/WithoutJvmInlineTestMethodModel.kt +++ b/generators/test-generator/tests/org/jetbrains/kotlin/generators/model/WithoutJvmInlineTestMethodModel.kt @@ -10,7 +10,8 @@ class WithoutJvmInlineTestMethodModel( val withAnnotation: Boolean ) : TransformingTestMethodModel( source, - transformer = "s -> s.replaceAll(\"OPTIONAL_JVM_INLINE_ANNOTATION\", \"${if (withAnnotation) "@kotlin.jvm.JvmInline" else ""}\")" + transformer = "TransformersFunctions::" + + if (withAnnotation) "replaceOptionalJvmInlineAnnotationWithReal" else "removeOptionalJvmInlineAnnotation" ) { override val name: String = source.name + if (withAnnotation) "" else "_valueClasses" } \ No newline at end of file diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java index ede861035cc..f698d407098 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.js.test; import com.intellij.testFramework.TestDataPath; import org.jetbrains.kotlin.test.util.KtTestUtil; import org.jetbrains.kotlin.test.TargetBackend; +import org.jetbrains.kotlin.test.runners.TransformersFunctions; import org.jetbrains.kotlin.test.TestMetadata; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -14841,7 +14842,7 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { @Test @TestMetadata("boxResultInlineClassOfConstructorCall.kt") public void testBoxResultInlineClassOfConstructorCall_valueClasses() throws Exception { - runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", s -> s.replaceAll("OPTIONAL_JVM_INLINE_ANNOTATION", "")); + runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", TransformersFunctions::removeOptionalJvmInlineAnnotation); } @Test diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java index 472d9c3ac0f..3bbf4343213 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.js.test.ir; import com.intellij.testFramework.TestDataPath; import org.jetbrains.kotlin.test.util.KtTestUtil; import org.jetbrains.kotlin.test.TargetBackend; +import org.jetbrains.kotlin.test.runners.TransformersFunctions; import org.jetbrains.kotlin.test.TestMetadata; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -14805,7 +14806,7 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { @Test @TestMetadata("boxResultInlineClassOfConstructorCall.kt") public void testBoxResultInlineClassOfConstructorCall_valueClasses() throws Exception { - runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", s -> s.replaceAll("OPTIONAL_JVM_INLINE_ANNOTATION", "")); + runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", TransformersFunctions::removeOptionalJvmInlineAnnotation); } @Test diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index 8a6d77eb81d..019958301ca 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; import org.jetbrains.kotlin.test.KotlinTestUtils; import org.jetbrains.kotlin.test.util.KtTestUtil; import org.jetbrains.kotlin.test.TargetBackend; +import org.jetbrains.kotlin.test.runners.TransformersFunctions; import org.jetbrains.kotlin.test.TestMetadata; import org.junit.runner.RunWith; @@ -12472,7 +12473,7 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest @TestMetadata("boxResultInlineClassOfConstructorCall.kt") public void testBoxResultInlineClassOfConstructorCall_valueClasses() throws Exception { - runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", s -> s.replaceAll("OPTIONAL_JVM_INLINE_ANNOTATION", "")); + runTest("compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt", TransformersFunctions::removeOptionalJvmInlineAnnotation); } @TestMetadata("boxUnboxInlineClassesWithOperatorsGetSet.kt")