diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-plugin-project/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-plugin-project/gradle.properties new file mode 100644 index 00000000000..a4a181c3de2 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-plugin-project/gradle.properties @@ -0,0 +1 @@ +kotlin.tests.individualTaskReports=true \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-with-tests/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-with-tests/gradle.properties new file mode 100644 index 00000000000..a4a181c3de2 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-with-tests/gradle.properties @@ -0,0 +1 @@ +kotlin.tests.individualTaskReports=true \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt index 4955f816844..7aaf2d3192e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt @@ -96,6 +96,15 @@ internal class PropertiesProvider(private val project: Project) { val parallelTasksInProject: Boolean? get() = booleanProperty("kotlin.parallel.tasks.in.project") + /** + * Enables individual test task reporting for aggregated test tasks. + * + * By default individual test tasks will not fail build if this task will be executed, + * also individual html and xml reports will replaced by one consolidated html report. + */ + val individualTaskReports: Boolean? + get() = booleanProperty("kotlin.tests.individualTaskReports") + private fun booleanProperty(propName: String): Boolean? = property(propName)?.toBoolean() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestReport.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestReport.kt index 09958c9d5a9..864e23914d7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestReport.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestReport.kt @@ -11,6 +11,7 @@ import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.testing.* +import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import java.io.File import java.net.URI @@ -19,7 +20,8 @@ import java.net.URI * * Individual test tasks will not fail build if this task will be executed, * also individual html and xml reports will replaced by one consolidated html report. - * This behavior can be disabled by setting [overrideReporting] to `false`. + * This behavior can be disabled by setting `kotlin.tests.individualTaskReports` property + * to true. * * Aggregate test reports may form hierarchy, for example: * - allTest // aggregates all tests @@ -45,8 +47,10 @@ open class KotlinTestReport : TestReport() { @Internal val children = mutableListOf() - @Input - var overrideReporting: Boolean = true + private val projectProperties = PropertiesProvider(project) + + val overrideReporting: Boolean + @Input get() = projectProperties.individualTaskReports == null @Input var checkFailedTests: Boolean = false @@ -139,6 +143,7 @@ open class KotlinTestReport : TestReport() { } fun maybeOverrideReporting(graph: TaskExecutionGraph) { + if (!overrideReporting) return if (!graph.hasTask(this)) return // only topmost aggregate should override reporting