From 00fc12e6d6b2f1bc657911ce21476a002fdaf257 Mon Sep 17 00:00:00 2001 From: Tim Froehlich Date: Wed, 20 Sep 2023 12:14:05 -0600 Subject: [PATCH 1/4] Initial support for Roborazzi This adds a basic Roborazzi test to HelloWorld and includes documentation on it. --- .github/workflows/main.yml | 52 +++++ README.md | 10 + build.gradle.kts | 1 + dev-scripts/test-all.sh | 2 +- docs/_docs/live-update/setup.md | 6 +- .../working-with-source/writing-tests.md | 203 ++++++++++++++++++ gradle/libs.versions.toml | 7 + reference-apps/helloworld/build.gradle.kts | 12 +- .../src/testDebug/kotlin/RenderHelloWorld.kt | 69 ++++++ ....helloworld.RenderHelloWorld.testHello.png | Bin 0 -> 76902 bytes 10 files changed, 357 insertions(+), 5 deletions(-) create mode 100644 docs/_docs/working-with-source/writing-tests.md create mode 100644 reference-apps/helloworld/src/testDebug/kotlin/RenderHelloWorld.kt create mode 100644 reference-apps/helloworld/src/testDebug/roborazzi/com.android.designcompose.testapp.helloworld.RenderHelloWorld.testHello.png diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ce18c6f35..a117e5b71 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -192,6 +192,58 @@ jobs: name: designcompose_m2repo path: build/designcompose_m2repo/ + # These tests run on the local JVM and don't need the rust code, + # so it makes sense to put them in a seperate job + roborazzi: + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + runs-on: ${{ matrix.os }} + steps: + - name: Harden Runner + uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 # v2.5.1 + with: + egress-policy: audit + + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v3.5.2 + + - name: Set up Java + uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 + with: + distribution: "temurin" + java-version: "17" + + - name: Validate Roborazzi + uses: gradle/gradle-build-action@ef76a971e2fa3f867b617efd72f2fbd72cf6f8bc # v2.8.0 + with: + # Upload in the dependency-review workflow + dependency-graph: generate + arguments: verifyRoborazziDebug + + - uses: actions/upload-artifact@v3 + if: ${{ always() }} + with: + name: screenshot-diff + path: | + **/src/testDebug/roborazzi + retention-days: 30 + + - uses: actions/upload-artifact@v3 + if: ${{ always() }} + with: + name: screenshot-diff-reports + path: | + **/build/reports + retention-days: 30 + + - uses: actions/upload-artifact@v3 + if: ${{ always() }} + with: + name: screenshot-diff-test-results + path: | + **/build/test-results + retention-days: 30 + ########### Tutorial app tutorial-app: runs-on: ubuntu-latest diff --git a/README.md b/README.md index 7281d2aa8..52a13099c 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,16 @@ To update the Design Switcher, temporarily set the `DISABLE_LIVE_MODE` flag in ` The Tutorial's DesignDoc is set to the main development Figma file, to assist in development of the app, but the committed serialized file is a separate file that presents a "welcome" page. This file's ID is `BX9UyUa5lkuSP3dEnqBdJf`. To update the file, fetch the `BX9UyUa5lkuSP3dEnqBdJf` file, then replace `reference-apps/tutorial/app/src/main/assets/figma/TutorialDoc_3z4xExq0INrL9vxPhj9tl7` with the serialized file. **The file name will remain the same**, the `TutorialDoc_3z4xExq0INrL9vxPhj9tl7` fill will contain the serialized `BX9UyUa5lkuSP3dEnqBdJf` file. The Tutorial app project has an AndroidIntegratedTest to ensure that the correct file is set, and it will be run as part of running the `./dev-scripts/test-all.sh` script. +## Roborazzi screenshot tests + +[Roborazzi](https://github.com/takahirom/roborazzi) is a new framework that allows for screenshot testing of Android Apps on your local system. It uses [Robolectric](https://github.com/robolectric/robolectric), the standard unit testing framework for Android, to render DesignCompose locally, allowing screenshots to be generated. The screenshots won't be one-to-one with actual Android devices, but they'll be very close and stable enough for changes to be detected. + +Roborazzi is implemented in tests under `/src/testDebug`. The tests themselves will run if you run `./gradlew test`, but screenshots will only be checked if you run `./gradlew verifyRoborazziDebug`. This command has been added to the `./dev-scripts/test-all.sh` command, so you don't need to run it separately if you run test-all. + +If `verifyRoborazziDebug` fails then you can run `compareRoborazziDebug` to generate image diffs. If after reviewing these you determine that the change is acceptable you can regenerate the screenshots using `recordRoborazziDebug`. (Note that this will regenerate all images from all tests). + +More info can be found in [Roborazzi's readme](https://github.com/takahirom/roborazzi#apply-roborazzi-gradle-plugin). + ## Testing the standalone version of the Tutorial app The Tutorial app is currently part of two projects: The root project in the root of the repository, and the tutorial project in `reference-apps/tutorial`. The root project is the one that contains the entire SDK and our apps and is where you typically develop. The second project is the one that users following the Tutorial are directed to use. It fetches DesignCompose from gMaven, which means that it builds much faster and doesn't compile rust code (and doesn't require the rust SDK to be installed). This means that the standalone Tutorial needs some extra configuration if you want the standalone Tutorial project to use any unpublished changes to the libraries and plugin. diff --git a/build.gradle.kts b/build.gradle.kts index ac6c593d4..773e68b40 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -36,6 +36,7 @@ plugins { id("designcompose.conventions.base") id("designcompose.conventions.android-test-devices") apply false alias(libs.plugins.ksp) apply false + alias(libs.plugins.roborazzi) apply false } // Format all *.gradle.kts files in the repository. This should catch all buildscripts. diff --git a/dev-scripts/test-all.sh b/dev-scripts/test-all.sh index 9ad6d145d..3bff40ced 100755 --- a/dev-scripts/test-all.sh +++ b/dev-scripts/test-all.sh @@ -80,7 +80,7 @@ cd "$GIT_ROOT/plugins" || exit ./gradlew build cd "$GIT_ROOT" || exit -./gradlew build publishAllPublicationsToLocalDirRepository +./gradlew build publishAllPublicationsToLocalDirRepository verifyRoborazziDebug if [[ $run_emulator_tests == 1 ]]; then ./gradlew tabletAtdApi30Check -Pandroid.testoptions.manageddevices.emulator.gpu=swiftshader_indirect diff --git a/docs/_docs/live-update/setup.md b/docs/_docs/live-update/setup.md index 601ae687d..a6ccc4f49 100644 --- a/docs/_docs/live-update/setup.md +++ b/docs/_docs/live-update/setup.md @@ -23,13 +23,13 @@ To configure access to your documents, you need to generate an access token. **Figure 1.** Figma Settings Menu. -1. Scroll down to **Personal access tokens** and click **Generate new token** +2. Scroll down to **Personal access tokens** and click **Generate new token** -1. Automotive Design for Compose requires a token with read-only File content access. All other scopes can be left set to "No access". Set the permissions appropriately, enter a name for the token and set the expiration, then click **Generate token** +3. Automotive Design for Compose requires a token with read-only File content access. All other scopes can be left set to "No access". Set the permissions appropriately, enter a name for the token and set the expiration, then click **Generate token** ![Figma Token Generation Screen](figma-token.png) -1. Save the token in the following well-known location on your file system. The location depends on your operating system: +4. Save the token in the following well-known location on your file system. The location depends on your operating system: - Linux, MacOS: `$HOME/.config/figma_access_token` diff --git a/docs/_docs/working-with-source/writing-tests.md b/docs/_docs/working-with-source/writing-tests.md new file mode 100644 index 000000000..ddac1a5b1 --- /dev/null +++ b/docs/_docs/working-with-source/writing-tests.md @@ -0,0 +1,203 @@ +--- +title: Testing +layout: page +parent: Working with Source +nav_order: 2 +--- + +{% include toc.md %} + +# Android Tests + +We have multiple types of Android Tests, grouped by how they're run. They are triggered by different +Gradle commands and each type should be focused on different things + +## AndroidInstrumentedTests + +These run on an Android device, which can be a physical device or emulator. These tests are slow to +run and currently not being run on CI, so they should be written only when a full Android device is +needed for the test. The source for the tests is stored in the `/src/androidTest` directory of the Gradle package. + +There are two groups of tests, standard ones and Figma Integration tests. The Figma tests should be +located in a `figmaIntegrationTests` sub-package. These tests require +a [working Figma Token](../live-update/setup.md) and will interact with Figma.com to test certain +interactions, including fetching documents. (Gradle will attempt to read the token automatically). + +### Running on a physical device or specific emulator + +When developing / working on a test you should run them on a physical device or running emulator ( +aka Android Virtual Device aka AVD). Running the full suite is slower, but it's much easier to debug +individual runs. + +Run with `./gradlew connectedCheck` + +### Running on Gradle Managed Devices (much faster) + +When simply running tests to confirm that they pass, you should +use [Gradle Managed Devices (aka GMD)](https://developer.android.com/studio/test/gradle-managed-devices) +to run them. These will cause Gradle to launch emulators to run the tests on. One set uses +an [ATD image](https://developer.android.com/studio/test/gradle-managed-devices#gmd-atd), which is +optimized for instrumented tests, and runs faster than the other GMDs. + +If you have a sufficiently powerful machine you can use the below Gradle property to launch multiple +emulators and spread the tests among them. I recommend 3 shards for now, I haven't seen much better +performance with 4. Set in your personal `~/.gradle/gradle.properties`, do not set in any of the +checked-in properties files. + +```gradle.properties +android.experimental.androidTest.numManagedDeviceShards=3 +``` + +Run the tests on GMDs by running: + +```shell +./gradlew gmdTestQuick # Run on the ATDs, for the fastest run +./gradlew gmdTestStandard # Run on ATDs and the most current Android image +./gradlew gmdTestAll # run on all configured GMDs, including all Android images that we test against +``` + +Note: The first run will have some significant first-time setup as the GMDs are created. + +## Local unit tests + +Most tests should be written as unit tests, stored in `/src/testDebug`. These are run on your local system using your JVM and are much faster than +Instrumented tests, though it's harder to debug graphics output because there isn't a visible +screen to check the output on (that I'm aware of). + +Tests that need Android components, such as Compose, will +use [Robolectric](https://robolectric.org/). It mocks most of the Android core, allowing those tests +to be run locally. + +The tests can be run with `./gradlew test`, and will be run as part of `./gradlew check` +and `./gradlew build` + +## Screenshot tests + +[Roborazzi](https://github.com/takahirom/roborazzi) is used to support screenshot testing. It uses +Robolectric to generate the screenshots with your local JVM, allowing it to run very quickly. The +tests depend on the serialized Figma files in the `/src/main/assets/figma` directory being +up to date. If they are out of date then you may not get an accurate test result. + +Roborazzi is implemented as part of the unit tests in `/src/testDebug`. The tests +themselves will run if you run `./gradlew test`, but screenshots will only be checked if you +run `./gradlew verifyRoborazziDebug`. This command has been added to the `./dev-scripts/test-all.sh` +command, so you don't need to run it separately if you run `test-all`. + +If `verifyRoborazziDebug` fails then you can run `compareRoborazziDebug` to generate image diffs. If +after reviewing these you determine that the change is acceptable you can regenerate the screenshots +using `recordRoborazziDebug`. (Note that this will regenerate all images from all tests). + +## Testing Figma file rendering + +Start with +the [Compose testing documentation](https://developer.android.com/jetpack/compose/testing) for the +basics of Compose testing. The below should apply to both unit and integration (AndroidInstrumented) +tests. + +The tests require a `composeTestRule`, though there are two types. The basic one, `createComposeRule()` should be the default choice, as it starts up faster. The alternate is `createAndroidComposeRule()`, for tests (such as ones with Roborazzi) that require access to a running activity. + +The DesignDoc to be tested is set via `composeTestRule.setContent()`. For example, HelloWorld's +basic test uses this line: + +```kotlin +class RenderHelloWorld { + + @get:Rule + val composeTestRule = createComposeRule() + + @Test + fun testHello() { + composeTestRule.setContent { HelloWorldDoc.mainFrame(name = "Testers!") } + ... + } +} +``` + +To check that the doc was rendered (meaning was read, deserialized, and displayed): assert that a +node with the semantic `docIdSemanticsKey` with the value equalling your file's fileId exists. From +HelloWorld: + +```kotlin +composeTestRule + .onNode(SemanticsMatcher.expectValue(docIdSemanticsKey, helloWorldDocId)) + .assertExists() +``` + +### Marking screenshots + +Add `.captureRoboImage()` to any compose `onNode()` result to take a screenshot there. For +example, to capture a screenshot of the HelloWorld doc, add this: + +```kotlin +composeTestRule + .onNode(SemanticsMatcher.expectValue(docIdSemanticsKey, helloWorldDocId)) + .captureRoboImage("helloWorld.png") +``` + +All tests should output images to `/src/testDebug/roborazzi`. They should also capture an +image of the last state of the test. These can be accomplished with a `RoborazziRule`, +see `reference-apps/helloworld/src/testDebug/kotlin/RenderHelloWorld.kt` for the current options +used. Copy that code block into any tests you create that use Roborazzi, otherwise the screenshots +will be saved in the default Roborazzi location. + +**Remember**, screenshots are **only captured** when running `./gradlew captureRoborazziDebug` and checked +when running `./gradlew verifyRoborazziDebug`. + +# Rust tests + +Simply run `cargo test` to run the unit tests for the rust code. There are no integration tests at this time. + +# Running all tests + +The `./dev-scripts/test-all.sh` script will trigger all tests in the repo. This script must pass +before a release candidate can be cut. + +## Prerequisites + +- Make sure your system can run Android Emulators +- Check out the current supported branch of the AAOS Unbundled repo (see the "Check out the + Unbundled AAOS Repo" job in `.github/workflows/main` for the correct branch) +- Set `$FIGMA_ACCESS_TOKEN` to your Figma token or have it set in ~/.config/figma_access_token + +The test-all script takes an optional `-s` flag to skip all emulator tests. It's intended for +situations where emulators can't be started. + +# What tests to run + +Here's a tl;dr: + +## To run unit tests + +```shell +cargo test && ./gradlew test +``` + +## To test code that modifies anything related to fetching or serializing docs + +`./gradlew gmdTestQuick` + +## To test code related to rendering docs + +Make sure your saved serialized files (`src/main/assets/figma/*`) are up to date, then run: + +`./gradlew verifyRoborazziDebug` + +If you there are differences and they're acceptable, run: + +`./gradlew captureRoborazziDebug` + +## For a reasonable amount of tests that will finish in a reasonable amount of time + +```shell +cargo test && ./gradlew test gmdTestQuick verifyRoborazziDebug +``` + +## When your code is ready for review + +First run `./dev-scripts/format-all.sh` to make sure everything is formatted. + +Then run: + +```shell +./dev-scripts/test-all.sh +``` diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c14ae639d..38efed762 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -54,6 +54,8 @@ junit5 = "5.10.0" truth = "1.1.5" core = "1.10.1" activityKtx = "1.7.2" +robolectric = "4.10.3" +roborazzi = "1.7.0-alpha-2" [libraries] accompanist-flowlayout = { module = "com.google.accompanist:accompanist-flowlayout", version.ref = "accompanist" } @@ -108,9 +110,14 @@ google-truth = { module = "com.google.truth:truth", version.ref = "truth" } junit-jupiter = {module = "org.junit.jupiter:junit-jupiter", version.ref = "junit5" } androidx-core = { group = "androidx.core", name = "core", version.ref = "core" } androidx-activity-ktx = { group = "androidx.activity", name = "activity-ktx", version.ref = "activityKtx" } +robolectric = {module = "org.robolectric:robolectric", version.ref = "robolectric"} +roborazzi = {module = "io.github.takahirom.roborazzi:roborazzi", version.ref = "roborazzi"} +roborazzi-compose = {module = "io.github.takahirom.roborazzi:roborazzi-compose", version.ref = "roborazzi"} +roborazzi-junit = {module = "io.github.takahirom.roborazzi:roborazzi-junit-rule", version.ref = "roborazzi"} [plugins] designcompose = { id = "com.android.designcompose", version.ref = "designcompose" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } ktfmt = { id = "com.ncorti.ktfmt.gradle", version.ref = "ktfmt" } strictVersionMatcher = { id = "com.google.android.gms.strict-version-matcher-plugin", version.ref = "android-gms-strictVersionMatcher" } +roborazzi = {id = "io.github.takahirom.roborazzi", version.ref = "roborazzi"} diff --git a/reference-apps/helloworld/build.gradle.kts b/reference-apps/helloworld/build.gradle.kts index 0ccf5919f..07d116f98 100644 --- a/reference-apps/helloworld/build.gradle.kts +++ b/reference-apps/helloworld/build.gradle.kts @@ -21,6 +21,7 @@ plugins { alias(libs.plugins.ksp) id("designcompose.conventions.base") alias(libs.plugins.designcompose) + alias(libs.plugins.roborazzi) } var applicationID = "com.android.designcompose.testapp.helloworld" @@ -74,7 +75,8 @@ android { kotlinCompilerExtensionVersion = libs.versions.androidx.compose.compiler.get() } - packaging { resources { excludes.add("/META-INF/{AL2.0,LGPL2.1}") } } + packaging.resources.excludes.add("/META-INF/{AL2.0,LGPL2.1}") + testOptions.unitTests.isIncludeAndroidResources = true // For Roborazzi } dependencies { @@ -93,6 +95,14 @@ dependencies { debugImplementation(libs.androidx.compose.ui.tooling) debugImplementation(libs.androidx.compose.ui.test.manifest) + + testImplementation(libs.robolectric) + testImplementation(libs.roborazzi) + testImplementation(libs.roborazzi.compose) + testImplementation(libs.roborazzi.junit) + testImplementation(libs.androidx.test.espresso.core) + testImplementation(libs.androidx.compose.ui.test.junit4) + androidTestImplementation(kotlin("test")) androidTestImplementation(libs.google.truth) androidTestImplementation(libs.junit) diff --git a/reference-apps/helloworld/src/testDebug/kotlin/RenderHelloWorld.kt b/reference-apps/helloworld/src/testDebug/kotlin/RenderHelloWorld.kt new file mode 100644 index 000000000..3c4b31a09 --- /dev/null +++ b/reference-apps/helloworld/src/testDebug/kotlin/RenderHelloWorld.kt @@ -0,0 +1,69 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.designcompose.testapp.helloworld + +import androidx.activity.ComponentActivity +import androidx.compose.ui.test.SemanticsMatcher +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.onRoot +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.android.designcompose.docIdSemanticsKey +import com.github.takahirom.roborazzi.RobolectricDeviceQualifiers +import com.github.takahirom.roborazzi.RoborazziRule +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode + +/** + * Render hello world + * + * Basic test that uses Robolectrict's native graphics to test that HelloWorld renders. + * + * Includes Roborazzi for Screenshot tests, + */ +@RunWith(AndroidJUnit4::class) +@Config(qualifiers = RobolectricDeviceQualifiers.MediumTablet) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +class RenderHelloWorld { + @get:Rule val composeTestRule = createAndroidComposeRule() + + @get:Rule + val roborazziRule = + RoborazziRule( + composeRule = composeTestRule, + // Specify the node to capture for the last image + captureRoot = composeTestRule.onRoot(), + options = + RoborazziRule.Options( + outputDirectoryPath = "src/testDebug/roborazzi", + // Always capture the last image of the test + captureType = RoborazziRule.CaptureType.LastImage() + ) + ) + + @Test + fun testHello() { + with(composeTestRule) { + setContent { HelloWorldDoc.mainFrame(name = "Testers!") } + onNode(SemanticsMatcher.expectValue(docIdSemanticsKey, helloWorldDocId)).assertExists() + onNodeWithText("Testers!", substring = true).assertExists() + } + } +} diff --git a/reference-apps/helloworld/src/testDebug/roborazzi/com.android.designcompose.testapp.helloworld.RenderHelloWorld.testHello.png b/reference-apps/helloworld/src/testDebug/roborazzi/com.android.designcompose.testapp.helloworld.RenderHelloWorld.testHello.png new file mode 100644 index 0000000000000000000000000000000000000000..ed2dd6e7cd5e6bc693d660a37d3e4aef516b947b GIT binary patch literal 76902 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 jwxGIiFmxHR0bwkQPyrWj0^84R*E{0dvwDVm literal 0 HcmV?d00001 From c717bdb95af99571c4976e615b822498b928e2c9 Mon Sep 17 00:00:00 2001 From: Tim Froehlich Date: Thu, 21 Sep 2023 09:04:53 -0600 Subject: [PATCH 2/4] GH action change --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a117e5b71..c566f2824 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -234,6 +234,8 @@ jobs: name: screenshot-diff-reports path: | **/build/reports + **/build/outputs/roborazzi + retention-days: 30 - uses: actions/upload-artifact@v3 From 837886d86f5b10780281a537e0fe43bf570070e3 Mon Sep 17 00:00:00 2001 From: Tim Froehlich Date: Thu, 21 Sep 2023 09:53:39 -0600 Subject: [PATCH 3/4] Doc updates --- README.md | 8 +------- docs/_docs/working-with-source/writing-tests.md | 6 +++--- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 52a13099c..7d54928fc 100644 --- a/README.md +++ b/README.md @@ -144,13 +144,7 @@ The Tutorial's DesignDoc is set to the main development Figma file, to assist in ## Roborazzi screenshot tests -[Roborazzi](https://github.com/takahirom/roborazzi) is a new framework that allows for screenshot testing of Android Apps on your local system. It uses [Robolectric](https://github.com/robolectric/robolectric), the standard unit testing framework for Android, to render DesignCompose locally, allowing screenshots to be generated. The screenshots won't be one-to-one with actual Android devices, but they'll be very close and stable enough for changes to be detected. - -Roborazzi is implemented in tests under `/src/testDebug`. The tests themselves will run if you run `./gradlew test`, but screenshots will only be checked if you run `./gradlew verifyRoborazziDebug`. This command has been added to the `./dev-scripts/test-all.sh` command, so you don't need to run it separately if you run test-all. - -If `verifyRoborazziDebug` fails then you can run `compareRoborazziDebug` to generate image diffs. If after reviewing these you determine that the change is acceptable you can regenerate the screenshots using `recordRoborazziDebug`. (Note that this will regenerate all images from all tests). - -More info can be found in [Roborazzi's readme](https://github.com/takahirom/roborazzi#apply-roborazzi-gradle-plugin). +[Roborazzi](https://github.com/takahirom/roborazzi) is a new framework that allows for screenshot testing of Android Apps on your local system. It uses [Robolectric](https://github.com/robolectric/robolectric), the standard unit testing framework for Android, to render DesignCompose locally, allowing screenshots to be generated. The screenshots won't be one-to-one with actual Android devices, but they'll be very close and stable enough for changes to be detected. The comparison is run using `./gradlew verifyRoborazziDebug`. See [our documentation](https://google.github.io/automotive-design-compose/docs/working-with-source/writing-tests) for more information. ## Testing the standalone version of the Tutorial app diff --git a/docs/_docs/working-with-source/writing-tests.md b/docs/_docs/working-with-source/writing-tests.md index ddac1a5b1..b9446ffc0 100644 --- a/docs/_docs/working-with-source/writing-tests.md +++ b/docs/_docs/working-with-source/writing-tests.md @@ -83,9 +83,9 @@ themselves will run if you run `./gradlew test`, but screenshots will only be ch run `./gradlew verifyRoborazziDebug`. This command has been added to the `./dev-scripts/test-all.sh` command, so you don't need to run it separately if you run `test-all`. -If `verifyRoborazziDebug` fails then you can run `compareRoborazziDebug` to generate image diffs. If -after reviewing these you determine that the change is acceptable you can regenerate the screenshots -using `recordRoborazziDebug`. (Note that this will regenerate all images from all tests). +If `verifyRoborazziDebug` fails it will output comparison images to `/build/outputs/roborazzi`. You can also run `./gradlew compareRoborazziDebug --rerun-tasks` to generate a report of all changed images in `/build/reports/roborazzi`. If you determine that the change is acceptable you can regenerate the screenshots using`recordRoborazziDebug`. (Note that this will regenerate all images from all tests). + +More information can be found in [Roborazzi's readme](https://github.com/takahirom/roborazzi#apply-roborazzi-gradle-plugin). ## Testing Figma file rendering From 9cb57ff0da515e69c671e3749fc1658556e8b8ff Mon Sep 17 00:00:00 2001 From: Tim Froehlich Date: Thu, 28 Sep 2023 09:26:46 -0600 Subject: [PATCH 4/4] Doc fix --- docs/_docs/working-with-source/writing-tests.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/working-with-source/writing-tests.md b/docs/_docs/working-with-source/writing-tests.md index b9446ffc0..e55d2a338 100644 --- a/docs/_docs/working-with-source/writing-tests.md +++ b/docs/_docs/working-with-source/writing-tests.md @@ -140,7 +140,7 @@ see `reference-apps/helloworld/src/testDebug/kotlin/RenderHelloWorld.kt` for the used. Copy that code block into any tests you create that use Roborazzi, otherwise the screenshots will be saved in the default Roborazzi location. -**Remember**, screenshots are **only captured** when running `./gradlew captureRoborazziDebug` and checked +**Remember**, screenshots are **only captured** when running `./gradlew recordRoborazziDebug` and checked when running `./gradlew verifyRoborazziDebug`. # Rust tests