Skip to content

Releases: cashapp/paparazzi

1.3.5

07 Nov 08:48
Compare
Choose a tag to compare

New

  • Render pending recompositions for @Composables that require a second layout pass
  • Support for overlays in accessibility snapshots
  • Support for Compose UI heading and selected states in accessibility snapshots
  • Support for toggleable state in accessibility snapshots
  • Support for displaying multiple accessibility descriptions, similar to Talkback
  • Include failure delta image in JUnit test reporting
  • Migrate Paparazzi to layoutlib Jellyfish 2023.3.1
  • Compose 1.7.5
  • Kotlin 2.0.21
  • [Gradle Plugin] Gradle 8.10.2
  • [Gradle Plugin] Android Gradle Plugin 8.4.2

Fixed

  • Improve Gradle test task caching by preventing overlapping outputs with snapshotOutputDir
  • Migrate plugin to use modern AGP variant APIs
  • Fix support for AndroidX ResourcesCompat.getFont()
  • Fix inconsistent cross-platform text renderings in failure delta image
  • Relax image comparisons with OffByTwo differ to work around cross-platform rendering issues
  • Fix when clearAndSetSemantics is used to render content descriptions in accessibility snapshots
  • Avoid invalid chars in Windows filenames
  • Fix file move failures on Windows
  • Avoid hash collisions when images have similar RGB content
  • Cleanup unnecessary "loadPublicResourceNames" warning from log output
  • Additional bug fixes with accessibility snapshot tests

Kudos to @geoff-powell, @colinmarsch, @BrianGardnerAtl, @ribafish, @gabrielittner and others for contributions this release!

1.3.4

23 May 09:26
Compare
Choose a tag to compare

New

  • Support for animated-PNG-based snapshots using Paparazzi#gif
  • New tasks! deletePaparazziSnapshots and cleanRecordPaparazzi${VARIANT} clear orphaned snapshots
  • Add boolean flag to decide if image should be scaled or full-sized
  • Migrate Paparazzi to layoutlib Iguana 2023.2.1 (now supports SDK 34!)
  • Compose 1.5.14
  • Kotlin 1.9.24
  • [Gradle Plugin] Gradle 8.7
  • [Gradle Plugin] Android Gradle Plugin 8.3.2

Fixed

  • Fix long content description being cut off in accessibility snapshots
  • Include resource references from generated resource folders
  • Fix gradle caching for resources coming from aar dependencies
  • Support SHRINK render mode when using unsafeUpdateConfig
  • Fix issue where multiple snapshots fail when using render extensions
  • Remove guava workaround from 1.3.2 now that Collector APIs are in guava-android

Kudos to @geoff-powell, @gamepro65, @kevinzheng-ap, @nak5ive, @TWiStErRob, @emuguy1 and others for contributions this release!

1.3.3

01 Mar 09:33
Compare
Choose a tag to compare

New

  • Migrate Paparazzi to layoutlib Hedgehog 2023.1.1
  • Compose 1.5.8
  • Kotlin 1.9.22
  • [Gradle Plugin] Gradle 8.6
  • [Gradle Plugin] Android Gradle Plugin 8.2.1

Fixed

  • Update the DeviceConfig screenWidth internally for accessibility tests
  • Fix variant caching issues in new resource/asset loading mechanisms
  • Remove legacy resources/assets loading mechanism
  • Set HardwareConfig width and height based on orientation
  • Apply round screen qualifier to device config
  • Restrict Paparazzi's public API
  • Remove obsolete NEXUS_5_LAND DeviceConfig
  • Fix formatting so that all digits show upon failure
  • Stop resolving dependencies at configuration time
  • Use our own internal HandlerDispatcher for Compose Ui tests
  • Include generated string resources
  • Reset logger to prevent swallowing exceptions

Kudos to @gamepro65, @kevinzheng-ap, @BrianGardnerAtl, @adamalyyan, and others for contributions this release!

1.3.2

14 Jan 00:11
Compare
Choose a tag to compare

NOTE: Due to a known issue with how Guava now publishes its artifact, you will need to apply the following snippet workaround to your root build.gradle (Groovy-based, Kotlin impls will vary slightly):

