Skip to content

Commit 26974a9

Browse files
Handle Gradle 8 HTML report compatibility
Issue: #2251 - Test: add a snapshot report regression on Gradle 8.14.3 - Impl: skip clipboard copy buttons when HtmlWriterTools is unavailable Amp-Thread-ID: https://ampcode.com/threads/T-019d73e0-e0a5-7483-86c6-cc892c033432 Co-authored-by: Amp <amp@ampcode.com>
1 parent d19a0da commit 26974a9

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/reporting/ClassPageRenderer.kt

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import org.gradle.api.tasks.testing.TestOutputEvent
55
import org.gradle.internal.html.SimpleHtmlWriter
66
import org.gradle.internal.xml.SimpleMarkupWriter
77
import org.gradle.reporting.CodePanelRenderer
8-
import org.gradle.reporting.HtmlWriterTools.addClipboardCopyButton
98
import java.io.IOException
109

1110
internal class ClassPageRenderer(
@@ -175,7 +174,7 @@ internal class ClassPageRenderer(
175174
.characters("")
176175
resultsProvider.writeAllOutput(classId, TestOutputEvent.Destination.StdOut, htmlWriter)
177176
htmlWriter.endElement()
178-
addClipboardCopyButton(htmlWriter, codeId)
177+
addClipboardCopyButtonIfSupported(htmlWriter, codeId)
179178
htmlWriter.endElement()
180179
}
181180
}
@@ -196,11 +195,26 @@ internal class ClassPageRenderer(
196195
.characters("")
197196
resultsProvider.writeAllOutput(classId, TestOutputEvent.Destination.StdErr, htmlWriter)
198197
htmlWriter.endElement()
199-
addClipboardCopyButton(htmlWriter, codeId)
198+
addClipboardCopyButtonIfSupported(htmlWriter, codeId)
200199
htmlWriter.endElement()
201200
}
202201
}
203202
)
204203
}
205204
}
205+
206+
private fun addClipboardCopyButtonIfSupported(htmlWriter: SimpleHtmlWriter, codeId: String) {
207+
addClipboardCopyButtonMethod?.invoke(null, htmlWriter, codeId)
208+
}
209+
210+
private companion object {
211+
// Gradle 8 does not expose HtmlWriterTools, so copy buttons are best-effort.
212+
val addClipboardCopyButtonMethod = runCatching {
213+
Class.forName("org.gradle.reporting.HtmlWriterTools").getMethod(
214+
"addClipboardCopyButton",
215+
SimpleHtmlWriter::class.java,
216+
String::class.java
217+
)
218+
}.getOrNull()
219+
}
206220
}

paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1551,7 +1551,17 @@ class PaparazziPluginTest {
15511551

15521552
@Test
15531553
fun snapshotReport() {
1554+
assertSnapshotReport(gradleRunner)
1555+
}
1556+
1557+
@Test
1558+
fun snapshotReportGradle8_14_3() {
1559+
assertSnapshotReport(gradleRunner.withGradleVersion("8.14.3"))
1560+
}
1561+
1562+
private fun assertSnapshotReport(gradleRunner: GradleRunner) {
15541563
val fixtureRoot = File("src/test/projects/report-snapshots")
1564+
fixtureRoot.resolve("build").registerForDeletionOnExit().deleteRecursively()
15551565
val testReportDir = File(fixtureRoot, "build/reports/tests/testDebugUnitTest/classes")
15561566

15571567
val result = gradleRunner

0 commit comments

Comments
 (0)