-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathA11yNodeExtractorTest.kt
More file actions
77 lines (62 loc) · 2.42 KB
/
Copy pathA11yNodeExtractorTest.kt
File metadata and controls
77 lines (62 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package com.composea11yscanner.ui
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Text
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onRoot
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.dp
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Rule
import org.junit.Test
class A11yNodeExtractorTest {
@get:Rule
val composeRule = createComposeRule()
@Test
fun clickableContainerWithDescendantText_resolvesAsClickableText() {
composeRule.setContent {
Box(modifier = Modifier.clickable { }) {
Text("Go")
}
}
composeRule.waitForIdle()
val nodes = A11yNodeExtractor(Density(1f))
.extract(composeRule.onRoot(useUnmergedTree = true).fetchSemanticsNode())
val clickableNode = nodes.single { it.isTouchTarget && it.contentDescription == "Go" }
assertEquals("ClickableText", clickableNode.composableName)
}
@Test
fun unlabeledClickable_resolvesAsClickable() {
composeRule.setContent {
Box(modifier = Modifier.clickable { })
}
composeRule.waitForIdle()
val nodes = A11yNodeExtractor(Density(1f))
.extract(composeRule.onRoot(useUnmergedTree = true).fetchSemanticsNode())
val clickableNode = nodes.single { it.isTouchTarget }
assertEquals("Clickable", clickableNode.composableName)
assertTrue(clickableNode.contentDescription.isNullOrBlank())
}
@Test
fun compactClickable_usesExpandedTouchBounds() {
lateinit var density: Density
composeRule.setContent {
density = LocalDensity.current
Box(
modifier = Modifier
.size(width = 40.dp, height = 48.dp)
.clickable { },
)
}
composeRule.waitForIdle()
val nodes = A11yNodeExtractor(density)
.extract(composeRule.onRoot(useUnmergedTree = true).fetchSemanticsNode())
val clickableNode = nodes.single { it.isTouchTarget }
assertTrue(clickableNode.touchTargetSize.width >= 48f)
assertTrue(clickableNode.touchTargetSize.height >= 48f)
}
}