Skip to main content

build-grid-screenshot-tests

A skill for building instrumented tests in Remote Compose using GridScreenshotUI.

ソース情報

リポジトリ
JetBrains/compose-multiplatform-core
ソースの最終更新活動
2026年5月6日 11:27
検出された SKILL.md の言語
英語
スター
661
フォーク
149

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
build_grid_screenshot_tests
description
A skill for building instrumented tests in Remote Compose using GridScreenshotUI.
# Building Instrumented Tests using GridScreenshotUI > [!IMPORTANT] > **AI INSTRUCTION:** Do not assume you should use `GridScreenshotUI` for all tests in this directory. If the user asks you to write a screenshot test, you MUST first explicitly ask them: "Would you like me to use the `GridScreenshotUI` utility for this test?" Proceed with using this skill only if they confirm. This skill provides guidelines for building screenshot tests using `GridScreenshotUI` in the `@compose/remote/remote-creation-compose` project. ## Purpose `GridScreenshotUI` is a utility class designed to lay out multiple small remote UI components in a grid. This is particularly useful for screenshot testing as it allows you to capture many variations of a component (e.g., different alignments, modifiers, or arrangements) in a single screenshot, making tests more efficient and easier to compare visually. ## How to use `GridScreenshotUI` 1. **Test Class Setup**: Create a test class annotated with `@MediumTest`, `@SdkSuppress(minSdkVersion = 35, maxSdkVersion = 35)`, and `@RunWith(AndroidJUnit4::class)`. 2. **Add the Screenshot Rule**: Define a `RemoteComposeScreenshotTestRule` explicitly specifying the module directory and matcher. ```kotlin @get:Rule val composeTestRule: RemoteComposeScreenshotTestRule by lazy { RemoteComposeScreenshotTestRule( moduleDirectory = SCREENSHOT_GOLDEN_DIRECTORY, matcher = MSSIMMatcher(threshold = 0.999), ) } ``` 3. **Instantiate GridScreenshotUI**: Create an instance of `GridScreenshotUI` in your test class. ```kotlin private val gridScreenshotUI = GridScreenshotUI() ``` 4. **Define your UI variations**: Create a method or variable that provides a list of `Pair<String, @RemoteComposable @Composable () -> Unit>`. The string is the label for the variation, and the lambda is the actual Compose UI content. You can use the `.toInput()` extension functions defined in `GridScreenshotUI.Companion` to easily convert a list of composables into the required pair format if you don't want to specify labels manually. 5. **Write the Test**: Use `composeTestRule.runScreenshotTest` and call `gridScreenshotUI.GridContent(...)` with your list of variations. ```kotlin @Test fun exampleGridTest() = composeTestRule.runScreenshotTest { gridScreenshotUI.GridContent(getLayoutAlignmentUIs()) } ``` ## Best Practices - **Reuse Dimensions**: Use `GridScreenshotUI.Companion.DefaultContainerSize` to maintain consistent container dimensions across tests. - **RTL Testing**: You can easily test RTL (Right-to-Left) layouts by passing `layoutDirection = LayoutDirection.Rtl` to `GridContent`. ```kotlin gridScreenshotUI.GridContent( getLayoutAlignmentUIs(), layoutDirection = LayoutDirection.Rtl, ) ``` - **Helper methods**: Create builder methods to generate the list of `Pair` items if you have a combinatorial explosion of parameters (like trying out all combinations of `Arrangements` and `Alignments` through `sequence`). ```kotlin private fun getLayoutAlignmentUIs(): List<Pair<String, @RemoteComposable @Composable () -> Unit>> = sequence { for (alignment in alignments) { for (arrangement in arrangements) { yield( "${alignment.propertyName()} ${arrangement.propertyName()}" to @RemoteComposable @Composable { RemoteRow( modifier = RemoteModifier.size(DefaultContainerSize), horizontalArrangement = arrangement, verticalAlignment = alignment, ) { // Your content here } } ) } } }.toList() ```
GitHubで見る