[Gradle] Get rid of deprecated properties usage in KotlinTestReport

#KT-52490 Fixed
This commit is contained in:
Alexander Likhachev
2022-12-22 02:29:41 +01:00
committed by Space Team
parent b5482b3812
commit 2530dd836a
11 changed files with 185 additions and 12 deletions
@@ -151,6 +151,11 @@ abstract class DefaultKotlinBasePlugin : KotlinBasePlugin {
MppTestReportHelper.MppTestReportHelperVariantFactory::class,
DefaultMppTestReportHelperVariantFactory()
)
factories.putIfAbsent(
KotlinTestReportCompatibilityHelper.KotlinTestReportCompatibilityHelperVariantFactory::class,
DefaultKotlinTestReportCompatibilityHelperVariantFactory()
)
}
protected fun setupAttributeMatchingStrategy(
@@ -0,0 +1,47 @@
/*
* Copyright 2010-2022 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.
*/
package org.jetbrains.kotlin.gradle.plugin.internal
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.testing.AbstractTestTask
import org.gradle.api.tasks.testing.TestReport
import org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport
import java.io.File
/**
* Handles the differences in the [TestReport] API introduced in Gradle 7.4
* See the [migration guide](https://docs.gradle.org/7.6/userguide/upgrading_version_7.html#replacement_methods_in_org_gradle_api_tasks_testing_testreport).
*/
interface KotlinTestReportCompatibilityHelper {
fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty
fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File)
fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask)
interface KotlinTestReportCompatibilityHelperVariantFactory : VariantImplementationFactories.VariantImplementationFactory {
fun getInstance(objectFactory: ObjectFactory): KotlinTestReportCompatibilityHelper
}
}
internal class DefaultKotlinTestReportCompatibilityHelperVariantFactory :
KotlinTestReportCompatibilityHelper.KotlinTestReportCompatibilityHelperVariantFactory {
override fun getInstance(objectFactory: ObjectFactory): KotlinTestReportCompatibilityHelper = DefaultKotlinTestReportCompatibilityHelper()
}
internal class DefaultKotlinTestReportCompatibilityHelper : KotlinTestReportCompatibilityHelper {
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty = kotlinTestReport.destinationDirectory
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File) {
kotlinTestReport.destinationDirectory.fileValue(directory).finalizeValueOnRead()
}
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
kotlinTestReport.testResults.from(task.binaryResultsDirectory)
}
}
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.testing.internal
import org.gradle.api.GradleException
import org.gradle.api.execution.TaskExecutionGraph
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.Input
@@ -16,10 +17,10 @@ import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.testing.*
import org.jetbrains.kotlin.gradle.internal.testing.KotlinTestRunnerListener
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.internal.KotlinTestReportCompatibilityHelper
import org.jetbrains.kotlin.gradle.tasks.KotlinTest
import org.jetbrains.kotlin.gradle.utils.appendLine
import java.io.File
import java.net.URI
import org.jetbrains.kotlin.gradle.utils.toUri
/**
* Aggregates tests reports for kotlin test tasks added by [registerTestTask].
@@ -77,6 +78,9 @@ abstract class KotlinTestReport : TestReport() {
private val hasFailedTests: Boolean
get() = testReportService.hasFailedTests(path)
@get:Internal
internal abstract val testReportCompatibilityHelper: Property<KotlinTestReportCompatibilityHelper>
private fun computeAllParentTasksPaths(): List<String> {
val allParents = mutableListOf<String>()
var cur: KotlinTestReport? = this
@@ -130,15 +134,17 @@ abstract class KotlinTestReport : TestReport() {
}
private fun reportOn(task: AbstractTestTask) {
reportOn(task.binaryResultsDirectory)
testReportCompatibilityHelper.get().addTestResultsFrom(this, task)
}
@get:Internal
abstract val htmlReportFile: RegularFileProperty
@Suppress("unused")
@Deprecated("Use `htmlReportFile` instead", ReplaceWith("htmlReportFile"))
@get:Internal
open val htmlReportUrl: String?
@Internal get() = destinationDir?.let { asClickableFileUrl(it.resolve("index.html")) }
private fun asClickableFileUrl(path: File): String {
return URI("file", "", path.toURI().path, null, null).toString()
}
get() = htmlReportFile.orNull?.toUri().toString()
@TaskAction
fun checkFailedTests() {
@@ -157,9 +163,8 @@ abstract class KotlinTestReport : TestReport() {
private fun getFailingTestsMessage(): String {
val message = StringBuilder("There were failing tests.")
val reportUrl = htmlReportUrl
if (reportUrl != null) {
message.append(" See the report at: $reportUrl")
if (htmlReportFile.isPresent) {
message.append(" See the report at: ${htmlReportFile.get().toUri()}")
}
return message.toString()
}
@@ -13,6 +13,8 @@ import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.testing.AbstractTestTask
import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.jetbrains.kotlin.gradle.logging.kotlinInfo
import org.jetbrains.kotlin.gradle.plugin.internal.KotlinTestReportCompatibilityHelper
import org.jetbrains.kotlin.gradle.plugin.variantImplementationFactory
import org.jetbrains.kotlin.gradle.tasks.dependsOn
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
import org.jetbrains.kotlin.gradle.tasks.registerTask
@@ -85,15 +87,21 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = "
aggregate.description = description
aggregate.group = JavaBasePlugin.VERIFICATION_GROUP
aggregate.destinationDir = project.testReportsDir.resolve(reportName)
val compatibilityHelper = project.gradle
.variantImplementationFactory<KotlinTestReportCompatibilityHelper.KotlinTestReportCompatibilityHelperVariantFactory>()
.getInstance(project.objects)
compatibilityHelper.setDestinationDirectory(aggregate, project.testReportsDir.resolve(reportName))
val isIdeaActive = project.readSystemPropertyAtConfigurationTime("idea.active").isPresent
if (isIdeaActive) {
aggregate.extensions.extraProperties.set("idea.internal.test", true)
}
aggregate.htmlReportFile.value(compatibilityHelper.getDestinationDirectory(aggregate).file("index.html")).disallowChanges()
aggregate.usesService(testReportService)
aggregate.testReportServiceProvider.value(testReportService).finalizeValueOnRead()
aggregate.testReportCompatibilityHelper.value(compatibilityHelper).finalizeValueOnRead()
project.gradle.taskGraph.whenReady { graph ->
aggregate.maybeOverrideReporting(graph)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.Project
import org.gradle.api.file.RegularFile
import java.io.File
import java.io.IOException
import java.nio.file.Files
@@ -114,3 +115,5 @@ fun contentEquals(file1: File, file2: File): Boolean {
}
}
}
internal fun RegularFile.toUri() = asFile.toPath().toUri()
@@ -147,4 +147,6 @@ private fun Project.registerVariantImplementations() {
ConfigurationTimePropertiesAccessorG70.ConfigurationTimePropertiesAccessorVariantFactoryG70()
factories[MppTestReportHelper.MppTestReportHelperVariantFactory::class] =
MppTestReportHelperG70.MppTestReportHelperVariantFactoryG70()
factories[KotlinTestReportCompatibilityHelper.KotlinTestReportCompatibilityHelperVariantFactory::class] =
KotlinTestReportCompatibilityHelperG70.KotlinTestReportCompatibilityHelperVariantFactoryG70()
}
@@ -0,0 +1,33 @@
/*
* Copyright 2010-2022 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.
*/
package org.jetbrains.kotlin.gradle.plugin.internal
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.testing.AbstractTestTask
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport
import java.io.File
internal class KotlinTestReportCompatibilityHelperG70(
private val objectFactory: ObjectFactory
) : KotlinTestReportCompatibilityHelper {
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty =
objectFactory.directoryProperty().fileValue(kotlinTestReport.destinationDir)
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File) {
kotlinTestReport.destinationDir = directory
}
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
kotlinTestReport.reportOn(task.binaryResultsDirectory)
}
internal class KotlinTestReportCompatibilityHelperVariantFactoryG70 :
KotlinTestReportCompatibilityHelper.KotlinTestReportCompatibilityHelperVariantFactory {
override fun getInstance(objectFactory: ObjectFactory): KotlinTestReportCompatibilityHelper =
KotlinTestReportCompatibilityHelperG70(objectFactory)
}
}
@@ -148,4 +148,6 @@ private fun Project.registerVariantImplementations() {
ConfigurationTimePropertiesAccessorG71.ConfigurationTimePropertiesAccessorVariantFactoryG71()
factories[MppTestReportHelper.MppTestReportHelperVariantFactory::class] =
MppTestReportHelperG71.MppTestReportHelperVariantFactoryG71()
factories[KotlinTestReportCompatibilityHelper.KotlinTestReportCompatibilityHelperVariantFactory::class] =
KotlinTestReportCompatibilityHelperG71.KotlinTestReportCompatibilityHelperVariantFactoryG71()
}
@@ -0,0 +1,33 @@
/*
* Copyright 2010-2022 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.
*/
package org.jetbrains.kotlin.gradle.plugin.internal
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.testing.AbstractTestTask
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport
import java.io.File
internal class KotlinTestReportCompatibilityHelperG71(
private val objectFactory: ObjectFactory
) : KotlinTestReportCompatibilityHelper {
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty =
objectFactory.directoryProperty().fileValue(kotlinTestReport.destinationDir)
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File) {
kotlinTestReport.destinationDir = directory
}
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
kotlinTestReport.reportOn(task.binaryResultsDirectory)
}
internal class KotlinTestReportCompatibilityHelperVariantFactoryG71 :
KotlinTestReportCompatibilityHelper.KotlinTestReportCompatibilityHelperVariantFactory {
override fun getInstance(objectFactory: ObjectFactory): KotlinTestReportCompatibilityHelper =
KotlinTestReportCompatibilityHelperG71(objectFactory)
}
}
@@ -153,4 +153,6 @@ private fun Project.registerVariantImplementations() {
ConfigurationTimePropertiesAccessorG6.ConfigurationTimePropertiesAccessorVariantFactoryG6()
factories[MppTestReportHelper.MppTestReportHelperVariantFactory::class] =
MppTestReportHelperG6.MppTestReportHelperVariantFactoryG6()
factories[KotlinTestReportCompatibilityHelper.KotlinTestReportCompatibilityHelperVariantFactory::class] =
KotlinTestReportCompatibilityHelperG6.KotlinTestReportCompatibilityHelperVariantFactoryG6()
}
@@ -0,0 +1,33 @@
/*
* Copyright 2010-2022 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.
*/
package org.jetbrains.kotlin.gradle.plugin.internal
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.testing.AbstractTestTask
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport
import java.io.File
internal class KotlinTestReportCompatibilityHelperG6(
private val objectFactory: ObjectFactory
) : KotlinTestReportCompatibilityHelper {
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty =
objectFactory.directoryProperty().fileValue(kotlinTestReport.destinationDir)
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File) {
kotlinTestReport.destinationDir = directory
}
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
kotlinTestReport.reportOn(task.binaryResultsDirectory)
}
internal class KotlinTestReportCompatibilityHelperVariantFactoryG6 :
KotlinTestReportCompatibilityHelper.KotlinTestReportCompatibilityHelperVariantFactory {
override fun getInstance(objectFactory: ObjectFactory): KotlinTestReportCompatibilityHelper =
KotlinTestReportCompatibilityHelperG6(objectFactory)
}
}