Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
1.32.2
->1.38.0
1.32.2
->1.38.0
1.32.2
->1.38.0
1.32.2
->1.38.0
Release Notes
takahirom/roborazzi (io.github.takahirom.roborazzi)
v1.38.0
Compare Source
Bugfix
Fix: Bug preventing the revival of deleted screenshot images
Thanks to @pedromfmachado's contribution, we've addressed a bug where deleted screenshot test images would be erroneously revived. Previously, when screenshot tests were removed and their corresponding images deleted from the output directory, running the
record
task again would cause the Roborazzi Gradle task to recreate the removed images. While this could be temporarily resolved withroborazzi.cleanupOldScreenshots=true
, that approach was undesirable as it would also remove images when test filters were used. This was a complex issue to solve, and we extend our gratitude to @pedromfmachado for the fix.Fix: Made screenshot dump deterministic
We have a dump feature that allows us to check the properties or hierarchy of views or composables in an image. We sorted the properties to ensure a deterministic output. Thanks to @siarhei-luskanau for this contribution.
New Feature
Feature: Added
RoborazziComposeActivityThemeOption
Previously, changing the theme of
RoborazziTransparentActivity
was not possible. We have now deprecatedRoborazziTransparentActivity
and renamed it toRoborazziActivity
. Additionally, we addedRoborazziComposeActivityThemeOption
to enable changing the Activity's theme. Thank you again, @pedromfmachado, for this feature.You can now change the Activity theme like this:
What's Changed
New Contributors
Full Changelog: takahirom/roborazzi@1.37.0...1.38.0
v1.37.0
Compare Source
Bug Fixes and Workarounds
Compose AlertDialog Support
Support for capturing Alert Dialogs has been fixed, ensuring correct screenshot display.
captureScreenRoboImage()
, which merges all windows, is now used only when multiple windows are present. Thanks to @ashughes for reporting this and to @mhidaka and @hiroaki404 for bringing it to my attention at a Japan Android testing event.Workaround for Overlap Handling for SDK 35 Compose Screenshots
Problem
When updating to SDK 35 and using the default theme, the ActionBar is included in screenshots, leading to overlap when using
createComposeRule()
. This occurs becausecreateComposeRule()
uses the default theme by default. Thank you for letting me know about this, @keyboardsurfer!I have filed an issue for this: https://issuetracker.google.com/issues/383368165
Why this happens
SDK 35 enforces edge-to-edge display, which means it does not provide automatic padding for the ActionBar.
How Roborazzi currently workarounds this
Roborazzi now automatically hides the ActionBar when taking screenshots on SDK 35 and higher. This functions similarly to
view.getActivity()?.actionBar?.hide()
. However, this workaround may cause performance issues and should not be relied upon. Roborazzi outputs warning logs with alternative suggestions. Thank you to @sergio-sastre for advising on this workaround!If you need to include the ActionBar in screenshots, Roborazzi provides a flag,
roborazzi.compose.actionbar.overlap.fix=false
, that can be added to yourgradle.properties
file.What should we do?
A permanent solution will likely require changes from Google. In the meantime, adding
<application android:theme="@​style/android:Theme.Material.Light.NoActionBar" />
to the module'ssrc/test/AndroidManifest.xml
file changes the Activity's default theme and resolves the issue. Thank you to @mattinger for finding this!https://github.com/takahirom/roborazzi/issues/598#issuecomment-2533372700
Stabilized Output for Dump Screenshots
Thanks to @siarhei-luskanau for contributing an improvement that reduces unnecessary diffs for the Roborazzi dump feature.
New Features
Add
inspectionMode()
for Compose PreviewsThanks to @YusukeMoriJapan's contribution,
inspectionMode()
is now available inRoborazziComposeOptions
. This is particularly useful when working with libraries that have specific preview implementations. This mode is off by default to maintain high fidelity.Here's how to enable it:
What's Changed
New Contributors
Full Changelog: takahirom/roborazzi@1.36.0...1.37.0
v1.36.0
Compare Source
Behavior Changes to
roborazzi.outputDir.set(file("somedir"))
inbuild.gradle
Previously, when modifying
roborazzi.outputDir
, such as setting it tosrc/screenshots
, this option also affected the paths for comparison images, likefoo_compare.png
. This behavior often caused issues, such as unintentionally saving comparison images to version control systems (e.g., Git). To address this, we have discontinued this behavior. Comparison images are now saved inbuild/outputs/roborazzi
by default, while the behavior for reference images remains unchanged.For users who wish to customize the path for comparison images, we have introduced a new option:
roborazzi.compare.outputDir
.While I don't believe there are strong use cases for this, if you want to save the comparison images in a custom directory as you did before, you can specify
roborazzi.compare.outputDir
as follows:I believe this adjustment will be highly beneficial for most use cases involving changes to
outputDir
.What's Changed
Full Changelog: takahirom/roborazzi@1.35.0...1.36.0
v1.35.0
Compare Source
Add support for heightDp, widthDp, showBackground, and backgroundColor of Compose Preview parameters
We have introduced Experimental Compose Preview Support in 1.22.0, but it does not yet support all parameters of the
@Preview
annotation. Thanks to @sergio-sastre 's pull request, the Experimental Compose Preview Support now includes support for heightDp, widthDp, showBackground, and backgroundColor.Introduce RoborazziComposeOptions
To accommodate the changes in preview parameters, we’ve made the API more flexible.
We’ve added the
RoborazziComposeOptions
parameter toComposablePreview<AndroidPreviewInfo>.captureRoboImage()
and the composable function version,captureRoboImage{}
. Previously, the API was limited; for example, you couldn’t access the ActivityScenario or the composable function directly. Now, you have full control over these components. Thank you for your code review @sergio-sastreHere’s an example of a custom option:
Breaking Change:
fun ComposablePreview<AndroidPreviewInfo>.applyToRobolectricConfiguration()
is now deprecated and marked as an errorAs part of our updates to how composables are configured, the
applyToRobolectricConfiguration()
function is now deprecated and marked as an error. Instead, you can use one of the following alternatives:previewInfo.toRoborazziComposeOptions().apply(scenario, composeContent)
ComposablePreview<AndroidPreviewInfo>.captureRoboImage(roborazziComposeOptions)
We believe this feature is not widely used, and the migration should be straightforward. However, if you encounter any issues, please don’t hesitate to reach out.
Breaking Change: Composable
captureRoboImage{}
Behavior ChangeWe intended to use a transparent background for the Compose
captureRoboImage
function, but it was not applied due to Robolectric's resource merging mechanism. We have fixed this behavior; however, this change will result in altered screenshots. You can now specify the background in the newRoborazziComposeOptions
as we had previously.What's Changed
Full Changelog: takahirom/roborazzi@1.34.0...1.35.0
v1.34.0
Compare Source
Stabilize RoborazziOptions and RoborazziRule.Options
RoborazziOptions and RoborazziRule.Options were not annotated with
ExperimentalRoborazziApi
, but their constructor parameters had the annotation. This causedExperimentalRoborazziApi
to be unintentionally exposed. To address this, we have separated constructors for stable parameters. Additionally, within Roborazzi samples, we have enabledallWarningsAsErrors = true
to ensure that any unexpected exposure can be promptly identified.Thank you for reporting this issue and for your code review, @colinrtwhite!
Fixes for Accessibility Checks
We introduced Experimental Accessibility Test Framework checks in version 1.33.0.
Thanks to @yschimke's contribution, several fixes have been implemented for accessibility checks, including check suppression and improved logging.
What's Changed
Full Changelog: takahirom/roborazzi@1.33.0...1.34.0
v1.33.0
Compare Source
Experimental Accessibility Test Framework checks
Thanks to @yschimke's contribution, we now have a library that integrates accessibility checks into Roborazzi. It uses the Accessibility Test Framework to ensure accessibility.
Please add the library dependency:
testImplementation("io.github.takahirom.roborazzi:roborazzi-accessibility-check:[version]")
https://github.com/takahirom/roborazzi/tree/main/roborazzi-accessibility-check
Configure in Junit Rule
Add accessibility checks
Not only is this library designed to make our app accessible to everyone, but I also believe that AI agent testing will be a future trend, and we want to prepare for it. I think this could help make our app accessible to AI as well, enabling agents to interact with it, such as clicking on image buttons using content descriptions. Additionally, we can create custom checks, like NoRedTextCheck, specifically for AI.
What's Changed
Full Changelog: takahirom/roborazzi@1.32.2...1.33.0
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR was generated by Mend Renovate. View the repository job log.