Bug 1807268 - Re-enable verifyShowClipboardSuggestionsToggleTest UI test r=jajohnson
[gecko.git] / mobile / android / fenix / app / src / androidTest / java / org / mozilla / fenix / ui / ModifierTest.kt
blob667cea647a0c48c3540b4a9b5ab223cbcfd028f8
1 package org.mozilla.fenix.ui
3 import androidx.compose.foundation.layout.fillMaxWidth
4 import androidx.compose.foundation.layout.height
5 import androidx.compose.foundation.lazy.LazyColumn
6 import androidx.compose.material.Text
7 import androidx.compose.runtime.Composable
8 import androidx.compose.ui.Modifier
9 import androidx.compose.ui.platform.testTag
10 import androidx.compose.ui.test.junit4.ComposeTestRule
11 import androidx.compose.ui.test.junit4.createComposeRule
12 import androidx.compose.ui.test.onNodeWithTag
13 import androidx.compose.ui.test.performScrollToIndex
14 import androidx.compose.ui.unit.dp
15 import org.junit.Assert.assertFalse
16 import org.junit.Assert.assertTrue
17 import org.junit.Rule
18 import org.junit.Test
19 import org.mozilla.fenix.compose.ext.onShown
21 private const val ON_SHOWN_ROOT_TAG = "onShownRoot"
22 private const val ON_SHOWN_SETTLE_TIME_MS = 1000
23 private const val ON_SHOWN_INDEX = 15
24 private const val ON_SHOWN_NODE_COUNT = 30
26 class ModifierTest {
28     @get:Rule
29     val composeTestRule = createComposeRule()
31     @Test
32     fun verifyModifierOnShownWhenScrolledToWithNoSettleTime() {
33         var onShown = false
34         composeTestRule.setContent {
35             ModifierOnShownContent(
36                 settleTime = 0,
37                 onVisible = {
38                     onShown = true
39                 },
40             )
41         }
43         composeTestRule.scrollToOnShownIndex()
45         assertTrue(onShown)
46     }
48     @Test
49     fun verifyModifierOnShownAfterSettled() {
50         var onShown = false
51         composeTestRule.setContent {
52             ModifierOnShownContent(
53                 onVisible = {
54                     onShown = true
55                 },
56             )
57         }
59         composeTestRule.scrollToOnShownIndex()
61         assertFalse(onShown)
63         composeTestRule.waitUntil(ON_SHOWN_SETTLE_TIME_MS + 500L) { onShown }
65         assertTrue(onShown)
66     }
68     @Test
69     fun verifyModifierOnShownWhenNotVisible() {
70         val indexToValidate = ON_SHOWN_NODE_COUNT - 1
71         var onShown = false
72         composeTestRule.setContent {
73             ModifierOnShownContent(
74                 indexToValidate = indexToValidate,
75                 settleTime = 0,
76                 onVisible = {
77                     onShown = true
78                 },
79             )
80         }
82         assertFalse(onShown)
83     }
85     private fun ComposeTestRule.scrollToOnShownIndex(index: Int = ON_SHOWN_INDEX) {
86         this.onNodeWithTag(ON_SHOWN_ROOT_TAG)
87             .performScrollToIndex(index)
88     }
90     @Composable
91     private fun ModifierOnShownContent(
92         indexToValidate: Int = ON_SHOWN_INDEX,
93         settleTime: Int = ON_SHOWN_SETTLE_TIME_MS,
94         onVisible: () -> Unit,
95     ) {
96         LazyColumn(
97             modifier = Modifier.testTag(ON_SHOWN_ROOT_TAG),
98         ) {
99             items(ON_SHOWN_NODE_COUNT) { index ->
100                 val modifier = if (index == indexToValidate) {
101                     Modifier.onShown(
102                         threshold = 1.0f,
103                         settleTime = settleTime,
104                         onVisible = onVisible,
105                     )
106                 } else {
107                     Modifier
108                 }
110                 Text(
111                     text = "Test item $index",
112                     modifier = modifier
113                         .fillMaxWidth()
114                         .height(50.dp),
115                 )
116             }
117         }
118     }