Skip to main content

build-grid-screenshot-tests

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

معلومات المصدر

المستودع
JetBrains/compose-multiplatform-core
آخر نشاط في المصدر
٦ مايو ٢٠٢٦ في ١١:٢٧
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٦٦١
التفرعات
١٤٩

خيارات التثبيت

يُحدَّد 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