[Tests] Native tests runTest applies source transformers

This commit is contained in:
Evgeniy.Zhelenskiy
2021-12-03 18:38:16 +03:00
parent 9b196c738f
commit c27b647ce8
12 changed files with 104 additions and 16 deletions
@@ -208,6 +208,17 @@ object NewTestGeneratorImpl : TestGenerator(METHOD_GENERATORS) {
var first = true
val transformers = testClassModel.predefinedTransformers(false)
if (transformers.isNotEmpty()) {
p.println("public ${testClassModel.name}() {")
p.pushIndent()
transformers.forEach { (path, transformer) -> p.println("register(\"$path\", $transformer);") }
p.popIndent()
p.println("}")
first = false
}
for (methodModel in testMethods) {
if (methodModel is RunTestMethodModel) continue // should also skip its imports
if (!methodModel.shouldBeGenerated()) continue // should also skip its imports
@@ -274,4 +285,9 @@ object NewTestGeneratorImpl : TestGenerator(METHOD_GENERATORS) {
}
return false
}
private fun TestClassModel.predefinedTransformers(recursive: Boolean): List<Pair<String, String>> =
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()
}
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.generators.util.TestGeneratorUtil
import org.jetbrains.kotlin.generators.util.extractTagsFromDirectory
import org.jetbrains.kotlin.test.TargetBackend
import java.io.File
import java.util.*
import java.util.regex.Pattern
import kotlin.reflect.KClass
@@ -96,7 +95,7 @@ class TestGroup(
pattern: String = if (extension == null) """^([^\.]+)$""" else "^(.+)\\.$extension\$",
excludedPattern: String? = null,
testMethod: String = "doTest",
singleClass: Boolean = false, // if true then tests from subdirectories will be flatten to single class
singleClass: Boolean = false, // if true then tests from subdirectories will be flattened to single class
testClassName: String? = null, // specific name for generated test class
// which backend will be used in test. Specifying value may affect some test with
// directives TARGET_BACKEND/DONT_TARGET_EXACT_BACKEND won't be generated
@@ -24,7 +24,13 @@ object TransformingTestMethodGenerator : MethodGenerator<TransformingTestMethodM
override fun generateBody(method: TransformingTestMethodModel, p: Printer) {
with(method) {
val filePath = KtTestUtil.getFilePath(source.file) + if (source.file.isDirectory) "/" else ""
p.println("${RunTestMethodModel.METHOD_NAME}(\"$filePath\", ${method.transformer});")
p.println("${RunTestMethodModel.METHOD_NAME}(\"$filePath\"${if (isNative) "" else ", $transformer"});")
if (isNative) {
p.println("/*")
p.println(" There is a registered source transformer for the testcase:")
transformer.lines().forEach { p.println(" $it") }
p.println("*/")
}
}
}
}
@@ -17,7 +17,7 @@ open class SimpleTestMethodModel(
val file: File,
private val filenamePattern: Pattern,
checkFilenameStartsLowerCase: Boolean?,
protected val targetBackend: TargetBackend,
internal val targetBackend: TargetBackend,
private val skipIgnored: Boolean,
override val tags: List<String>
) : MethodModel {
@@ -5,6 +5,8 @@
package org.jetbrains.kotlin.generators.model
import org.jetbrains.kotlin.test.TargetBackend
abstract class TransformingTestMethodModel(val source: SimpleTestMethodModel, val transformer: String) : MethodModel {
override val kind: MethodModel.Kind
get() = Kind
@@ -15,4 +17,9 @@ abstract class TransformingTestMethodModel(val source: SimpleTestMethodModel, va
get() = source.tags
object Kind : MethodModel.Kind()
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.
// Existing native tests specify target backend as ANY, setting it to NATIVE removes some previously generated tests.
}