subprojects {
  plugins.withId("app.cash.paparazzi") {
    // Defer until afterEvaluate so that testImplementation is created by Android plugin.
    afterEvaluate {
      dependencies.constraints {
        add("testImplementation", "com.google.guava:guava") {
          attributes {
            attribute(
              TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE,
              objects.named(TargetJvmEnvironment, TargetJvmEnvironment.STANDARD_JVM)
            )
          }
          because("LayoutLib and sdk-common depend on Guava's -jre published variant." +
            "See https://github.com/cashapp/paparazzi/issues/906.")
        }
      }
    }
  }
}

See also: google/guava#6801.

New

  • Support for pseudolocalization tests! To get started:
@RunWith(TestParameterInjector::class)
class PseudolocalizationTest(
  @TestParameter locale: Locale
) {
  @get:Rule val paparazzi = Paparazzi(
    deviceConfig = DeviceConfig.PIXEL_5.copy(locale = locale.tag)
  )

  @Test fun test() {
    paparazzi.snapshot { SomeComposable() }
  }

  enum class Locale(val tag: String?) {
    Default(null),
    Accent("en-rXA"),
    Bidi("ar-rXB")
  }
}
  • Migrate Paparazzi to layoutlib Giraffe 2022.3.1
  • Compose 1.5.0
  • Kotlin 1.9.0
  • [Gradle Plugin] Gradle 8.5
  • [Gradle Plugin] Android Gradle Plugin 8.1.1

Fixed

  • Fix relativePath bug in port of ResourceFile
  • Resolve report dir from ReportingExtension instead of hardcoding
  • Make report folder variant-aware
  • Remove reliance on kotlinx.coroutines.main.delay
  • Use a class file locator that queries the system class loader
  • Filter out unrecognized java-symbol tag warning
  • Skip synthetic fields in R classes
  • Update task inputs for resources and assets to account for file renames and moves
  • Update delta images to support showing diff when width and height differ

Kudos to @kevinzheng-ap, @TWiStErRob, @gamepro65, @adamalyyan, @larryng, and others for contributions this release!

1.3.1

18 Jul 04:06
Compare
Choose a tag to compare

New

  • Migrated to new resource and asset loading mechanisms. To explicitly opt-out and fall back to the
    legacy mechanisms, add either/both of the following to your gradle.properties:
app.cash.paparazzi.legacy.resource.loading=true
app.cash.paparazzi.legacy.asset.loading=true
  • The Android system ui (status + navigation bar) is now hidden by default; to re-enable:
  @get:Rule
  val paparazzi = Paparazzi(
    showSystemUi = true
  )
  • Relocate failure deltas from PROJECT_ROOT/out/failures/ to BUILD_DIR/paparazzi/failures/
  • Support for application and dynamic feature modules
  • [Gradle Plugin] Gradle 8.2.1

Fixed

  • Fix accessibility labels when mergeDescendants is true
  • Fixes compose alert dialogs not rendering when using RenderingMode.SHRINK

Kudos to @kevinzheng-ap, @adamalyyan and others for contributions this release!

1.3.0

31 May 17:56
Compare
Choose a tag to compare

As of this release, consumers must build on Java 17+ environments.

New

  • Migrate Paparazzi to layoutlib Flamingo 2022.2.1
  • Add accessibility support for Composables
  • Add layout accessibility check support
  • Compose 1.4.7
  • Kotlin 1.8.21
  • [Gradle Plugin] Gradle 8.1.1
  • [Gradle Plugin] Android Gradle Plugin 8.0.2

Fixed

  • Configure android.os.Build values via reflection
  • Various bug fixes with AccessibilityRenderExtension
  • Make sure changes to system properties actually affect test tasks
  • Fix caching bug with preparePaparazziResources task
  • Use Dispatchers.Main for delay functionality
  • Recomposition does not happen unless lifecycle is RESUMED
  • Fix NPE when unit test variant is disabled
  • Fix incompatibility with androidx.savedstate:1.1.0

Kudos to @gamepro65, @geoff-powell, @TWiStErRob, @adamalyyan and others for contributions this release!

1.2.0

18 Jan 19:55
Compare
Choose a tag to compare
1.2.0

1.1.0

12 Oct 21:34
Compare
Choose a tag to compare
1.1.0

1.0.0

03 Jun 14:23
Compare
Choose a tag to compare
1.0.0

0.9.3

21 Jan 00:17
Compare
Choose a tag to compare
0.9.3