Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add boolean Flag to decide if image should be original size or not #1382

Merged
merged 13 commits into from
May 16, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -1619,6 +1619,31 @@ class PaparazziPluginTest {
assertThat(nexus7SnapshotImage).isSimilarTo(nexus7GoldenImage).withDefaultThreshold()
}

@Test
fun scaledVersusFullDeviceResolution() {
val fixtureRoot = File("src/test/projects/device-resolution")

gradleRunner
.withArguments("testDebug", "--stacktrace")
.runFixture(fixtureRoot) { build() }

val snapshotsDir = File(fixtureRoot, "build/reports/paparazzi/debug/images")
val snapshots = snapshotsDir.listFiles()?.sortedBy { it.lastModified() }
assertThat(snapshots!!).hasSize(2)

val defaultSnapshotImage = snapshots[0]
val deviceResolutionSnapshotImage = snapshots[1]
val defaultGoldenImage =
File(fixtureRoot, "src/test/resources/default_resolution.png")
val deviceResolutionGoldenImage =
File(fixtureRoot, "src/test/resources/full_resolution.png")
assertThat(defaultSnapshotImage).isSimilarTo(defaultGoldenImage)
.withDefaultThreshold()
assertThat(deviceResolutionSnapshotImage).isSimilarTo(
deviceResolutionGoldenImage
).withDefaultThreshold()
emuguy1 marked this conversation as resolved.
Show resolved Hide resolved
}

@Test
fun localeQualifier() {
val fixtureRoot = File("src/test/projects/locale-qualifier")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'app.cash.paparazzi'
}

android {
namespace 'app.cash.paparazzi.plugin.test'
compileSdk libs.versions.compileSdk.get() as int
defaultConfig {
minSdk libs.versions.minSdk.get() as int
}
compileOptions {
sourceCompatibility = libs.versions.javaTarget.get()
targetCompatibility = libs.versions.javaTarget.get()
}
kotlinOptions {
jvmTarget = libs.versions.javaTarget.get()
}
}

dependencies {
implementation libs.androidx.appcompat

testImplementation libs.testParameterInjector
}

apply from: '../guava-fix.gradle'
emuguy1 marked this conversation as resolved.
Show resolved Hide resolved
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center"
android:background="@color/launchBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@drawable/camera"
/>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/cameraBody"
android:text="paparazzi"
android:textSize="70dp"
android:textFontWeight="100"
/>

</LinearLayout>
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="launchBackground">#dcdccc</color>
<color name="cameraBody">#332F21</color>
</resources>
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="color">Color</string>
<string name="sample_image">sample_image</string>
</resources>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package app.cash.paparazzi.plugin.test

