[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.gradle.util.GradleVersion
|
||||||
import org.jetbrains.kotlin.gradle.testbase.*
|
import org.jetbrains.kotlin.gradle.testbase.*
|
||||||
import org.junit.jupiter.api.DisplayName
|
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.appendText
|
||||||
import kotlin.io.path.readText
|
import kotlin.io.path.readText
|
||||||
|
|
||||||
@@ -78,6 +76,8 @@ class BrokenLazyConfigurationIT : KGPBaseTest() {
|
|||||||
|
|
||||||
@MppGradlePluginTests
|
@MppGradlePluginTests
|
||||||
@GradleTest
|
@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")
|
@DisplayName("Changing build directory after task configuration doesn't lead to failures")
|
||||||
fun changingBuildDirInMpp(gradleVersion: GradleVersion) {
|
fun changingBuildDirInMpp(gradleVersion: GradleVersion) {
|
||||||
project("new-mpp-lib-with-tests", gradleVersion) {
|
project("new-mpp-lib-with-tests", gradleVersion) {
|
||||||
@@ -95,7 +95,6 @@ class BrokenLazyConfigurationIT : KGPBaseTest() {
|
|||||||
} catch (e: AssertionError) {
|
} catch (e: AssertionError) {
|
||||||
val expectedTopLevelSubdirectoriesMapping = mapOf(
|
val expectedTopLevelSubdirectoriesMapping = mapOf(
|
||||||
"js" to "KT-61294",
|
"js" to "KT-61294",
|
||||||
"reports" to "KT-61295",
|
|
||||||
)
|
)
|
||||||
val expectedTopLevelSubdirectories = expectedTopLevelSubdirectoriesMapping.keys
|
val expectedTopLevelSubdirectories = expectedTopLevelSubdirectoriesMapping.keys
|
||||||
val actualTopLevelDirectories =
|
val actualTopLevelDirectories =
|
||||||
|
|||||||
+5
-4
@@ -5,13 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||||
|
|
||||||
|
import org.gradle.api.file.Directory
|
||||||
import org.gradle.api.file.DirectoryProperty
|
import org.gradle.api.file.DirectoryProperty
|
||||||
import org.gradle.api.model.ObjectFactory
|
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.AbstractTestTask
|
||||||
import org.gradle.api.tasks.testing.TestReport
|
import org.gradle.api.tasks.testing.TestReport
|
||||||
import org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories
|
import org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport
|
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles the differences in the [TestReport] API introduced in Gradle 7.4
|
* Handles the differences in the [TestReport] API introduced in Gradle 7.4
|
||||||
@@ -20,7 +21,7 @@ import java.io.File
|
|||||||
interface KotlinTestReportCompatibilityHelper {
|
interface KotlinTestReportCompatibilityHelper {
|
||||||
fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty
|
fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty
|
||||||
|
|
||||||
fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File)
|
fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: Provider<Directory>)
|
||||||
|
|
||||||
fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask)
|
fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask)
|
||||||
|
|
||||||
@@ -37,8 +38,8 @@ internal class DefaultKotlinTestReportCompatibilityHelperVariantFactory :
|
|||||||
internal class DefaultKotlinTestReportCompatibilityHelper : KotlinTestReportCompatibilityHelper {
|
internal class DefaultKotlinTestReportCompatibilityHelper : KotlinTestReportCompatibilityHelper {
|
||||||
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty = kotlinTestReport.destinationDirectory
|
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty = kotlinTestReport.destinationDirectory
|
||||||
|
|
||||||
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File) {
|
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: Provider<Directory>) {
|
||||||
kotlinTestReport.destinationDirectory.fileValue(directory).finalizeValueOnRead()
|
kotlinTestReport.destinationDirectory.value(directory).finalizeValueOnRead()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
|
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)
|
val existed = project.locateTask<KotlinTestReport>(name)
|
||||||
if (existed != null) return existed
|
if (existed != null) return existed
|
||||||
|
|
||||||
val reportName = name
|
|
||||||
val testReportService = TestReportService.registerIfAbsent(project)
|
val testReportService = TestReportService.registerIfAbsent(project)
|
||||||
val aggregate: TaskProvider<KotlinTestReport> = project.registerTask(name) { aggregate ->
|
val aggregate: TaskProvider<KotlinTestReport> = project.registerTask(name) { aggregate ->
|
||||||
aggregate.description = description
|
aggregate.description = description
|
||||||
@@ -91,7 +90,7 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = "
|
|||||||
.variantImplementationFactory<KotlinTestReportCompatibilityHelper.KotlinTestReportCompatibilityHelperVariantFactory>()
|
.variantImplementationFactory<KotlinTestReportCompatibilityHelper.KotlinTestReportCompatibilityHelperVariantFactory>()
|
||||||
.getInstance(project.objects)
|
.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
|
val isIdeaActive = project.readSystemPropertyAtConfigurationTime("idea.active").isPresent
|
||||||
|
|
||||||
|
|||||||
+14
-18
@@ -6,35 +6,31 @@
|
|||||||
package org.jetbrains.kotlin.gradle.testing.internal
|
package org.jetbrains.kotlin.gradle.testing.internal
|
||||||
|
|
||||||
import org.gradle.api.Project
|
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.reporting.ReportingExtension
|
||||||
import org.gradle.api.tasks.testing.TestTaskReports
|
import org.gradle.api.tasks.testing.TestTaskReports
|
||||||
import org.gradle.testing.base.plugins.TestingBasePlugin
|
import org.gradle.testing.base.plugins.TestingBasePlugin
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTest
|
import org.jetbrains.kotlin.gradle.tasks.KotlinTest
|
||||||
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
|
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
internal val Project.testResultsDir: File
|
private val Project.testResultsDir: Provider<Directory>
|
||||||
get() = project.buildDir.resolve(TestingBasePlugin.TEST_RESULTS_DIR_NAME)
|
get() = project.layout.buildDirectory.dir(TestingBasePlugin.TEST_RESULTS_DIR_NAME)
|
||||||
internal val Project.reportsDir: File
|
private val Project.reportsDir: DirectoryProperty
|
||||||
get() = project.extensions.getByType(ReportingExtension::class.java).baseDir
|
get() = project.extensions.getByType(ReportingExtension::class.java).baseDirectory
|
||||||
|
|
||||||
internal val Project.testReportsDir: File
|
internal val Project.testReportsDir: Provider<Directory>
|
||||||
get() = reportsDir.resolve(TestingBasePlugin.TESTS_DIR_NAME)
|
get() = reportsDir.dir(TestingBasePlugin.TESTS_DIR_NAME)
|
||||||
|
|
||||||
internal fun KotlinTest.configureConventions() {
|
internal fun KotlinTest.configureConventions() {
|
||||||
reports.configureConventions(project, name)
|
reports.configureConventions(project, name)
|
||||||
|
|
||||||
fun binaryResultsDirDefault(): File = project.testResultsDir.resolve("$name/binary")
|
binaryResultsDirectory
|
||||||
@Suppress("UnstableApiUsage")
|
.convention(project.testResultsDir.map { it.dir("$name/binary") })
|
||||||
binaryResultsDirectory.convention(project.layout.buildDirectory.dir(binaryResultsDirDefault().toRelativeString(project.buildDir)))
|
.finalizeValueOnRead()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun TestTaskReports.configureConventions(project: Project, name: String) {
|
internal fun TestTaskReports.configureConventions(project: Project, name: String) {
|
||||||
val htmlReport = DslObject(html)
|
html.outputLocation.convention(project.testReportsDir.map { it.dir(name) }).finalizeValueOnRead()
|
||||||
val xmlReport = DslObject(junitXml)
|
junitXml.outputLocation.convention(project.testResultsDir.map { it.dir(name) }).finalizeValueOnRead()
|
||||||
|
|
||||||
xmlReport.conventionMapping.map("destination") { project.testResultsDir.resolve(name) }
|
|
||||||
htmlReport.conventionMapping.map("destination") { project.testReportsDir.resolve(name) }
|
|
||||||
}
|
}
|
||||||
+4
-3
@@ -5,11 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||||
|
|
||||||
|
import org.gradle.api.file.Directory
|
||||||
import org.gradle.api.file.DirectoryProperty
|
import org.gradle.api.file.DirectoryProperty
|
||||||
import org.gradle.api.model.ObjectFactory
|
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.AbstractTestTask
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport
|
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
internal class KotlinTestReportCompatibilityHelperG70(
|
internal class KotlinTestReportCompatibilityHelperG70(
|
||||||
private val objectFactory: ObjectFactory
|
private val objectFactory: ObjectFactory
|
||||||
@@ -17,8 +18,8 @@ internal class KotlinTestReportCompatibilityHelperG70(
|
|||||||
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty =
|
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty =
|
||||||
objectFactory.directoryProperty().fileValue(kotlinTestReport.destinationDir)
|
objectFactory.directoryProperty().fileValue(kotlinTestReport.destinationDir)
|
||||||
|
|
||||||
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File) {
|
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: Provider<Directory>) {
|
||||||
kotlinTestReport.destinationDir = directory
|
kotlinTestReport.destinationDir = directory.get().asFile
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
|
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
|
||||||
|
|||||||
+4
-3
@@ -5,11 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||||
|
|
||||||
|
import org.gradle.api.file.Directory
|
||||||
import org.gradle.api.file.DirectoryProperty
|
import org.gradle.api.file.DirectoryProperty
|
||||||
import org.gradle.api.model.ObjectFactory
|
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.AbstractTestTask
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport
|
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
internal class KotlinTestReportCompatibilityHelperG71(
|
internal class KotlinTestReportCompatibilityHelperG71(
|
||||||
private val objectFactory: ObjectFactory
|
private val objectFactory: ObjectFactory
|
||||||
@@ -17,8 +18,8 @@ internal class KotlinTestReportCompatibilityHelperG71(
|
|||||||
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty =
|
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty =
|
||||||
objectFactory.directoryProperty().fileValue(kotlinTestReport.destinationDir)
|
objectFactory.directoryProperty().fileValue(kotlinTestReport.destinationDir)
|
||||||
|
|
||||||
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File) {
|
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: Provider<Directory>) {
|
||||||
kotlinTestReport.destinationDir = directory
|
kotlinTestReport.destinationDir = directory.get().asFile
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
|
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
|
||||||
|
|||||||
+4
-3
@@ -5,11 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||||
|
|
||||||
|
import org.gradle.api.file.Directory
|
||||||
import org.gradle.api.file.DirectoryProperty
|
import org.gradle.api.file.DirectoryProperty
|
||||||
import org.gradle.api.model.ObjectFactory
|
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.AbstractTestTask
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport
|
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
internal class KotlinTestReportCompatibilityHelperG6(
|
internal class KotlinTestReportCompatibilityHelperG6(
|
||||||
private val objectFactory: ObjectFactory
|
private val objectFactory: ObjectFactory
|
||||||
@@ -17,8 +18,8 @@ internal class KotlinTestReportCompatibilityHelperG6(
|
|||||||
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty =
|
override fun getDestinationDirectory(kotlinTestReport: KotlinTestReport): DirectoryProperty =
|
||||||
objectFactory.directoryProperty().fileValue(kotlinTestReport.destinationDir)
|
objectFactory.directoryProperty().fileValue(kotlinTestReport.destinationDir)
|
||||||
|
|
||||||
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: File) {
|
override fun setDestinationDirectory(kotlinTestReport: KotlinTestReport, directory: Provider<Directory>) {
|
||||||
kotlinTestReport.destinationDir = directory
|
kotlinTestReport.destinationDir = directory.get().asFile
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
|
override fun addTestResultsFrom(kotlinTestReport: KotlinTestReport, task: AbstractTestTask) {
|
||||||
|
|||||||
Reference in New Issue
Block a user