From c3e10703ecd6daab2a6f30e8118c511680437481 Mon Sep 17 00:00:00 2001 From: Geoff Powell Date: Fri, 22 Mar 2024 13:25:02 -0400 Subject: [PATCH] Add support for render mode SHRINK for AccessibilityRenderExtension --- .../AccessibilityRenderExtension.kt | 5 +- .../AccessibilityRenderExtensionShrinkTest.kt | 60 ++++++++++++++++++ .../test/resources/accessibility-shrink.png | Bin 0 -> 9911 bytes 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 paparazzi/src/test/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtensionShrinkTest.kt create mode 100644 paparazzi/src/test/resources/accessibility-shrink.png diff --git a/paparazzi/src/main/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtension.kt b/paparazzi/src/main/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtension.kt index eb17ce3465..49fc5af4e3 100644 --- a/paparazzi/src/main/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtension.kt +++ b/paparazzi/src/main/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtension.kt @@ -40,16 +40,17 @@ public class AccessibilityRenderExtension : RenderExtension { orientation = LinearLayout.HORIZONTAL weightSum = 2f layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT) + isMeasureWithLargestChildEnabled = true // Allows for snapshot with SHRINK render mode val overlay = AccessibilityOverlayView(context).apply { addView(contentView, FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)) } val contentLayoutParams = contentView.layoutParams ?: generateLayoutParams(null) - addView(overlay, LinearLayout.LayoutParams(contentLayoutParams.width, contentLayoutParams.height, 1f)) + addView(overlay, LinearLayout.LayoutParams(0, contentLayoutParams.height, 1f)) val overlayDetailsView = AccessibilityOverlayDetailsView(context) - addView(overlayDetailsView, LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT, 1f)) + addView(overlayDetailsView, LinearLayout.LayoutParams(0, MATCH_PARENT, 1f)) OneShotPreDrawListener.add(this) { val elements = buildList { diff --git a/paparazzi/src/test/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtensionShrinkTest.kt b/paparazzi/src/test/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtensionShrinkTest.kt new file mode 100644 index 0000000000..e89ff7c5e2 --- /dev/null +++ b/paparazzi/src/test/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtensionShrinkTest.kt @@ -0,0 +1,60 @@ +package app.cash.paparazzi.accessibility + +import android.widget.TextView +import app.cash.paparazzi.DeviceConfig +import app.cash.paparazzi.Paparazzi +import app.cash.paparazzi.Snapshot +import app.cash.paparazzi.SnapshotHandler +import app.cash.paparazzi.internal.ImageUtils +import com.android.ide.common.rendering.api.SessionParams +import org.junit.Rule +import org.junit.Test +import java.awt.image.BufferedImage +import java.io.File +import javax.imageio.ImageIO + +class AccessibilityRenderExtensionShrinkTest { + private val snapshotHandler = TestSnapshotVerifier() + + @get:Rule + val paparazzi = Paparazzi( + deviceConfig = DeviceConfig.NEXUS_5, + snapshotHandler = snapshotHandler, + renderExtensions = setOf(AccessibilityRenderExtension()), + renderingMode = SessionParams.RenderingMode.SHRINK, + ) + + @Test + fun `verify baseline`() { + val view = TextView(paparazzi.context).apply { + id = 1 + text = "Text View Sample" + setPadding(50, 50, 50, 50) + } + paparazzi.snapshot(view, name = "accessibility-shrink") + } + + private class TestSnapshotVerifier : SnapshotHandler { + override fun newFrameHandler( + snapshot: Snapshot, + frameCount: Int, + fps: Int + ): SnapshotHandler.FrameHandler { + return object : SnapshotHandler.FrameHandler { + override fun handle(image: BufferedImage) { + val expected = File("src/test/resources/${snapshot.name}.png") + ImageUtils.assertImageSimilar( + relativePath = expected.path, + image = image, + goldenImage = ImageIO.read(expected), + maxPercentDifferent = 0.1 + ) + } + + override fun close() = Unit + } + } + + override fun close() = Unit + } +} diff --git a/paparazzi/src/test/resources/accessibility-shrink.png b/paparazzi/src/test/resources/accessibility-shrink.png new file mode 100644 index 0000000000000000000000000000000000000000..acba682fb1149d960840ff5e8cab40cded85a0bb GIT binary patch literal 9911 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 literal 0 HcmV?d00001