Skip to content

Commit e40306c

Browse files
committed
break up extension property tests
1 parent 980c538 commit e40306c

File tree

1 file changed

+149
-71
lines changed

1 file changed

+149
-71
lines changed
Lines changed: 149 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,71 @@
11
package com.squareup.anvil.plugin
22

3+
import com.rickbusarow.kase.Kase4
4+
import com.rickbusarow.kase.gradle.GradleDependencyVersion
5+
import com.rickbusarow.kase.gradle.GradleKotlinTestVersions
6+
import com.rickbusarow.kase.gradle.GradleProjectBuilder
7+
import com.rickbusarow.kase.gradle.HasGradleDependencyVersion
8+
import com.rickbusarow.kase.gradle.HasKotlinDependencyVersion
9+
import com.rickbusarow.kase.gradle.KotlinDependencyVersion
310
import com.rickbusarow.kase.kase
4-
import io.kotest.assertions.asClue
11+
import com.rickbusarow.kase.times
512
import io.kotest.matchers.string.shouldContain
13+
import org.junit.jupiter.api.DynamicNode
14+
import org.junit.jupiter.api.Nested
615
import org.junit.jupiter.api.TestFactory
16+
import java.util.stream.Stream
717

818
class AnvilExtensionTest : BaseGradleTest() {
919

10-
@TestFactory
11-
fun `gradle properties map to extension properties`() = listOf(
12-
kase(a1 = "generateDaggerFactories", false),
13-
kase(a1 = "generateDaggerFactoriesOnly", false),
14-
kase(a1 = "disableComponentMerging", false),
15-
kase(a1 = "syncGeneratedSources", false),
16-
kase(a1 = "addOptionalAnnotations", false),
17-
)
18-
.asContainers { (propertyName, default) ->
19-
testFactory { versions ->
20+
@Nested
21+
inner class `gradle property to extension property mapping` {
22+
23+
val properties = listOf(
24+
kase(a1 = "generateDaggerFactories", false),
25+
kase(a1 = "generateDaggerFactoriesOnly", false),
26+
kase(a1 = "disableComponentMerging", false),
27+
kase(a1 = "syncGeneratedSources", false),
28+
kase(a1 = "addOptionalAnnotations", false),
29+
)
30+
31+
fun GradleProjectBuilder.gradlePropertiesFile(propertyName: String, value: Any) {
32+
val props = buildList {
33+
if (propertyName == "generateDaggerFactoriesOnly") {
34+
// The "__FactoriesOnly" toggle requires the "__Factories" toggle to be enabled.
35+
add("com.squareup.anvil.generateDaggerFactories=true")
36+
}
37+
add("com.squareup.anvil.$propertyName=$value")
38+
}
39+
gradlePropertiesFile(props.joinToString("\n"))
40+
}
2041

42+
@TestFactory
43+
fun `extension properties are their default value when not set anywhere`() =
44+
tests { versions, propertyName, default ->
45+
46+
rootProject.buildFile(
47+
"""
48+
plugins {
49+
kotlin("jvm") version "${versions.kotlinVersion}"
50+
id("com.squareup.anvil") version "$anvilVersion"
51+
}
52+
53+
tasks.register("printProperty") {
54+
doLast {
55+
println("$propertyName: ${'$'}{anvil.$propertyName.get()}")
56+
}
57+
}
58+
""".trimIndent(),
59+
)
60+
61+
shouldSucceed("printProperty") {
62+
output shouldContain "$propertyName: $default"
63+
}
64+
}
65+
66+
@TestFactory
67+
fun `the extension property is not default when only set in gradle properties`() =
68+
tests { versions, propertyName, default ->
2169
rootProject {
2270
buildFile(
2371
"""
@@ -30,85 +78,115 @@ class AnvilExtensionTest : BaseGradleTest() {
3078
doLast {
3179
println("$propertyName: ${'$'}{anvil.$propertyName.get()}")
3280
}
33-
}
81+
}
3482
""".trimIndent(),
3583
)
36-
}
37-
38-
"the extension property is $default when not set anywhere".asClue {
39-
40-
shouldSucceed("printProperty") {
41-
output shouldContain "$propertyName: $default"
42-
}
43-
}
4484

45-
val addFactoryGen = propertyName == "generateDaggerFactoriesOnly"
46-
47-
rootProject { // The "factories only" toggle requires the "factories" toggle to be enabled.
48-
49-
if (addFactoryGen) {
50-
gradlePropertiesFile(
51-
"""
52-
com.squareup.anvil.generateDaggerFactories=true
53-
com.squareup.anvil.$propertyName=${!default}
54-
""".trimIndent(),
55-
)
56-
} else {
57-
gradlePropertiesFile(
58-
"""
59-
com.squareup.anvil.$propertyName=${!default}
60-
""".trimIndent(),
61-
)
62-
}
85+
gradlePropertiesFile(propertyName, !default)
6386
}
6487

65-
"the extension property is ${!default} when only set in gradle.properties".asClue {
66-
67-
shouldSucceed("printProperty") {
68-
output shouldContain "$propertyName: ${!default}"
69-
}
88+
shouldSucceed("printProperty") {
89+
output shouldContain "$propertyName: ${!default}"
7090
}
91+
}
7192

93+
@TestFactory
94+
fun `the extension property is default when explicitly set to it in gradle properties`() =
95+
tests { versions, propertyName, default ->
7296
rootProject {
73-
gradlePropertiesFile(
97+
buildFile(
7498
"""
75-
com.squareup.anvil.$propertyName=$default
99+
plugins {
100+
kotlin("jvm") version "${versions.kotlinVersion}"
101+
id("com.squareup.anvil") version "$anvilVersion"
102+
}
103+
104+
tasks.register("printProperty") {
105+
doLast {
106+
println("$propertyName: ${'$'}{anvil.$propertyName.get()}")
107+
}
108+
}
76109
""".trimIndent(),
77110
)
78-
}
79-
80-
"the extension property is $default when set in gradle.properties".asClue {
81111

82-
shouldSucceed("printProperty") {
83-
output shouldContain "$propertyName: $default"
84-
}
112+
gradlePropertiesFile(propertyName, default)
85113
}
86114

87-
val extensionText = if (addFactoryGen) {
88-
"""
89-
anvil {
90-
generateDaggerFactories = true
91-
$propertyName = ${!default}
92-
}
93-
""".trimIndent()
94-
} else {
95-
"""
96-
anvil {
97-
$propertyName = ${!default}
98-
}
99-
""".trimIndent()
115+
shouldSucceed("printProperty") {
116+
output shouldContain "$propertyName: $default"
100117
}
118+
}
101119

102-
rootProject.path
103-
.resolve(dslLanguage.buildFileName)
104-
.appendText("\n$extensionText")
105-
106-
"setting a value in the extension property supersedes the value in gradle.properties".asClue {
120+
@TestFactory
121+
fun `the extension property overrides the gradle properties value when set`() =
122+
tests { versions, propertyName, default ->
107123

108-
shouldSucceed("printProperty") {
109-
output shouldContain "$propertyName: ${!default}"
124+
rootProject {
125+
val extensionText = if (propertyName == "generateDaggerFactoriesOnly") {
126+
"""
127+
anvil {
128+
generateDaggerFactories = true
129+
$propertyName = ${!default}
130+
}
131+
""".trimIndent()
132+
} else {
133+
"""
134+
anvil {
135+
$propertyName = ${!default}
136+
}
137+
""".trimIndent()
110138
}
139+
buildFile(
140+
"""
141+
plugins {
142+
kotlin("jvm") version "${versions.kotlinVersion}"
143+
id("com.squareup.anvil") version "$anvilVersion"
144+
}
145+
146+
tasks.register("printProperty") {
147+
doLast {
148+
println("$propertyName: ${'$'}{anvil.$propertyName.get()}")
149+
}
150+
}
151+
152+
$extensionText
153+
""".trimIndent(),
154+
)
155+
156+
gradlePropertiesFile(propertyName, default)
157+
}
158+
159+
shouldSucceed("printProperty") {
160+
output shouldContain "$propertyName: ${!default}"
111161
}
112162
}
163+
164+
inline fun tests(
165+
crossinline action: AnvilGradleTestEnvironment.(
166+
GradleKotlinTestVersions,
167+
String,
168+
Boolean,
169+
) -> Unit,
170+
): Stream<out DynamicNode> = params.asContainers { versions ->
171+
properties.times(listOf(versions), instanceFactory = ::PropertyKase)
172+
.asTests { kase -> action(versions, kase.propertyName, kase.default) }
113173
}
174+
}
114175
}
176+
177+
@PublishedApi
178+
internal class PropertyKase(
179+
val propertyName: String,
180+
val default: Boolean,
181+
override val gradle: GradleDependencyVersion,
182+
override val kotlin: KotlinDependencyVersion,
183+
) : Kase4<GradleDependencyVersion, KotlinDependencyVersion, String, Boolean> by kase(
184+
displayName = "property: $propertyName | default: $default",
185+
a1 = gradle,
186+
a2 = kotlin,
187+
a3 = propertyName,
188+
a4 = default,
189+
),
190+
GradleKotlinTestVersions,
191+
HasGradleDependencyVersion by HasGradleDependencyVersion(gradle),
192+
HasKotlinDependencyVersion by HasKotlinDependencyVersion(kotlin)

0 commit comments

Comments
 (0)