Skip to content

Commit

Permalink
Add boolean Flag to decide if image should be original size or not (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
emuguy1 committed May 16, 2024
1 parent afa0cf6 commit 18e7196
Show file tree
Hide file tree
Showing 12 changed files with 123 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1619,6 +1619,30 @@ 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()
}

@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,26 @@
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
}
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
}

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

0 comments on commit 18e7196

Please sign in to comment.