From b047769892cbdda5a8e4c8c711be3dfb35e0db85 Mon Sep 17 00:00:00 2001 From: Sebastien Rouif Date: Thu, 30 Jun 2022 16:57:01 +0100 Subject: [PATCH 1/5] Allow for custom appCompatViewInflater and thus support for MaterialComponents or other custom UI library --- .../paparazzi/gradle/PaparazziPluginTest.kt | 1 - .../material-components-present/build.gradle | 4 +- .../paparazzi/plugin/test/ButtonViewTest.kt | 5 ++- .../main/java/app/cash/paparazzi/Paparazzi.kt | 40 +++++++++++-------- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt b/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt index 5ed0bcc531..d1c9817173 100644 --- a/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt +++ b/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt @@ -696,7 +696,6 @@ class PaparazziPluginTest { assertThat(snapshotImage).isSimilarTo(goldenImage).withDefaultThreshold() } - @Test @Ignore fun withMaterialComponents() { val fixtureRoot = File("src/test/projects/material-components-present") diff --git a/paparazzi-gradle-plugin/src/test/projects/material-components-present/build.gradle b/paparazzi-gradle-plugin/src/test/projects/material-components-present/build.gradle index d18722566c..97dc833b32 100644 --- a/paparazzi-gradle-plugin/src/test/projects/material-components-present/build.gradle +++ b/paparazzi-gradle-plugin/src/test/projects/material-components-present/build.gradle @@ -21,5 +21,5 @@ android { } dependencies { - implementation 'com.google.android.material:material:1.5.0-alpha03' -} \ No newline at end of file + implementation 'com.google.android.material:material:1.6.1' +} diff --git a/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/test/java/app/cash/paparazzi/plugin/test/ButtonViewTest.kt b/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/test/java/app/cash/paparazzi/plugin/test/ButtonViewTest.kt index 0fbcb64a98..9f7c7135ca 100644 --- a/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/test/java/app/cash/paparazzi/plugin/test/ButtonViewTest.kt +++ b/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/test/java/app/cash/paparazzi/plugin/test/ButtonViewTest.kt @@ -22,7 +22,10 @@ import org.junit.Test class ButtonViewTest { @get:Rule - val paparazzi = Paparazzi(theme = "Theme.MaterialComponents") + val paparazzi = Paparazzi( + theme = "Theme.MaterialComponents", + appCompatViewInflaterClassName = "com.google.android.material.theme.MaterialComponentsViewInflater", + ) @Test fun testViews() { diff --git a/paparazzi/src/main/java/app/cash/paparazzi/Paparazzi.kt b/paparazzi/src/main/java/app/cash/paparazzi/Paparazzi.kt index 6e01d2a569..0126ea3086 100644 --- a/paparazzi/src/main/java/app/cash/paparazzi/Paparazzi.kt +++ b/paparazzi/src/main/java/app/cash/paparazzi/Paparazzi.kt @@ -72,6 +72,7 @@ import com.android.layoutlib.bridge.impl.RenderAction import com.android.layoutlib.bridge.impl.RenderSessionImpl import java.awt.image.BufferedImage import java.lang.reflect.Field +import java.lang.reflect.Method import java.lang.reflect.Modifier import java.util.Date import java.util.concurrent.TimeUnit @@ -86,6 +87,7 @@ class Paparazzi @JvmOverloads constructor( private val theme: String = "android:Theme.Material.NoActionBar.Fullscreen", private val renderingMode: RenderingMode = RenderingMode.NORMAL, private val appCompatEnabled: Boolean = true, + private val appCompatViewInflaterClassName: String = "androidx.appcompat.app.AppCompatViewInflater", private val maxPercentDifference: Double = 0.1, private val snapshotHandler: SnapshotHandler = determineHandler(maxPercentDifference), private val renderExtensions: Set = setOf() @@ -444,22 +446,8 @@ class Paparazzi @JvmOverloads constructor( context: Context, attrs: AttributeSet ): View? { - val appCompatViewInflaterClass = - Class.forName("androidx.appcompat.app.AppCompatViewInflater") - - val createViewMethod = appCompatViewInflaterClass - .getDeclaredMethod( - "createView", - View::class.java, - String::class.java, - Context::class.java, - AttributeSet::class.java, - Boolean::class.javaPrimitiveType, - Boolean::class.javaPrimitiveType, - Boolean::class.javaPrimitiveType, - Boolean::class.javaPrimitiveType - ) - .apply { isAccessible = true } + val appCompatViewInflaterClass = Class.forName(appCompatViewInflaterClassName) + val createViewMethod = getCreateViewMethod(appCompatViewInflaterClass) ?: throw IllegalStateException("View inflater doesn't have `createView` method") val inheritContext = true val readAndroidTheme = true @@ -476,6 +464,26 @@ class Paparazzi @JvmOverloads constructor( ) as View? } + fun getCreateViewMethod(clazz: Class<*>): Method? { + try { + return clazz + .getDeclaredMethod( + "createView", + View::class.java, + String::class.java, + Context::class.java, + AttributeSet::class.java, + Boolean::class.javaPrimitiveType, + Boolean::class.javaPrimitiveType, + Boolean::class.javaPrimitiveType, + Boolean::class.javaPrimitiveType + ) + .apply { isAccessible = true } + } catch (error: NoSuchMethodException) { + return clazz.superclass?.let { getCreateViewMethod(it) } + } + } + override fun onCreateView( name: String, context: Context, From 969e7944e6106d354f90b666b8106e6cf87aa204 Mon Sep 17 00:00:00 2001 From: Sebastien Rouif Date: Fri, 1 Jul 2022 16:55:59 +0100 Subject: [PATCH 2/5] re enabled withMaterialComponents() --- .../test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt b/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt index d1c9817173..eb9fc8fd4d 100644 --- a/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt +++ b/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt @@ -7,7 +7,6 @@ import org.gradle.testkit.runner.GradleRunner import org.gradle.testkit.runner.TaskOutcome.FROM_CACHE import org.gradle.testkit.runner.TaskOutcome.SUCCESS import org.junit.Before -import org.junit.Ignore import org.junit.Test import java.io.File import java.nio.file.Files @@ -696,7 +695,7 @@ class PaparazziPluginTest { assertThat(snapshotImage).isSimilarTo(goldenImage).withDefaultThreshold() } - @Ignore + @Test fun withMaterialComponents() { val fixtureRoot = File("src/test/projects/material-components-present") From d03f3b5a824cd52bbd7dde0cc03f4f64715bc372 Mon Sep 17 00:00:00 2001 From: Sebastien Rouif Date: Sat, 2 Jul 2022 00:29:42 +0100 Subject: [PATCH 3/5] Fix Material button test to fit with existing screenshot --- .../material-components-present/src/main/res/layout/button.xml | 2 +- .../test/java/app/cash/paparazzi/plugin/test/ButtonViewTest.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/main/res/layout/button.xml b/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/main/res/layout/button.xml index c9948e803c..8f41b95a70 100644 --- a/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/main/res/layout/button.xml +++ b/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/main/res/layout/button.xml @@ -3,7 +3,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/launchBackground" + android:background="#121212" android:gravity="center" android:orientation="vertical" > diff --git a/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/test/java/app/cash/paparazzi/plugin/test/ButtonViewTest.kt b/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/test/java/app/cash/paparazzi/plugin/test/ButtonViewTest.kt index 9f7c7135ca..aa99fb1ba1 100644 --- a/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/test/java/app/cash/paparazzi/plugin/test/ButtonViewTest.kt +++ b/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/test/java/app/cash/paparazzi/plugin/test/ButtonViewTest.kt @@ -23,7 +23,7 @@ import org.junit.Test class ButtonViewTest { @get:Rule val paparazzi = Paparazzi( - theme = "Theme.MaterialComponents", + theme = "Theme.MaterialComponents.NoActionBar", appCompatViewInflaterClassName = "com.google.android.material.theme.MaterialComponentsViewInflater", ) From 9eebccfd2f61508cc53ecdd9aab010add782e8a1 Mon Sep 17 00:00:00 2001 From: Sebastien Rouif Date: Sat, 2 Jul 2022 14:40:14 +0100 Subject: [PATCH 4/5] re-generated button screenshot from sample --- .../src/main/res/layout/button.xml | 2 +- .../src/test/resources/button.png | Bin 12570 -> 12660 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/main/res/layout/button.xml b/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/main/res/layout/button.xml index 8f41b95a70..c9948e803c 100644 --- a/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/main/res/layout/button.xml +++ b/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/main/res/layout/button.xml @@ -3,7 +3,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#121212" + android:background="@color/launchBackground" android:gravity="center" android:orientation="vertical" > diff --git a/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/test/resources/button.png b/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/test/resources/button.png index 31bac085575cbc50ee50b9a5ff610c60e5a45ece..bb2fb94dbbe62fde33b49ecfda44e7b965c88e46 100644 GIT binary patch literal 12660 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 Date: Mon, 4 Jul 2022 12:52:48 +0100 Subject: [PATCH 5/5] grabbed screenshot from material-components-present tests --- .../src/test/resources/button.png | Bin 12660 -> 12489 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/test/resources/button.png b/paparazzi-gradle-plugin/src/test/projects/material-components-present/src/test/resources/button.png index bb2fb94dbbe62fde33b49ecfda44e7b965c88e46..cdb6099cce7a4301348587ec7118614ae2ead0d0 100644 GIT binary patch literal 12489 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