[Tests] Native tests runTest applies source transformers
This commit is contained in:
+16
@@ -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()
|
||||
}
|
||||
|
||||
+1
-2
@@ -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
|
||||
|
||||
+7
-1
@@ -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("*/")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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 {
|
||||
|
||||
+7
@@ -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.
|
||||
}
|
||||
Reference in New Issue
Block a user