Avoid resolving deprecated configurations in tests (#3970)
* Avoid resolving deprecated configurations in tests This PR enables more integration tests run with warning-mode=fail by updating "resolveAllConfigurations" task in a way where we don't resolve deprecated configurations and instead check dependencies on alternative configurations. * Add custom resolvable configuration for testing
This commit is contained in:
+1
-1
@@ -776,7 +776,7 @@ class KotlinGradleIT : BaseGradleIT() {
|
||||
setupWorkingDir()
|
||||
// Add a dependency with an explicit lower Kotlin version that has a kotlin-stdlib transitive dependency:
|
||||
gradleBuildScript().appendText("\ndependencies { implementation 'org.jetbrains.kotlin:kotlin-reflect:1.2.71' }")
|
||||
testResolveAllConfigurations(options = defaultBuildOptions().copy(warningMode = WarningMode.Summary)) {
|
||||
testResolveAllConfigurations {
|
||||
assertSuccessful()
|
||||
assertContains(">> :compileClasspath --> kotlin-reflect-1.2.71.jar")
|
||||
// Check that the default newer Kotlin version still wins for 'kotlin-stdlib':
|
||||
|
||||
+7
-9
@@ -1368,14 +1368,12 @@ class NewMultiplatformIT : BaseGradleIT() {
|
||||
fun testDependenciesDsl() = with(transformProjectWithPluginsDsl("newMppDependenciesDsl")) {
|
||||
val originalBuildscriptContent = gradleBuildScript("app").readText()
|
||||
|
||||
fun testDependencies() =
|
||||
testResolveAllConfigurations("app", options = defaultBuildOptions().copy(warningMode = WarningMode.Summary)) {
|
||||
assertContains(">> :app:testNonTransitiveStringNotationApiDependenciesMetadata --> junit-4.12.jar")
|
||||
assertEquals(
|
||||
1,
|
||||
(Regex.escape(">> :app:testNonTransitiveStringNotationApiDependenciesMetadata") + " .*").toRegex().findAll(output)
|
||||
.count()
|
||||
)
|
||||
fun testDependencies() = testResolveAllConfigurations("app") {
|
||||
assertContains(">> :app:testNonTransitiveStringNotationApiDependenciesMetadata --> junit-4.12.jar")
|
||||
assertEquals(
|
||||
1,
|
||||
(Regex.escape(">> :app:testNonTransitiveStringNotationApiDependenciesMetadata") + " .*").toRegex().findAll(output).count()
|
||||
)
|
||||
|
||||
assertContains(">> :app:testNonTransitiveDependencyNotationApiDependenciesMetadata --> kotlin-reflect-${defaultBuildOptions().kotlinVersion}.jar")
|
||||
assertEquals(
|
||||
@@ -1405,7 +1403,7 @@ class NewMultiplatformIT : BaseGradleIT() {
|
||||
|
||||
@Test
|
||||
fun testMultipleTargetsSamePlatform() = with(Project("newMppMultipleTargetsSamePlatform", gradleVersion)) {
|
||||
testResolveAllConfigurations("app", options = defaultBuildOptions().copy(warningMode = WarningMode.Summary)) {
|
||||
testResolveAllConfigurations("app") {
|
||||
assertContains(">> :app:junitCompileClasspath --> lib-junit.jar")
|
||||
assertContains(">> :app:junitCompileClasspath --> junit-4.12.jar")
|
||||
|
||||
|
||||
+34
-29
@@ -14,10 +14,6 @@ import kotlin.test.assertTrue
|
||||
class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
private val gradleVersion = GradleVersionRequired.FOR_MPP_SUPPORT
|
||||
|
||||
override fun defaultBuildOptions(): BuildOptions {
|
||||
return super.defaultBuildOptions().copy(warningMode = WarningMode.Summary)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testJvmKtAppResolvesMppLib() {
|
||||
val outerProject = Project("sample-lib", gradleVersion, "new-mpp-lib-and-app")
|
||||
@@ -25,10 +21,9 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
|
||||
with(outerProject) {
|
||||
embedProject(innerProject)
|
||||
gradleBuildScript(innerProject.projectName).appendText("\ndependencies { compile rootProject }")
|
||||
|
||||
gradleBuildScript(innerProject.projectName).appendText("\ndependencies { implementation rootProject }")
|
||||
testResolveAllConfigurations(innerProject.projectName) {
|
||||
assertContains(">> :${innerProject.projectName}:runtime --> sample-lib-jvm6-1.0.jar")
|
||||
assertContains(">> :${innerProject.projectName}:runtimeClasspath --> sample-lib-jvm6-1.0.jar")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -40,21 +35,23 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
|
||||
with(outerProject) {
|
||||
embedProject(innerProject)
|
||||
gradleBuildScript(innerProject.projectName).appendText("\nrepositories { jcenter() }; dependencies { compile rootProject }")
|
||||
gradleBuildScript(innerProject.projectName).appendText("\nrepositories { jcenter() }; dependencies { implementation rootProject }")
|
||||
|
||||
testResolveAllConfigurations(
|
||||
subproject = innerProject.projectName
|
||||
subproject = innerProject.projectName,
|
||||
options = defaultBuildOptions().copy(warningMode = WarningMode.Summary)
|
||||
) {
|
||||
assertContains(">> :${innerProject.projectName}:runtime --> sample-lib-nodejs-1.0.jar")
|
||||
assertContains(">> :${innerProject.projectName}:runtimeClasspath --> sample-lib-nodejs-1.0.jar")
|
||||
}
|
||||
|
||||
gradleProperties().appendText(jsCompilerType(KotlinJsCompilerType.IR))
|
||||
|
||||
testResolveAllConfigurations(
|
||||
subproject = innerProject.projectName,
|
||||
skipSetup = true
|
||||
skipSetup = true,
|
||||
options = defaultBuildOptions().copy(warningMode = WarningMode.Summary)
|
||||
) {
|
||||
assertContains(">> :${innerProject.projectName}:runtime --> sample-lib-nodejs-1.0.klib")
|
||||
assertContains(">> :${innerProject.projectName}:runtimeClasspath --> sample-lib-nodejs-1.0.klib")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -81,7 +78,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
embedProject(innerProject)
|
||||
gradleBuildScript().appendText("\ndependencies { nodeJsMainImplementation project(':${innerProject.projectName}') }")
|
||||
|
||||
testResolveAllConfigurations(innerProject.projectName)
|
||||
testResolveAllConfigurations(innerProject.projectName, options = defaultBuildOptions().copy(warningMode = WarningMode.Summary))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,7 +107,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
|
||||
with(outerProject) {
|
||||
embedProject(innerProject)
|
||||
gradleBuildScript(innerProject.projectName).appendText("\ndependencies { compile rootProject }")
|
||||
gradleBuildScript(innerProject.projectName).appendText("\ndependencies { implementation rootProject }")
|
||||
|
||||
testResolveAllConfigurations(innerProject.projectName)
|
||||
}
|
||||
@@ -123,7 +120,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
|
||||
with(outerProject) {
|
||||
embedProject(innerProject)
|
||||
gradleBuildScript(innerProject.projectName).appendText("\ndependencies { compile rootProject }")
|
||||
gradleBuildScript(innerProject.projectName).appendText("\ndependencies { implementation rootProject }")
|
||||
|
||||
testResolveAllConfigurations(innerProject.projectName)
|
||||
}
|
||||
@@ -136,7 +133,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
|
||||
with(outerProject) {
|
||||
embedProject(innerProject)
|
||||
gradleBuildScript(innerProject.projectName).appendText("\ndependencies { compile rootProject }")
|
||||
gradleBuildScript(innerProject.projectName).appendText("\ndependencies { implementation rootProject }")
|
||||
|
||||
gradleBuildScript(innerProject.projectName).appendText(
|
||||
// Newer Gradle versions fail to resolve the deprecated configurations because of variant-aware resolution ambiguity between
|
||||
@@ -150,7 +147,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
""".trimIndent()
|
||||
)
|
||||
|
||||
testResolveAllConfigurations(innerProject.projectName)
|
||||
testResolveAllConfigurations(innerProject.projectName, options = defaultBuildOptions().copy(warningMode = WarningMode.Summary))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,7 +172,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
""".trimIndent()
|
||||
)
|
||||
|
||||
testResolveAllConfigurations(innerJvmProject.projectName)
|
||||
testResolveAllConfigurations(innerJvmProject.projectName, options = defaultBuildOptions().copy(warningMode = WarningMode.Summary))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -188,12 +185,12 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
embedProject(innerProject)
|
||||
|
||||
gradleBuildScript(innerProject.projectName).appendText(
|
||||
"\ndependencies { testCompile project(path: ':', configuration: 'jvm6TestRuntime') }"
|
||||
"\ndependencies { testImplementation project(path: ':', configuration: 'jvm6TestRuntime') }"
|
||||
)
|
||||
|
||||
testResolveAllConfigurations(innerProject.projectName) {
|
||||
assertContains(">> :${innerProject.projectName}:testCompile --> sample-lib-jvm6-1.0.jar")
|
||||
assertContains(">> :${innerProject.projectName}:testRuntime --> sample-lib-jvm6-1.0.jar")
|
||||
assertContains(">> :${innerProject.projectName}:testCompileClasspath --> sample-lib-jvm6-1.0.jar")
|
||||
assertContains(">> :${innerProject.projectName}:testRuntimeClasspath --> sample-lib-jvm6-1.0.jar")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -220,7 +217,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
|
||||
testResolveAllConfigurations(
|
||||
project.projectName,
|
||||
excludePredicate = "it.name in ['compile', 'runtime', 'testCompile', 'testRuntime', 'default']"
|
||||
options = defaultBuildOptions().copy(warningMode = WarningMode.Summary)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -229,7 +226,6 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
@Test
|
||||
fun testResolvesOldKotlinArtifactsPublishedWithMetadata() = with(Project("multiplatformProject", gradleVersion)) {
|
||||
setupWorkingDir()
|
||||
projectDir.resolve("settings.gradle").appendText("\nenableFeaturePreview 'GRADLE_METADATA'")
|
||||
gradleBuildScript().appendText(
|
||||
"\n" + """
|
||||
configure([project(':lib'), project(':libJvm'), project(':libJs')]) {
|
||||
@@ -252,13 +248,13 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
"\nsubprojects { repositories { maven { url \"file://${'$'}{rootDir.absolutePath.replace('\\\\', '/')}/repo\" } } }"
|
||||
}
|
||||
|
||||
gradleBuildScript("lib").appendText("\ndependencies { compile 'com.example.oldmpp:lib:1.0' }")
|
||||
gradleBuildScript("lib").appendText("\ndependencies { implementation 'com.example.oldmpp:lib:1.0' }")
|
||||
testResolveAllConfigurations("lib")
|
||||
|
||||
gradleBuildScript("libJvm").appendText("\ndependencies { compile 'com.example.oldmpp:libJvm:1.0' }")
|
||||
gradleBuildScript("libJvm").appendText("\ndependencies { implementation 'com.example.oldmpp:libJvm:1.0' }")
|
||||
testResolveAllConfigurations("libJvm")
|
||||
|
||||
gradleBuildScript("libJs").appendText("\ndependencies { compile 'com.example.oldmpp:libJs:1.0' }")
|
||||
gradleBuildScript("libJs").appendText("\ndependencies { implementation 'com.example.oldmpp:libJs:1.0' }")
|
||||
testResolveAllConfigurations("libJs")
|
||||
|
||||
embedProject(Project("sample-lib", directoryPrefix = "new-mpp-lib-and-app"))
|
||||
@@ -287,13 +283,22 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
|
||||
// variants chosen over the runtime ones when resolving a configuration with no required Usage:
|
||||
with(Project("simpleProject")) {
|
||||
setupWorkingDir()
|
||||
gradleBuildScript().appendText("\ndependencies { compile 'org.jetbrains.kotlin:kotlin-compiler-embeddable' }")
|
||||
gradleBuildScript().appendText(
|
||||
"\n" + """
|
||||
dependencies { implementation 'org.jetbrains.kotlin:kotlin-compiler-embeddable' }
|
||||
|
||||
configurations {
|
||||
customConfiguration.extendsFrom implementation
|
||||
customConfiguration.canBeResolved(true)
|
||||
}
|
||||
""".trimIndent()
|
||||
)
|
||||
|
||||
testResolveAllConfigurations {
|
||||
assertContains(">> :compile --> kotlin-compiler-embeddable-${defaultBuildOptions().kotlinVersion}.jar")
|
||||
assertContains(">> :customConfiguration --> kotlin-compiler-embeddable-${defaultBuildOptions().kotlinVersion}.jar")
|
||||
|
||||
// Check that the transitive dependencies with 'runtime' scope are also available:
|
||||
assertContains(">> :compile --> kotlin-script-runtime-${defaultBuildOptions().kotlinVersion}.jar")
|
||||
assertContains(">> :customConfiguration --> kotlin-script-runtime-${defaultBuildOptions().kotlinVersion}.jar")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+34
-9
@@ -5,7 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.util
|
||||
|
||||
import org.gradle.api.logging.configuration.WarningMode
|
||||
import org.jetbrains.kotlin.gradle.BaseGradleIT
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
@@ -16,7 +15,7 @@ private val unresolvedConfigurationRegex = "${Regex.escape(UNRESOLVED_MARKER)}(.
|
||||
fun BaseGradleIT.Project.testResolveAllConfigurations(
|
||||
subproject: String? = null,
|
||||
skipSetup: Boolean = false,
|
||||
excludePredicate: String = "false",
|
||||
excludeConfigurations: List<String> = listOf(),
|
||||
options: BaseGradleIT.BuildOptions = testCase.defaultBuildOptions(),
|
||||
withUnresolvedConfigurationNames: BaseGradleIT.CompiledProject.(List<String>) -> Unit = { assertTrue("Unresolved configurations: $it") { it.isEmpty() } }
|
||||
) = with(testCase) {
|
||||
@@ -25,8 +24,8 @@ fun BaseGradleIT.Project.testResolveAllConfigurations(
|
||||
setupWorkingDir()
|
||||
gradleBuildScript(subproject).run {
|
||||
val taskCode = when (extension) {
|
||||
"gradle" -> generateResolveAllConfigurationsTask(excludePredicate)
|
||||
"kts" -> generateResolveAllConfigurationsTaskKts(excludePredicate)
|
||||
"gradle" -> generateResolveAllConfigurationsTask(excludeConfigurations)
|
||||
"kts" -> generateResolveAllConfigurationsTaskKts(excludeConfigurations)
|
||||
else -> error("Unexpected build script extension $extension")
|
||||
}
|
||||
appendText("\n" + taskCode)
|
||||
@@ -41,13 +40,16 @@ fun BaseGradleIT.Project.testResolveAllConfigurations(
|
||||
}
|
||||
}
|
||||
|
||||
private fun generateResolveAllConfigurationsTask(exclude: String) =
|
||||
private fun generateResolveAllConfigurationsTask(excludes: List<String>) =
|
||||
"""
|
||||
task $RESOLVE_ALL_CONFIGURATIONS_TASK_NAME {
|
||||
doFirst {
|
||||
def excludeConfigs = ["default", "archives"]
|
||||
${computeExcludeConfigurations(excludes)}
|
||||
|
||||
project.configurations
|
||||
.matching { it.canBeResolved }
|
||||
.matching { !{ $exclude }.call(it) }
|
||||
.matching { !excludeConfigs.contains(it.name) }
|
||||
.each { configuration ->
|
||||
try {
|
||||
println "Resolving " + configuration.path
|
||||
@@ -66,13 +68,16 @@ private fun generateResolveAllConfigurationsTask(exclude: String) =
|
||||
}
|
||||
""".trimIndent()
|
||||
|
||||
private fun generateResolveAllConfigurationsTaskKts(exclude: String) =
|
||||
private fun generateResolveAllConfigurationsTaskKts(excludes: List<String>) =
|
||||
"""
|
||||
tasks.create("$RESOLVE_ALL_CONFIGURATIONS_TASK_NAME") {
|
||||
doFirst {
|
||||
val excludeConfigs = mutableListOf("default", "archives")
|
||||
${computeExcludeConfigurations(excludes)}
|
||||
|
||||
project.configurations
|
||||
.filter { it.isCanBeResolved }
|
||||
.filterNot { $exclude }
|
||||
.filterNot { excludeConfigs.contains(it.name) }
|
||||
.forEach { configuration ->
|
||||
val path = (configuration as org.gradle.api.internal.artifacts.configurations.ConfigurationInternal).path
|
||||
try {
|
||||
@@ -90,4 +95,24 @@ private fun generateResolveAllConfigurationsTaskKts(exclude: String) =
|
||||
}
|
||||
}
|
||||
}
|
||||
""".trimIndent()
|
||||
""".trimIndent()
|
||||
|
||||
private fun computeExcludeConfigurations(excludes: List<String>): String {
|
||||
val deprecatedConfigurations = listOf("compile", "runtime", "compileOnly", "runtimeOnly")
|
||||
return """
|
||||
sourceSets.forEach { sourceSet ->
|
||||
"${deprecatedConfigurations.joinToString()}".split(", ").toList().forEach {
|
||||
excludeConfigs.add(sourceSet.name + it.capitalize())
|
||||
}
|
||||
}
|
||||
|
||||
"${deprecatedConfigurations.joinToString()}".split(", ").toList().forEach {
|
||||
excludeConfigs.add(it)
|
||||
excludeConfigs.add("test" + it.capitalize())
|
||||
}
|
||||
|
||||
"${excludes.joinToString()}".split(", ").toList().forEach {
|
||||
excludeConfigs.add(it)
|
||||
}
|
||||
""".trimIndent()
|
||||
}
|
||||
Reference in New Issue
Block a user