Skip to content

Commit 8dd7634

Browse files
feat(testkit-support): DependencyResolutionManagement can specify repositoriesMode and versionCatalogs.
Next step is to wire in RootProject.withVersionCatalog() to automatically update DependencyResolutionManagement.versionCatalogs.
1 parent 80aac34 commit 8dd7634

7 files changed

Lines changed: 159 additions & 22 deletions

File tree

testkit/gradle-testkit-support/src/main/kotlin/com/autonomousapps/kit/RootProject.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ public class RootProject(
9898
*/
9999
public fun withVersionCatalog(file: File) {
100100
withFile(file)
101+
// TODO(tsr): wire this file into DependencyResolutionManagement.versionCatalogs directly
101102
}
102103

103104
public fun withFile(path: String, content: String) {

testkit/gradle-testkit-support/src/main/kotlin/com/autonomousapps/kit/gradle/DependencyResolutionManagement.kt

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,59 @@ package com.autonomousapps.kit.gradle
55
import com.autonomousapps.kit.render.Element
66
import com.autonomousapps.kit.render.Scribe
77

8-
public class DependencyResolutionManagement(
9-
private val repositories: Repositories,
8+
public class DependencyResolutionManagement @JvmOverloads constructor(
9+
private val repositories: Repositories?,
10+
private val repositoriesMode: RepositoriesMode? = null,
11+
private val versionCatalogs: VersionCatalogs? = null,
1012
) : Element.Block {
1113

14+
public enum class RepositoriesMode : Element.Line {
15+
PREFER_PROJECT,
16+
PREFER_SETTINGS,
17+
FAIL_ON_PROJECT_REPOS,
18+
;
19+
20+
override fun render(scribe: Scribe): String = scribe.line {
21+
it.append("repositoriesMode = RepositoriesMode.")
22+
it.append(name)
23+
}
24+
}
25+
1226
override val name: String = "dependencyResolutionManagement"
1327

1428
override fun render(scribe: Scribe): String = scribe.block(this) { s ->
15-
repositories.render(s)
29+
repositoriesMode?.render(s)
30+
repositories?.render(s)
31+
versionCatalogs?.render(s)
32+
}
33+
34+
public class Builder {
35+
public var repositories: Repositories = Repositories.DEFAULT_DEPENDENCIES
36+
public var repositoriesMode: RepositoriesMode? = null
37+
public var versionCatalogs: VersionCatalogs? = null
38+
39+
public fun withRepositories(repositories: Repositories): Builder {
40+
this.repositories = repositories
41+
return this
42+
}
43+
44+
public fun withRepositoriesMode(repositoriesMode: RepositoriesMode): Builder {
45+
this.repositoriesMode = repositoriesMode
46+
return this
47+
}
48+
49+
public fun withVersionCatalogs(versionCatalogs: VersionCatalogs): Builder {
50+
this.versionCatalogs = versionCatalogs
51+
return this
52+
}
53+
54+
public fun build(): DependencyResolutionManagement {
55+
return DependencyResolutionManagement(
56+
repositories = repositories,
57+
repositoriesMode = repositoriesMode,
58+
versionCatalogs = versionCatalogs,
59+
)
60+
}
1661
}
1762

1863
public companion object {
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Copyright (c) 2026. Tony Robalik.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package com.autonomousapps.kit.gradle
4+
5+
import com.autonomousapps.kit.GradleProject
6+
import com.autonomousapps.kit.render.Element
7+
import com.autonomousapps.kit.render.Scribe
8+
9+
public class VersionCatalog(
10+
private val catalogName: String,
11+
private val fromFiles: String,
12+
) : Element.Block {
13+
14+
override val name: String = catalogName
15+
16+
override fun render(scribe: Scribe): String = when (scribe.dslKind) {
17+
GradleProject.DslKind.GROOVY -> renderGroovy(scribe)
18+
GradleProject.DslKind.KOTLIN -> renderKotlin(scribe)
19+
}
20+
21+
private fun renderGroovy(scribe: Scribe): String = scribe.block(this) { s ->
22+
s.line {
23+
it.append("from(files(\"")
24+
it.append(fromFiles)
25+
it.append("\"))")
26+
}
27+
}
28+
29+
private fun renderKotlin(scribe: Scribe): String = scribe.block("create(\"$catalogName\")") { s ->
30+
s.line {
31+
it.append("from(files(\"")
32+
it.append(fromFiles)
33+
it.append("\"))")
34+
}
35+
}
36+
}

testkit/gradle-testkit-support/src/main/kotlin/com/autonomousapps/kit/gradle/VersionCatalogFile.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import org.intellij.lang.annotations.Language
99
* [version catalog file](https://docs.gradle.org/current/userguide/platforms.html#sub::toml-dependencies-format).
1010
*/
1111
public class VersionCatalogFile(
12-
@Language("toml") public var content: String,
12+
@param:Language("toml") public var content: String,
1313
) {
1414

1515
public companion object {
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright (c) 2026. Tony Robalik.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package com.autonomousapps.kit.gradle
4+
5+
import com.autonomousapps.kit.render.Element
6+
import com.autonomousapps.kit.render.Scribe
7+
8+
/**
9+
* dependencyResolutionManagement {
10+
* versionCatalogs {
11+
* create("libs") {
12+
* from(files("..."))
13+
* }
14+
* }
15+
* }
16+
*/
17+
public class VersionCatalogs(
18+
public val versionCatalogs: List<VersionCatalog>
19+
) : Element.Block {
20+
21+
override val name: String = "versionCatalogs"
22+
23+
override fun render(scribe: Scribe): String = scribe.block(this) { s ->
24+
versionCatalogs.forEach { catalog ->
25+
catalog.render(s)
26+
}
27+
}
28+
29+
public companion object {
30+
@JvmStatic
31+
public fun of(vararg versionCatalogs: VersionCatalog): VersionCatalogs {
32+
return VersionCatalogs(versionCatalogs.toList())
33+
}
34+
}
35+
}

testkit/gradle-testkit-support/src/test/kotlin/com/autonomousapps/kit/render/ScribeTestGroovy.kt

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,22 +60,32 @@ internal class ScribeTestGroovy {
6060
@Test fun `can render dependencyResolutionManagement block`() {
6161
// Given
6262
val repositories = Repositories(Repository.GOOGLE, Repository.MAVEN_CENTRAL)
63-
val dependencyResolutionManagement = DependencyResolutionManagement(repositories)
63+
val dependencyResolutionManagement = DependencyResolutionManagement.Builder()
64+
.withRepositories(repositories)
65+
.withRepositoriesMode(DependencyResolutionManagement.RepositoriesMode.FAIL_ON_PROJECT_REPOS)
66+
.withVersionCatalogs(VersionCatalogs.of(VersionCatalog("myLibs", "my-libs.versions.toml")))
67+
.build()
6468

6569
// When
6670
val text = dependencyResolutionManagement.render(scribe)
6771

6872
// Then
6973
assertThat(text).isEqualTo(
7074
"""
71-
dependencyResolutionManagement {
72-
repositories {
73-
google()
74-
mavenCentral()
75-
}
76-
}
77-
78-
""".trimIndent()
75+
|dependencyResolutionManagement {
76+
| repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS
77+
| repositories {
78+
| google()
79+
| mavenCentral()
80+
| }
81+
| versionCatalogs {
82+
| myLibs {
83+
| from(files("my-libs.versions.toml"))
84+
| }
85+
| }
86+
|}
87+
|
88+
""".trimMargin()
7989
)
8090
}
8191

testkit/gradle-testkit-support/src/test/kotlin/com/autonomousapps/kit/render/ScribeTestKotlin.kt

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,22 +60,32 @@ internal class ScribeTestKotlin {
6060
@Test fun `can render dependencyResolutionManagement block`() {
6161
// Given
6262
val repositories = Repositories(Repository.GOOGLE, Repository.MAVEN_CENTRAL)
63-
val dependencyResolutionManagement = DependencyResolutionManagement(repositories)
63+
val dependencyResolutionManagement = DependencyResolutionManagement.Builder()
64+
.withRepositories(repositories)
65+
.withRepositoriesMode(DependencyResolutionManagement.RepositoriesMode.FAIL_ON_PROJECT_REPOS)
66+
.withVersionCatalogs(VersionCatalogs.of(VersionCatalog("my-libs", "my-libs.versions.toml")))
67+
.build()
6468

6569
// When
6670
val text = dependencyResolutionManagement.render(scribe)
6771

6872
// Then
6973
assertThat(text).isEqualTo(
7074
"""
71-
dependencyResolutionManagement {
72-
repositories {
73-
google()
74-
mavenCentral()
75-
}
76-
}
77-
78-
""".trimIndent()
75+
|dependencyResolutionManagement {
76+
| repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS
77+
| repositories {
78+
| google()
79+
| mavenCentral()
80+
| }
81+
| versionCatalogs {
82+
| create("my-libs") {
83+
| from(files("my-libs.versions.toml"))
84+
| }
85+
| }
86+
|}
87+
|
88+
""".trimMargin()
7989
)
8090
}
8191

0 commit comments

Comments
 (0)