Skip to content

Commit 96c7bc2

Browse files
authored
Correct functional test kits (#1297)
* Move buildJar into super * Rename writeMainClass to writeClass * Replace main.class hardcode * Remove unnecessary inline functions * Rearrange properties * Mark AfterAll for doLast * Replace unnecessary project.files usages * Fix things
1 parent a1295f3 commit 96c7bc2

11 files changed

+90
-80
lines changed

src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/ApplicationPluginTest.kt

+7-5
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ import org.junit.jupiter.api.Test
3131

3232
@ExperimentalPathApi
3333
class ApplicationPluginTest : BasePluginTest() {
34+
private lateinit var mainClass: String
35+
3436
@Test
3537
fun integrationWithApplicationPluginAndJavaToolchains() {
3638
prepare(
@@ -73,7 +75,7 @@ class ApplicationPluginTest : BasePluginTest() {
7375

7476
commonAssertions(
7577
jarPath("myapp-shadow/lib/myapp-1.0-all.jar", installPath),
76-
entriesContained = arrayOf("my/Main.class", *junitEntries),
78+
entriesContained = arrayOf(mainClass, *junitEntries),
7779
)
7880

7981
val unixScript = path("myapp-shadow/bin/myapp", installPath)
@@ -114,7 +116,7 @@ class ApplicationPluginTest : BasePluginTest() {
114116
)
115117
@Test
116118
fun canOverrideMainClassAttrInManifestBlock() {
117-
writeMainClass(className = "Main2")
119+
val main2Class = writeClass(className = "Main2")
118120
prepare(
119121
projectBlock = """
120122
shadowJar {
@@ -135,7 +137,7 @@ class ApplicationPluginTest : BasePluginTest() {
135137
assertions(run(runShadowTask).output, "foo")
136138
commonAssertions(
137139
jarPath("build/install/myapp-shadow/lib/myapp-1.0-all.jar"),
138-
entriesContained = entriesInA + arrayOf("my/Main.class", "my/Main2.class"),
140+
entriesContained = entriesInA + arrayOf(mainClass, main2Class),
139141
mainClassAttr = "my.Main2",
140142
)
141143

@@ -216,7 +218,7 @@ class ApplicationPluginTest : BasePluginTest() {
216218
dependenciesBlock: String = "implementation 'my:a:1.0'",
217219
runShadowBlock: String = "",
218220
) {
219-
writeMainClass(withImports = mainClassWithImports)
221+
mainClass = writeClass(withImports = mainClassWithImports)
220222
projectScriptPath.appendText(
221223
"""
222224
apply plugin: 'application'
@@ -244,7 +246,7 @@ class ApplicationPluginTest : BasePluginTest() {
244246

245247
private fun commonAssertions(
246248
jarPath: JarPath,
247-
entriesContained: Array<String> = entriesInA + "my/Main.class",
249+
entriesContained: Array<String> = entriesInA + mainClass,
248250
mainClassAttr: String = "my.Main",
249251
classPathAttr: String? = null,
250252
) {

src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/BasePluginTest.kt

+37-27
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.github.jengelman.gradle.plugins.shadow.internal.requireResourceAsPath
1212
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
1313
import com.github.jengelman.gradle.plugins.shadow.transformers.ResourceTransformer
1414
import com.github.jengelman.gradle.plugins.shadow.util.AppendableMavenRepository
15+
import com.github.jengelman.gradle.plugins.shadow.util.JarBuilder
1516
import com.github.jengelman.gradle.plugins.shadow.util.JarPath
1617
import java.io.Closeable
1718
import java.nio.file.Path
@@ -32,6 +33,7 @@ import kotlin.io.path.writeText
3233
import org.gradle.testkit.runner.BuildResult
3334
import org.gradle.testkit.runner.GradleRunner
3435
import org.gradle.testkit.runner.TaskOutcome
36+
import org.junit.jupiter.api.AfterAll
3537
import org.junit.jupiter.api.AfterEach
3638
import org.junit.jupiter.api.BeforeAll
3739
import org.junit.jupiter.api.BeforeEach
@@ -50,6 +52,16 @@ abstract class BasePluginTest {
5052
lateinit var entriesInB: Array<String>
5153
lateinit var entriesInAB: Array<String>
5254

55+
val shadowJarTask = ":$SHADOW_JAR_TASK_NAME"
56+
val serverShadowJarTask = ":server:$SHADOW_JAR_TASK_NAME"
57+
val runShadowTask = ":$SHADOW_RUN_TASK_NAME"
58+
val shadowDistZipTask = ":shadowDistZip"
59+
60+
val projectScriptPath: Path get() = path("build.gradle")
61+
val settingsScriptPath: Path get() = path("settings.gradle")
62+
open val outputShadowJar: JarPath get() = jarPath("build/libs/my-1.0-all.jar")
63+
val outputServerShadowJar: JarPath get() = jarPath("server/build/libs/server-1.0-all.jar")
64+
5365
@BeforeAll
5466
open fun doFirst() {
5567
localRepo = AppendableMavenRepository(
@@ -87,21 +99,12 @@ abstract class BasePluginTest {
8799
println(projectScriptPath.readText())
88100
}
89101

90-
@OptIn(ExperimentalPathApi::class)
102+
@AfterAll
91103
fun doLast() {
104+
@OptIn(ExperimentalPathApi::class)
92105
localRepo.root.deleteRecursively()
93106
}
94107

95-
val shadowJarTask = ":$SHADOW_JAR_TASK_NAME"
96-
val serverShadowJarTask = ":server:$SHADOW_JAR_TASK_NAME"
97-
val runShadowTask = ":$SHADOW_RUN_TASK_NAME"
98-
val shadowDistZipTask = ":shadowDistZip"
99-
100-
val projectScriptPath: Path get() = path("build.gradle")
101-
val settingsScriptPath: Path get() = path("settings.gradle")
102-
open val outputShadowJar: JarPath get() = jarPath("build/libs/my-1.0-all.jar")
103-
val outputServerShadowJar: JarPath get() = jarPath("server/build/libs/server-1.0-all.jar")
104-
105108
fun getDefaultProjectBuildScript(
106109
plugin: String = "java",
107110
withGroup: Boolean = false,
@@ -159,14 +162,18 @@ abstract class BasePluginTest {
159162
}
160163
}
161164

162-
inline fun run(
165+
fun buildJar(relative: String, builder: JarBuilder.() -> Unit): Path {
166+
return JarBuilder(path("temp/$relative")).apply(builder).write()
167+
}
168+
169+
fun run(
163170
vararg tasks: String,
164171
runnerBlock: (GradleRunner) -> GradleRunner = { it },
165172
): BuildResult {
166173
return runnerBlock(runner(tasks.toList())).build().assertNoDeprecationWarnings()
167174
}
168175

169-
inline fun runWithFailure(
176+
fun runWithFailure(
170177
vararg tasks: String,
171178
runnerBlock: (GradleRunner) -> GradleRunner = { it },
172179
): BuildResult {
@@ -189,17 +196,16 @@ abstract class BasePluginTest {
189196
}.publish()
190197
}
191198

192-
fun writeMainClass(
199+
fun writeClass(
193200
sourceSet: String = "main",
194201
packageName: String = "my",
195202
withImports: Boolean = false,
196203
className: String = "Main",
197204
isJava: Boolean = true,
198-
): String {
199-
if (isJava) {
200-
val imports = if (withImports) "import junit.framework.Test;" else ""
201-
val classRef = if (withImports) "\"Refs: \" + Test.class.getName()" else "\"Refs: null\""
202-
path("src/$sourceSet/java/$packageName/$className.java").writeText(
205+
classContent: () -> String = {
206+
if (isJava) {
207+
val imports = if (withImports) "import junit.framework.Test;" else ""
208+
val classRef = if (withImports) "\"Refs: \" + Test.class.getName()" else "\"Refs: null\""
203209
"""
204210
package $packageName;
205211
$imports
@@ -211,12 +217,10 @@ abstract class BasePluginTest {
211217
System.out.println($classRef);
212218
}
213219
}
214-
""".trimIndent(),
215-
)
216-
} else {
217-
val imports = if (withImports) "import junit.framework.Test;" else ""
218-
val classRef = if (withImports) "\"Refs: \" + Test.class.getName()" else "\"Refs: null\""
219-
path("src/$sourceSet/kotlin/$packageName/$className.kt").writeText(
220+
""".trimIndent()
221+
} else {
222+
val imports = if (withImports) "import junit.framework.Test;" else ""
223+
val classRef = if (withImports) "\"Refs: \" + Test.class.getName()" else "\"Refs: null\""
220224
"""
221225
package $packageName
222226
$imports
@@ -226,8 +230,14 @@ abstract class BasePluginTest {
226230
println(content)
227231
println($classRef)
228232
}
229-
""".trimIndent(),
230-
)
233+
""".trimIndent()
234+
}
235+
},
236+
): String {
237+
if (isJava) {
238+
path("src/$sourceSet/java/$packageName/$className.java").writeText(classContent())
239+
} else {
240+
path("src/$sourceSet/kotlin/$packageName/$className.kt").writeText(classContent())
231241
}
232242
val baseClassPath = packageName.replace('.', '/') + "/$className"
233243
return if (isJava) "$baseClassPath.class" else "${baseClassPath}Kt.class"

src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/JavaPluginTest.kt

+12-12
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class JavaPluginTest : BasePluginTest() {
7373
disabledReason = "Gradle 8.3 doesn't support Java 21.",
7474
)
7575
fun compatibleWithMinGradleVersion() {
76-
writeMainClass(withImports = true)
76+
val mainClass = writeClass(withImports = true)
7777
projectScriptPath.appendText(
7878
"""
7979
dependencies {
@@ -88,7 +88,7 @@ class JavaPluginTest : BasePluginTest() {
8888

8989
assertThat(outputShadowJar).useAll {
9090
containsEntries(
91-
"my/Main.class",
91+
mainClass,
9292
*junitEntries,
9393
)
9494
}
@@ -505,7 +505,7 @@ class JavaPluginTest : BasePluginTest() {
505505
)
506506
@Test
507507
fun canRegisterCustomShadowJarTask() {
508-
writeMainClass(sourceSet = "test", withImports = true)
508+
val mainClass = writeClass(sourceSet = "test", withImports = true)
509509
val testShadowJarTask = "testShadowJar"
510510
projectScriptPath.appendText(
511511
"""
@@ -530,7 +530,7 @@ class JavaPluginTest : BasePluginTest() {
530530
assertThat(result).taskOutcomeEquals(":$testShadowJarTask", SUCCESS)
531531
assertThat(jarPath("build/libs/my-1.0-tests.jar")).useAll {
532532
containsEntries(
533-
"my/Main.class",
533+
mainClass,
534534
*junitEntries,
535535
)
536536
getMainAttr(mainClassAttributeKey).isNotNull()
@@ -586,12 +586,12 @@ class JavaPluginTest : BasePluginTest() {
586586
fun failBuildIfProcessingBadJar() {
587587
val badJarPath = path("bad.jar").apply {
588588
writeText("A bad jar.")
589-
}.toUri().toURL().path
589+
}
590590

591591
projectScriptPath.appendText(
592592
"""
593593
dependencies {
594-
implementation files('$badJarPath')
594+
${implementationFiles(badJarPath)}
595595
}
596596
""".trimIndent(),
597597
)
@@ -606,7 +606,7 @@ class JavaPluginTest : BasePluginTest() {
606606

607607
@Test
608608
fun worksWithArchiveFileName() {
609-
writeMainClass()
609+
val mainClass = writeClass()
610610
projectScriptPath.appendText(
611611
"""
612612
dependencies {
@@ -622,7 +622,7 @@ class JavaPluginTest : BasePluginTest() {
622622

623623
assertThat(jarPath("build/libs/my-shadow.tar")).useAll {
624624
containsEntries(
625-
"my/Main.class",
625+
mainClass,
626626
*junitEntries,
627627
)
628628
}
@@ -659,12 +659,12 @@ class JavaPluginTest : BasePluginTest() {
659659

660660
@Test
661661
fun canAddExtraFilesIntoShadowJar() {
662-
writeMainClass()
662+
val mainClass = writeClass()
663663
path("Foo").writeText("Foo")
664664
projectScriptPath.appendText(
665665
"""
666666
$shadowJar {
667-
from(files('${artifactAJar.toUri().toURL().path}')) {
667+
from(file('${artifactAJar.toUri().toURL().path}')) {
668668
into('META-INF')
669669
}
670670
from('Foo') {
@@ -678,7 +678,7 @@ class JavaPluginTest : BasePluginTest() {
678678

679679
assertThat(outputShadowJar).useAll {
680680
containsEntries(
681-
"my/Main.class",
681+
mainClass,
682682
"META-INF/a-1.0.jar",
683683
"Bar/Foo",
684684
)
@@ -693,7 +693,7 @@ class JavaPluginTest : BasePluginTest() {
693693
}
694694
assertThat(jarPath(unzipped.name)).useAll {
695695
containsEntries(*entriesInA)
696-
doesNotContainEntries("my/Main.class")
696+
doesNotContainEntries(mainClass)
697697
}
698698
}
699699
}

src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/KmpPluginTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class KmpPluginTest : BasePluginTest() {
2121

2222
@Test
2323
fun compatKmpJvmTarget() {
24-
val mainClass = writeMainClass(sourceSet = "jvmMain", isJava = false)
24+
val mainClass = writeClass(sourceSet = "jvmMain", isJava = false)
2525
projectScriptPath.appendText(
2626
"""
2727
kotlin {

src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/RelocationTest.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class RelocationTest : BasePluginTest() {
2626
@ParameterizedTest
2727
@MethodSource("prefixProvider")
2828
fun autoRelocation(relocationPrefix: String) {
29-
val mainClass = writeMainClass()
29+
val mainClass = writeClass()
3030
projectScriptPath.appendText(
3131
"""
3232
dependencies {
@@ -63,7 +63,7 @@ class RelocationTest : BasePluginTest() {
6363
)
6464
@Test
6565
fun relocateDependencyFiles() {
66-
val mainClass = writeMainClass()
66+
val mainClass = writeClass()
6767
projectScriptPath.appendText(
6868
"""
6969
dependencies {
@@ -104,7 +104,7 @@ class RelocationTest : BasePluginTest() {
104104

105105
@Test
106106
fun relocateDependencyFilesWithFiltering() {
107-
val mainClass = writeMainClass()
107+
val mainClass = writeClass()
108108
projectScriptPath.appendText(
109109
"""
110110
dependencies {
@@ -355,7 +355,7 @@ class RelocationTest : BasePluginTest() {
355355
// Minus 3 sec to avoid the time difference between the file system and the JVM.
356356
val currentTimeMillis = System.currentTimeMillis() - 3.seconds.inWholeMilliseconds
357357
val junitEntryTimeRange = junitRawEntries.map { it.time }.let { it.min()..it.max() }
358-
writeMainClass(withImports = true)
358+
writeClass(withImports = true)
359359
projectScriptPath.appendText(
360360
"""
361361
dependencies {

src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/caching/RelocationCachingTest.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ class RelocationCachingTest : BaseCachingTest() {
1818
}
1919
""".trimIndent() + System.lineSeparator(),
2020
)
21-
writeMainClass(withImports = true)
21+
val mainClass = writeClass(withImports = true)
2222

2323
assertCompositeExecutions {
2424
containsEntries(
25-
"my/Main.class",
25+
mainClass,
2626
*junitEntries,
2727
)
2828
}
@@ -39,7 +39,7 @@ class RelocationCachingTest : BaseCachingTest() {
3939

4040
assertCompositeExecutions {
4141
containsEntries(
42-
"my/Main.class",
42+
mainClass,
4343
*shadowedEntries,
4444
)
4545
doesNotContainEntries(

0 commit comments

Comments
 (0)