import app.cash.paparazzi.DeviceConfig
import app.cash.paparazzi.Paparazzi
import com.google.testing.junit.testparameterinjector.TestParameter
import com.google.testing.junit.testparameterinjector.TestParameterInjector
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(TestParameterInjector::class)
class DeviceResolutionTest(
@TestParameter useDeviceResolutionFlag: Boolean
) {

@get:Rule
val paparazzi = Paparazzi(
deviceConfig = DeviceConfig.NEXUS_5,
useDeviceResolution = useDeviceResolutionFlag
)

@Test
fun deviceResolution() {
paparazzi.snapshot(paparazzi.inflate(R.layout.launch))
}
}
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 4 additions & 2 deletions paparazzi/api/paparazzi.api
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,8 @@ public final class app/cash/paparazzi/Paparazzi : org/junit/rules/TestRule {
public fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lcom/android/ide/common/rendering/api/SessionParams$RenderingMode;ZDLapp/cash/paparazzi/SnapshotHandler;Ljava/util/Set;Z)V
public fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lcom/android/ide/common/rendering/api/SessionParams$RenderingMode;ZDLapp/cash/paparazzi/SnapshotHandler;Ljava/util/Set;ZZ)V
public fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lcom/android/ide/common/rendering/api/SessionParams$RenderingMode;ZDLapp/cash/paparazzi/SnapshotHandler;Ljava/util/Set;ZZZ)V
public synthetic fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lcom/android/ide/common/rendering/api/SessionParams$RenderingMode;ZDLapp/cash/paparazzi/SnapshotHandler;Ljava/util/Set;ZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lcom/android/ide/common/rendering/api/SessionParams$RenderingMode;ZDLapp/cash/paparazzi/SnapshotHandler;Ljava/util/Set;ZZZZ)V
public synthetic fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lcom/android/ide/common/rendering/api/SessionParams$RenderingMode;ZDLapp/cash/paparazzi/SnapshotHandler;Ljava/util/Set;ZZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun apply (Lorg/junit/runners/model/Statement;Lorg/junit/runner/Description;)Lorg/junit/runners/model/Statement;
public final fun close ()V
public final fun getContext ()Landroid/content/Context;
Expand Down Expand Up @@ -153,7 +154,8 @@ public final class app/cash/paparazzi/PaparazziSdk {
public fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lcom/android/ide/common/rendering/api/SessionParams$RenderingMode;ZLjava/util/Set;ZLkotlin/jvm/functions/Function1;)V
public fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lcom/android/ide/common/rendering/api/SessionParams$RenderingMode;ZLjava/util/Set;ZZLkotlin/jvm/functions/Function1;)V
public fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lcom/android/ide/common/rendering/api/SessionParams$RenderingMode;ZLjava/util/Set;ZZZLkotlin/jvm/functions/Function1;)V
public synthetic fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lcom/android/ide/common/rendering/api/SessionParams$RenderingMode;ZLjava/util/Set;ZZZLkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lcom/android/ide/common/rendering/api/SessionParams$RenderingMode;ZLjava/util/Set;ZZZZLkotlin/jvm/functions/Function1;)V
public synthetic fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lcom/android/ide/common/rendering/api/SessionParams$RenderingMode;ZLjava/util/Set;ZZZZLkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lcom/android/ide/common/rendering/api/SessionParams$RenderingMode;ZLkotlin/jvm/functions/Function1;)V
public fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
public fun <init> (Lapp/cash/paparazzi/Environment;Lapp/cash/paparazzi/DeviceConfig;Lkotlin/jvm/functions/Function1;)V
Expand Down
6 changes: 4 additions & 2 deletions paparazzi/src/main/java/app/cash/paparazzi/Paparazzi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ public class Paparazzi @JvmOverloads constructor(
private val renderExtensions: Set<RenderExtension> = setOf(),
private val supportsRtl: Boolean = false,
private val showSystemUi: Boolean = false,
private val validateAccessibility: Boolean = false
private val validateAccessibility: Boolean = false,
private val useDeviceResolution: Boolean = false
) : TestRule {
private lateinit var sdk: PaparazziSdk
private lateinit var frameHandler: SnapshotHandler.FrameHandler
Expand Down Expand Up @@ -69,7 +70,8 @@ public class Paparazzi @JvmOverloads constructor(
supportsRtl = supportsRtl,
showSystemUi = showSystemUi,
validateAccessibility = validateAccessibility,
onNewFrame = { frameHandler.handle(it) }
onNewFrame = { frameHandler.handle(it) },
useDeviceResolution = useDeviceResolution
)
sdk.setup()
prepare(description)
Expand Down
5 changes: 3 additions & 2 deletions paparazzi/src/main/java/app/cash/paparazzi/PaparazziSdk.kt
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ public class PaparazziSdk @JvmOverloads constructor(
private val supportsRtl: Boolean = false,
private val showSystemUi: Boolean = false,
private val validateAccessibility: Boolean = false,
private val useDeviceResolution: Boolean = false,
private val onNewFrame: (BufferedImage) -> Unit
) {
private val logger = PaparazziLogger()
Expand Down Expand Up @@ -381,8 +382,8 @@ public class PaparazziSdk @JvmOverloads constructor(

private fun scaleImage(image: BufferedImage): BufferedImage {
val scale = ImageUtils.getThumbnailScale(image)
// Only scale images down so we don't waste storage space enlarging smaller layouts.
return if (scale < 1f) ImageUtils.scale(image, scale, scale) else image
// Only scale images down, so we don't waste storage space enlarging smaller layouts.
return if (scale < 1f && !useDeviceResolution) ImageUtils.scale(image, scale, scale) else image
}
emuguy1 marked this conversation as resolved.
Show resolved Hide resolved

private fun validateLayoutAccessibility(view: View, image: BufferedImage? = null) {
Expand Down