New type of task - TestAggregation task

You can configure smoke test suites and get critical test results faster
This doesn't replace rr/* builds, but complements them for a faster round trip.

Also test tasks and patterns were added for KMM team.
 #KMM-265
This commit is contained in:
Alexander Dudinsky
2020-06-23 17:00:08 +03:00
parent ebc4910834
commit 38535c4fe1
4 changed files with 125 additions and 0 deletions
+20
View File
@@ -0,0 +1,20 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Test: KMM" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="kmmTest" />
</list>
</option>
<option name="vmOptions" value="" />
</ExternalSystemSettings>
<method v="2" />
</configuration>
</component>
+15
View File
@@ -827,6 +827,21 @@ tasks {
}
}
register("kmmTest", AggregateTest::class) {
dependsOn(
":idea:idea-gradle:test",
":idea:test",
":compiler:test",
":js:js.tests:test"
)
if (Ide.IJ193.orHigher())
dependsOn(":kotlin-gradle-plugin-integration-tests:test")
if (Ide.AS40.orHigher())
dependsOn(":kotlin-ultimate:ide:android-studio-native:test")
testPatternFile = file("tests/mpp/kmm-patterns.csv")
}
register("test") {
doLast {
throw GradleException("Don't use directly, use aggregate tasks *-check instead")
+72
View File
@@ -0,0 +1,72 @@
/*
* Copyright 2010-2020 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.
*/
import org.gradle.api.GradleException
import org.gradle.api.tasks.*
import org.gradle.api.tasks.testing.Test
import java.io.File
// You can see "How To" via link: https://jetbrains.quip.com/xQ2WAUy9bZmy/How-to-use-AggregateTest-task
open class AggregateTest : Test() { // Inherit from Test to see test results in IDEA Test viewer
private var patterns: MutableMap<String, MutableList<String>> = mutableMapOf()
@InputFile
lateinit var testPatternFile: File
init {
// Set empty FileCollection to avoid NPE when initializing a base 'Test' class
classpath = project.objects.fileCollection()
testClassesDirs = project.objects.fileCollection()
project.gradle.taskGraph.whenReady {
if (allTasks.filterIsInstance<AggregateTest>().isNotEmpty()) {
initPatterns()
allTasks.filterIsInstance<Test>().forEach { testTask -> subTaskConfigure(testTask) }
if (!project.gradle.startParameter.taskNames.all { project.tasks.findByPath(it) is AggregateTest }) {
logger.warn("Please, don't use AggregateTest and non-AggregateTest test tasks together. You can get incorrect results.")
}
}
}
}
private fun initPatterns() {
if (!testPatternFile.exists())
throw GradleException("File with test patterns is not found")
testPatternFile
.readLines()
.asSequence()
.filter { it.isNotEmpty() }
.forEach { line ->
// patternType is exclude or include value
val (pattern, patternType) = line.split(',').map { it.trim() }
patterns.getOrPut(patternType) { mutableListOf() }.add(pattern)
}
}
private fun subTaskConfigure(testTask: Test) {
testTask.outputs.upToDateWhen { false }
testTask.ignoreFailures = true
testTask.filter {
isFailOnNoMatchingTests = false
patterns["include"]?.let {
it.forEach { pattern ->
includeTestsMatching(pattern)
}
}
patterns["exclude"]?.let {
it.forEach { pattern ->
excludeTestsMatching(pattern)
}
}
}
}
@Override
@TaskAction
override fun executeTests() {
// Do nothing
}
}
+18
View File
@@ -0,0 +1,18 @@
com.jetbrains.mpp.versions*, include
*GradleMultiplatformHighlightingTest*, include
*MultiplatformKaptProjectImportingTest*, include
*MultiplatformProjectImportingTest*, include
*DiagnosticsTestGenerated*, include
*DiagnosticsTestWithStdLibGenerated*, include
*HierarchicalMultiplatformProjectImportingTest*, include
*MultiplatformAnalysisTest*, include
*MultiPlatformIntegrationTestGenerated*, include
*LightAnalysisModeTestGenerated$Multiplatform*, include
*IrJsCodegenBoxTestGenerated$Multiplatform*, include
*IrJsCodegenBoxES6TestGenerated$Multiplatform*, include
*QuickFixMultiModuleTestGenerated*, include
*HierarchicalExpectActualTestGenerated*, include
*HierarchicalMppIT*, include
*MultiplatformGradleIT*, include
*KotlinProjectIT*, include
*NewMultiplatformIT*, include
1 com.jetbrains.mpp.versions* include
2 *GradleMultiplatformHighlightingTest* include
3 *MultiplatformKaptProjectImportingTest* include
4 *MultiplatformProjectImportingTest* include
5 *DiagnosticsTestGenerated* include
6 *DiagnosticsTestWithStdLibGenerated* include
7 *HierarchicalMultiplatformProjectImportingTest* include
8 *MultiplatformAnalysisTest* include
9 *MultiPlatformIntegrationTestGenerated* include
10 *LightAnalysisModeTestGenerated$Multiplatform* include
11 *IrJsCodegenBoxTestGenerated$Multiplatform* include
12 *IrJsCodegenBoxES6TestGenerated$Multiplatform* include
13 *QuickFixMultiModuleTestGenerated* include
14 *HierarchicalExpectActualTestGenerated* include
15 *HierarchicalMppIT* include
16 *MultiplatformGradleIT* include
17 *KotlinProjectIT* include
18 *NewMultiplatformIT* include