[Test] Parallelize test generation
This commit is contained in:
committed by
Space Team
parent
0d04e170b1
commit
bb8a46c3a0
+10
-8
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+6
-5
@@ -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)
|
||||
|
||||
|
||||
+8
-2
@@ -5,9 +5,15 @@
|
||||
|
||||
package org.jetbrains.kotlin.test.generators
|
||||
|
||||
import org.jetbrains.kotlin.generators.util.TestGeneratorUtil
|
||||
import java.util.stream.Stream
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
System.setProperty("java.awt.headless", "true")
|
||||
// Determine main class name while still on main thread.
|
||||
val mainClassName = TestGeneratorUtil.getMainClassName()
|
||||
|
||||
generateJUnit3CompilerTests(args)
|
||||
generateJUnit5CompilerTests(args)
|
||||
Stream.of(::generateJUnit3CompilerTests, ::generateJUnit5CompilerTests)
|
||||
.parallel()
|
||||
.forEach { it.invoke(args, mainClassName) }
|
||||
}
|
||||
|
||||
+2
-2
@@ -50,10 +50,10 @@ import org.jetbrains.kotlin.test.TargetBackend
|
||||
import org.jetbrains.kotlin.test.utils.CUSTOM_TEST_DATA_EXTENSION_PATTERN
|
||||
import org.jetbrains.kotlin.types.AbstractTypeBindingTest
|
||||
|
||||
fun generateJUnit3CompilerTests(args: Array<String>) {
|
||||
fun generateJUnit3CompilerTests(args: Array<String>, mainClassName: String?) {
|
||||
val excludedCustomTestdataPattern = CUSTOM_TEST_DATA_EXTENSION_PATTERN
|
||||
|
||||
generateTestGroupSuite(args) {
|
||||
generateTestGroupSuite(args, mainClassName) {
|
||||
testGroup("compiler/tests-gen", "compiler/testData") {
|
||||
testClass<AbstractDiagnosticsTestWithJsStdLibAndBackendCompilation> {
|
||||
model("diagnostics/testsWithJsStdLibAndBackendCompilation")
|
||||
|
||||
+2
-2
@@ -17,10 +17,10 @@ import org.jetbrains.kotlin.test.utils.CUSTOM_TEST_DATA_EXTENSION_PATTERN
|
||||
import org.jetbrains.kotlin.visualizer.fir.AbstractFirVisualizerTest
|
||||
import org.jetbrains.kotlin.visualizer.psi.AbstractPsiVisualizerTest
|
||||
|
||||
fun generateJUnit5CompilerTests(args: Array<String>) {
|
||||
fun generateJUnit5CompilerTests(args: Array<String>, mainClassName: String?) {
|
||||
val excludedCustomTestdataPattern = CUSTOM_TEST_DATA_EXTENSION_PATTERN
|
||||
|
||||
generateTestGroupSuiteWithJUnit5(args) {
|
||||
generateTestGroupSuiteWithJUnit5(args, mainClassName) {
|
||||
testGroup(testsRoot = "compiler/tests-common-new/tests-gen", testDataRoot = "compiler/testData") {
|
||||
testClass<AbstractDiagnosticTest> {
|
||||
model("diagnostics/tests", pattern = "^(.*)\\.kts?$", excludedPattern = excludedCustomTestdataPattern)
|
||||
|
||||
Reference in New Issue
Block a user