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 0000000000..acba682fb1 Binary files /dev/null and b/paparazzi/src/test/resources/accessibility-shrink.png differ