|
16 | 16 |
|
17 | 17 | package com.example.compose.snippets.accessibility
|
18 | 18 |
|
| 19 | +import androidx.activity.ComponentActivity |
| 20 | +import androidx.compose.foundation.background |
| 21 | +import androidx.compose.foundation.clickable |
| 22 | +import androidx.compose.foundation.layout.Box |
| 23 | +import androidx.compose.foundation.layout.fillMaxSize |
| 24 | +import androidx.compose.foundation.layout.size |
| 25 | +import androidx.compose.material3.Text |
| 26 | +import androidx.compose.ui.Alignment |
| 27 | +import androidx.compose.ui.Modifier |
| 28 | +import androidx.compose.ui.graphics.Color |
19 | 29 | import androidx.compose.ui.semantics.SemanticsActions
|
| 30 | +import androidx.compose.ui.semantics.contentDescription |
20 | 31 | import androidx.compose.ui.semantics.getOrNull
|
| 32 | +import androidx.compose.ui.semantics.semantics |
21 | 33 | import androidx.compose.ui.test.SemanticsMatcher
|
22 | 34 | import androidx.compose.ui.test.assert
|
| 35 | +import androidx.compose.ui.test.junit4.accessibility.enableAccessibilityChecks |
23 | 36 | import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
24 |
| -import com.example.compose.snippets.MyActivity |
| 37 | +import androidx.compose.ui.test.onRoot |
| 38 | +import androidx.compose.ui.test.tryPerformAccessibilityChecks |
| 39 | +import androidx.compose.ui.unit.dp |
| 40 | +import com.google.android.apps.common.testing.accessibility.framework.AccessibilityCheckResult |
| 41 | +import com.google.android.apps.common.testing.accessibility.framework.integrations.espresso.AccessibilityValidator |
25 | 42 | import org.junit.Ignore
|
26 | 43 | import org.junit.Rule
|
27 | 44 | import org.junit.Test
|
28 | 45 |
|
29 |
| -class AccessibilitySnippetsTest { |
| 46 | +class AccessibilityTest { |
| 47 | + |
| 48 | +// [START android_compose_accessibility_testing_label] |
30 | 49 | @Rule
|
31 | 50 | @JvmField
|
32 |
| - val composeTestRule = createAndroidComposeRule<MyActivity>() |
| 51 | + val composeTestRule = createAndroidComposeRule<ComponentActivity>() |
| 52 | + |
| 53 | + @Test |
| 54 | + fun noAccessibilityLabel() { |
| 55 | + composeTestRule.setContent { |
| 56 | + Box( |
| 57 | + modifier = Modifier |
| 58 | + .size(50.dp, 50.dp) |
| 59 | + .background(color = Color.Gray) |
| 60 | + .clickable { } |
| 61 | + .semantics { |
| 62 | + contentDescription = "" |
| 63 | + } |
| 64 | + ) |
| 65 | + } |
33 | 66 |
|
34 |
| - private val nodeMatcher = SemanticsMatcher("DUMMY") { it.isRoot } |
| 67 | + composeTestRule.enableAccessibilityChecks() |
35 | 68 |
|
36 |
| - @Ignore("Dummy test") |
| 69 | + // Any action (such as performClick) will perform accessibility checks too: |
| 70 | + composeTestRule.onRoot().tryPerformAccessibilityChecks() |
| 71 | + } |
| 72 | +// [END android_compose_accessibility_testing_label] |
37 | 73 |
|
| 74 | +// [START android_compose_accessibility_testing_click] |
| 75 | + @Test |
| 76 | + fun smallClickTarget() { |
| 77 | + composeTestRule.setContent { |
| 78 | + Box( |
| 79 | + modifier = Modifier |
| 80 | + .size(20.dp, 20.dp) |
| 81 | + .background(color = Color(0xFFFAFBFC)) |
| 82 | + .clickable { } |
| 83 | + ) |
| 84 | + } |
| 85 | + |
| 86 | + composeTestRule.enableAccessibilityChecks() |
| 87 | + |
| 88 | + // Any action (such as performClick) will perform accessibility checks too: |
| 89 | + composeTestRule.onRoot().tryPerformAccessibilityChecks() |
| 90 | + } |
| 91 | +// [END android_compose_accessibility_testing_click] |
| 92 | + |
| 93 | +// [START android_compose_accessibility_testing_validator] |
| 94 | + @Test |
| 95 | + fun lowContrastScreen() { |
| 96 | + composeTestRule.setContent { |
| 97 | + Box( |
| 98 | + modifier = Modifier |
| 99 | + .fillMaxSize() |
| 100 | + .background(color = Color(0xFFFAFBFC)), |
| 101 | + contentAlignment = Alignment.Center |
| 102 | + ) { |
| 103 | + Text(text = "Hello", color = Color(0xFFB0B1B2)) |
| 104 | + } |
| 105 | + } |
| 106 | + |
| 107 | + // Optionally, set AccessibilityValidator manually |
| 108 | + val accessibilityValidator = AccessibilityValidator() |
| 109 | + .setThrowExceptionFor( |
| 110 | + AccessibilityCheckResult.AccessibilityCheckResultType.WARNING |
| 111 | + ) |
| 112 | + |
| 113 | + composeTestRule.enableAccessibilityChecks(accessibilityValidator) |
| 114 | + |
| 115 | + composeTestRule.onRoot().tryPerformAccessibilityChecks() |
| 116 | + } |
| 117 | +// [END android_compose_accessibility_testing_validator] |
| 118 | + |
| 119 | + private val nodeMatcher = SemanticsMatcher(description = "DUMMY") { it.isRoot } |
| 120 | + |
| 121 | + @Ignore("Dummy test") |
38 | 122 | // [START android_compose_accessibility_testing]
|
39 | 123 | @Test
|
40 | 124 | fun test() {
|
|
0 commit comments