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
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
29 val composeTestRule = createComposeRule()
32 fun verifyModifierOnShownWhenScrolledToWithNoSettleTime() {
34 composeTestRule.setContent {
35 ModifierOnShownContent(
43 composeTestRule.scrollToOnShownIndex()
49 fun verifyModifierOnShownAfterSettled() {
51 composeTestRule.setContent {
52 ModifierOnShownContent(
59 composeTestRule.scrollToOnShownIndex()
63 composeTestRule.waitUntil(ON_SHOWN_SETTLE_TIME_MS + 500L) { onShown }
69 fun verifyModifierOnShownWhenNotVisible() {
70 val indexToValidate = ON_SHOWN_NODE_COUNT - 1
72 composeTestRule.setContent {
73 ModifierOnShownContent(
74 indexToValidate = indexToValidate,
85 private fun ComposeTestRule.scrollToOnShownIndex(index: Int = ON_SHOWN_INDEX) {
86 this.onNodeWithTag(ON_SHOWN_ROOT_TAG)
87 .performScrollToIndex(index)
91 private fun ModifierOnShownContent(
92 indexToValidate: Int = ON_SHOWN_INDEX,
93 settleTime: Int = ON_SHOWN_SETTLE_TIME_MS,
94 onVisible: () -> Unit,
97 modifier = Modifier.testTag(ON_SHOWN_ROOT_TAG),
99 items(ON_SHOWN_NODE_COUNT) { index ->
100 val modifier = if (index == indexToValidate) {
103 settleTime = settleTime,
104 onVisible = onVisible,
111 text = "Test item $index",