[Test] Parallelize test generation

This commit is contained in:
Kirill Rakhman
2023-08-25 16:14:27 +02:00
committed by Space Team
parent 0d04e170b1
commit bb8a46c3a0
12 changed files with 72 additions and 43 deletions
@@ -8,26 +8,28 @@ package org.jetbrains.kotlin.generators.impl
import org.jetbrains.kotlin.generators.InconsistencyChecker
import org.jetbrains.kotlin.generators.InconsistencyChecker.Companion.inconsistencyChecker
import org.jetbrains.kotlin.generators.TestGroupSuite
import org.jetbrains.kotlin.generators.forEachTestClassParallel
import org.jetbrains.kotlin.generators.testGroupSuite
import org.jetbrains.kotlin.generators.util.TestGeneratorUtil
fun generateTestGroupSuite(
args: Array<String>,
mainClassName: String? = TestGeneratorUtil.getMainClassName(),
init: TestGroupSuite.() -> Unit
) {
generateTestGroupSuite(InconsistencyChecker.hasDryRunArg(args), init)
generateTestGroupSuite(InconsistencyChecker.hasDryRunArg(args), mainClassName, init)
}
fun generateTestGroupSuite(
dryRun: Boolean = false,
init: TestGroupSuite.() -> Unit
mainClassName: String? = TestGeneratorUtil.getMainClassName(),
init: TestGroupSuite.() -> Unit,
) {
val suite = testGroupSuite(init)
for (testGroup in suite.testGroups) {
for (testClass in testGroup.testClasses) {
val (changed, testSourceFilePath) = TestGeneratorImpl.generateAndSave(testClass, dryRun)
if (changed) {
inconsistencyChecker(dryRun).add(testSourceFilePath)
}
suite.forEachTestClassParallel { testClass ->
val (changed, testSourceFilePath) = TestGeneratorImpl.generateAndSave(testClass, dryRun, mainClassName)
if (changed) {
inconsistencyChecker(dryRun).add(testSourceFilePath)
}
}
}
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.generators.TestGenerator
import org.jetbrains.kotlin.generators.TestGroup
import org.jetbrains.kotlin.generators.model.*
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil
import org.jetbrains.kotlin.generators.util.TestGeneratorUtil.getMainClassName
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestMetadata
@@ -31,14 +30,15 @@ private val METHOD_GENERATORS = listOf(
)
object TestGeneratorImpl : TestGenerator(METHOD_GENERATORS) {
override fun generateAndSave(testClass: TestGroup.TestClass, dryRun: Boolean): GenerationResult {
override fun generateAndSave(testClass: TestGroup.TestClass, dryRun: Boolean, mainClassName: String?): GenerationResult {
val generatorInstance = TestGeneratorImplInstance(
testClass.baseDir,
testClass.suiteTestClassName,
testClass.baseTestClassName,
testClass.testModels,
testClass.useJunit4,
methodGenerators
methodGenerators,
mainClassName,
)
return generatorInstance.generateAndSave(dryRun)
}
@@ -50,7 +50,8 @@ private class TestGeneratorImplInstance(
baseTestClassFqName: String,
private val testClassModels: Collection<TestClassModel>,
private val useJunit4: Boolean,
private val methodGenerators: Map<MethodModel.Kind, MethodGenerator<*>>
private val methodGenerators: Map<MethodModel.Kind, MethodGenerator<*>>,
private val mainClassName: String?
) {
companion object {
private val GENERATED_FILES = HashSet<String>()
@@ -147,7 +148,7 @@ private class TestGeneratorImplInstance(
p.println("import java.io.File;")
p.println("import java.util.regex.Pattern;")
p.println()
p.println("/** This class is generated by {@link ", getMainClassName(), "}. DO NOT MODIFY MANUALLY */")
p.println("/** This class is generated by {@link ", mainClassName, "}. DO NOT MODIFY MANUALLY */")
generateSuppressAllWarnings(p)