[Gradle] Fix early buildDir capturing in kotlinTestRegistry
User may change build directory location in the script, and our plugin should handle such situations correctly. ^KT-61295 Fixed
This commit is contained in:
committed by
Space Team
parent
5c8d55fba7
commit
570d9dbb19
+2
-3
@@ -8,8 +8,6 @@ package org.jetbrains.kotlin.gradle.mpp
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.testbase.*
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.condition.OS
|
||||
import kotlin.io.path.absolutePathString
|
||||
import kotlin.io.path.appendText
|
||||
import kotlin.io.path.readText
|
||||
|
||||
@@ -78,6 +76,8 @@ class BrokenLazyConfigurationIT : KGPBaseTest() {
|
||||
|
||||
@MppGradlePluginTests
|
||||
@GradleTest
|
||||
// Required Gradle APIs to avoid buildDir early capture only available since 7.4
|
||||
@GradleTestVersions(minVersion = TestVersions.Gradle.G_7_4)
|
||||
@DisplayName("Changing build directory after task configuration doesn't lead to failures")
|
||||
fun changingBuildDirInMpp(gradleVersion: GradleVersion) {
|
||||
project("new-mpp-lib-with-tests", gradleVersion) {
|
||||
@@ -95,7 +95,6 @@ class BrokenLazyConfigurationIT : KGPBaseTest() {
|
||||
} catch (e: AssertionError) {
|
||||
val expectedTopLevelSubdirectoriesMapping = mapOf(
|
||||
"js" to "KT-61294",
|
||||
"reports" to "KT-61295",
|
||||
)
|
||||
val expectedTopLevelSubdirectories = expectedTopLevelSubdirectoriesMapping.keys
|
||||
val actualTopLevelDirectories =
|
||||
|
||||
+5
-4
@@ -5,13 +5,14 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.file.Directory
|
||||
import org.gradle.api.file.DirectoryProperty
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.api.provider.Provider
|
||||
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
|
||||
@@ -20,7 +21,7 @@ import java.io.File
|
||||
interface KotlinTestReportCompatibilityHelper {
|
||||
fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty
|
||||
|
||||
fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File)
|
||||
fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: Provider<Directory>)
|
||||
|
||||
fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask)
|
||||
|
||||
@@ -37,8 +38,8 @@ internal class DefaultKotlinTestReportCompatibilityHelperVariantFactory :
|
||||
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 setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: Provider<Directory>) {
|
||||
kotlinTestReport.destinationDirectory.value(directory).finalizeValueOnRead()
|
||||
}
|
||||
|
||||
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
|
||||
|
||||
+1
-2
@@ -81,7 +81,6 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = "
|
||||
val existed = project.locateTask<KotlinTestReport>(name)
|
||||
if (existed != null) return existed
|
||||
|
||||
val reportName = name
|
||||
val testReportService = TestReportService.registerIfAbsent(project)
|
||||
val aggregate: TaskProvider<KotlinTestReport> = project.registerTask(name) { aggregate ->
|
||||
aggregate.description = description
|
||||
@@ -91,7 +90,7 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = "
|
||||
.variantImplementationFactory<KotlinTestReportCompatibilityHelper.KotlinTestReportCompatibilityHelperVariantFactory>()
|
||||
.getInstance(project.objects)
|
||||
|
||||
compatibilityHelper.setDestinationDirectory(aggregate, project.testReportsDir.resolve(reportName))
|
||||
compatibilityHelper.setDestinationDirectory(aggregate, project.testReportsDir.map { it.dir(name) })
|
||||
|
||||
val isIdeaActive = project.readSystemPropertyAtConfigurationTime("idea.active").isPresent
|
||||
|
||||
|
||||
+15
-19
@@ -6,35 +6,31 @@
|
||||
package org.jetbrains.kotlin.gradle.testing.internal
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.internal.plugins.DslObject
|
||||
import org.gradle.api.file.Directory
|
||||
import org.gradle.api.file.DirectoryProperty
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.reporting.ReportingExtension
|
||||
import org.gradle.api.tasks.testing.TestTaskReports
|
||||
import org.gradle.testing.base.plugins.TestingBasePlugin
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTest
|
||||
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
|
||||
import java.io.File
|
||||
|
||||
internal val Project.testResultsDir: File
|
||||
get() = project.buildDir.resolve(TestingBasePlugin.TEST_RESULTS_DIR_NAME)
|
||||
internal val Project.reportsDir: File
|
||||
get() = project.extensions.getByType(ReportingExtension::class.java).baseDir
|
||||
private val Project.testResultsDir: Provider<Directory>
|
||||
get() = project.layout.buildDirectory.dir(TestingBasePlugin.TEST_RESULTS_DIR_NAME)
|
||||
private val Project.reportsDir: DirectoryProperty
|
||||
get() = project.extensions.getByType(ReportingExtension::class.java).baseDirectory
|
||||
|
||||
internal val Project.testReportsDir: File
|
||||
get() = reportsDir.resolve(TestingBasePlugin.TESTS_DIR_NAME)
|
||||
internal val Project.testReportsDir: Provider<Directory>
|
||||
get() = reportsDir.dir(TestingBasePlugin.TESTS_DIR_NAME)
|
||||
|
||||
internal fun KotlinTest.configureConventions() {
|
||||
reports.configureConventions(project, name)
|
||||
|
||||
fun binaryResultsDirDefault(): File = project.testResultsDir.resolve("$name/binary")
|
||||
@Suppress("UnstableApiUsage")
|
||||
binaryResultsDirectory.convention(project.layout.buildDirectory.dir(binaryResultsDirDefault().toRelativeString(project.buildDir)))
|
||||
|
||||
binaryResultsDirectory
|
||||
.convention(project.testResultsDir.map { it.dir("$name/binary") })
|
||||
.finalizeValueOnRead()
|
||||
}
|
||||
|
||||
internal fun TestTaskReports.configureConventions(project: Project, name: String) {
|
||||
val htmlReport = DslObject(html)
|
||||
val xmlReport = DslObject(junitXml)
|
||||
|
||||
xmlReport.conventionMapping.map("destination") { project.testResultsDir.resolve(name) }
|
||||
htmlReport.conventionMapping.map("destination") { project.testReportsDir.resolve(name) }
|
||||
}
|
||||
html.outputLocation.convention(project.testReportsDir.map { it.dir(name) }).finalizeValueOnRead()
|
||||
junitXml.outputLocation.convention(project.testResultsDir.map { it.dir(name) }).finalizeValueOnRead()
|
||||
}
|
||||
|
||||
+4
-3
@@ -5,11 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.file.Directory
|
||||
import org.gradle.api.file.DirectoryProperty
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.api.provider.Provider
|
||||
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
|
||||
@@ -17,8 +18,8 @@ internal class KotlinTestReportCompatibilityHelperG70(
|
||||
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty =
|
||||
objectFactory.directoryProperty().fileValue(kotlinTestReport.destinationDir)
|
||||
|
||||
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File) {
|
||||
kotlinTestReport.destinationDir = directory
|
||||
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: Provider<Directory>) {
|
||||
kotlinTestReport.destinationDir = directory.get().asFile
|
||||
}
|
||||
|
||||
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
|
||||
|
||||
+4
-3
@@ -5,11 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.file.Directory
|
||||
import org.gradle.api.file.DirectoryProperty
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.api.provider.Provider
|
||||
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
|
||||
@@ -17,8 +18,8 @@ internal class KotlinTestReportCompatibilityHelperG71(
|
||||
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty =
|
||||
objectFactory.directoryProperty().fileValue(kotlinTestReport.destinationDir)
|
||||
|
||||
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File) {
|
||||
kotlinTestReport.destinationDir = directory
|
||||
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: Provider<Directory>) {
|
||||
kotlinTestReport.destinationDir = directory.get().asFile
|
||||
}
|
||||
|
||||
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
|
||||
|
||||
+4
-3
@@ -5,11 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.file.Directory
|
||||
import org.gradle.api.file.DirectoryProperty
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.api.provider.Provider
|
||||
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
|
||||
@@ -17,8 +18,8 @@ internal class KotlinTestReportCompatibilityHelperG6(
|
||||
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty =
|
||||
objectFactory.directoryProperty().fileValue(kotlinTestReport.destinationDir)
|
||||
|
||||
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File) {
|
||||
kotlinTestReport.destinationDir = directory
|
||||
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: Provider<Directory>) {
|
||||
kotlinTestReport.destinationDir = directory.get().asFile
|
||||
}
|
||||
|
||||
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
|
||||
|
||||
Reference in New Issue
Block a user