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 查看