Merge pull request #9 from Jaehwa-Noh/show-snackbar-copy

Shot screenshot test
pull/1296/head
Jaehwa Noh 1 year ago committed by GitHub
commit 17fe8da594
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -80,12 +80,16 @@ fun NiaApp(
appState: NiaAppState, appState: NiaAppState,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(), windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(),
bottomSystemUiHeight: WindowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Bottom),
) { ) {
val shouldShowGradientBackground = val shouldShowGradientBackground =
appState.currentTopLevelDestination == TopLevelDestination.FOR_YOU appState.currentTopLevelDestination == TopLevelDestination.FOR_YOU
var showSettingsDialog by rememberSaveable { mutableStateOf(false) } var showSettingsDialog by rememberSaveable { mutableStateOf(false) }
NiaBackground(modifier = modifier) { NiaBackground(
modifier = modifier
.windowInsetsPadding(bottomSystemUiHeight),
) {
NiaGradientBackground( NiaGradientBackground(
gradientColors = if (shouldShowGradientBackground) { gradientColors = if (shouldShowGradientBackground) {
LocalGradientColors.current LocalGradientColors.current

@ -32,14 +32,10 @@ import androidx.compose.foundation.layout.windowInsetsEndWidth
import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.layout.windowInsetsStartWidth import androidx.compose.foundation.layout.windowInsetsStartWidth
import androidx.compose.foundation.layout.windowInsetsTopHeight import androidx.compose.foundation.layout.windowInsetsTopHeight
import androidx.compose.material3.SnackbarDuration.Indefinite
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi
import androidx.compose.material3.adaptive.Posture import androidx.compose.material3.adaptive.Posture
import androidx.compose.material3.adaptive.WindowAdaptiveInfo import androidx.compose.material3.adaptive.WindowAdaptiveInfo
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
@ -68,15 +64,15 @@ import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor
import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions
import com.google.samples.apps.nowinandroid.core.testing.util.TestNetworkMonitor
import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity
import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.BindValue
import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.HiltTestApplication import dagger.hilt.android.testing.HiltTestApplication
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.Before import org.junit.Before
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
@ -121,8 +117,7 @@ class SnackbarInsetsScreenshotTests {
@get:Rule(order = 2) @get:Rule(order = 2)
val composeTestRule = createAndroidComposeRule<HiltComponentActivity>() val composeTestRule = createAndroidComposeRule<HiltComponentActivity>()
@Inject private lateinit var networkMonitor: NetworkMonitor
lateinit var networkMonitor: NetworkMonitor
@Inject @Inject
lateinit var timeZoneMonitor: TimeZoneMonitor lateinit var timeZoneMonitor: TimeZoneMonitor
@ -140,6 +135,9 @@ class SnackbarInsetsScreenshotTests {
fun setup() { fun setup() {
hiltRule.inject() hiltRule.inject()
// Set network connection to online
networkMonitor = TestNetworkMonitor().apply { setConnected(true) }
// Configure user data // Configure user data
runBlocking { runBlocking {
userDataRepository.setShouldHideOnboarding(true) userDataRepository.setShouldHideOnboarding(true)
@ -156,85 +154,63 @@ class SnackbarInsetsScreenshotTests {
TimeZone.setDefault(TimeZone.getTimeZone("UTC")) TimeZone.setDefault(TimeZone.getTimeZone("UTC"))
} }
@After
fun resetConnectionOnline() {
networkMonitor = TestNetworkMonitor().apply { setConnected(true) }
}
@Test @Test
fun phone_noSnackbar() { fun phone_noSnackbar() {
val snackbarHostState = SnackbarHostState()
testSnackbarScreenshotWithSize( testSnackbarScreenshotWithSize(
snackbarHostState,
400.dp, 400.dp,
500.dp, 500.dp,
"insets_snackbar_compact_medium_noSnackbar", "insets_snackbar_compact_medium_noSnackbar",
action = { },
) )
} }
@Test @Test
fun snackbarShown_phone() { fun snackbarShown_phone() {
val snackbarHostState = SnackbarHostState() // Set network connection to offline
networkMonitor = TestNetworkMonitor().apply { setConnected(false) }
testSnackbarScreenshotWithSize( testSnackbarScreenshotWithSize(
snackbarHostState,
400.dp, 400.dp,
500.dp, 500.dp,
"insets_snackbar_compact_medium", "insets_snackbar_compact_medium",
) { )
snackbarHostState.showSnackbar(
"This is a test snackbar message",
actionLabel = "Action Label",
duration = Indefinite,
)
}
} }
@Test @Test
fun snackbarShown_foldable() { fun snackbarShown_foldable() {
val snackbarHostState = SnackbarHostState() // Set network connection to offline
networkMonitor = TestNetworkMonitor().apply { setConnected(false) }
testSnackbarScreenshotWithSize( testSnackbarScreenshotWithSize(
snackbarHostState,
600.dp, 600.dp,
600.dp, 600.dp,
"insets_snackbar_medium_medium", "insets_snackbar_medium_medium",
) { )
snackbarHostState.showSnackbar(
"This is a test snackbar message",
actionLabel = "Action Label",
duration = Indefinite,
)
}
} }
@Test @Test
fun snackbarShown_tablet() { fun snackbarShown_tablet() {
val snackbarHostState = SnackbarHostState() // Set network connection to offline
networkMonitor = TestNetworkMonitor().apply { setConnected(false) }
testSnackbarScreenshotWithSize( testSnackbarScreenshotWithSize(
snackbarHostState,
900.dp, 900.dp,
900.dp, 900.dp,
"insets_snackbar_expanded_expanded", "insets_snackbar_expanded_expanded",
) { )
snackbarHostState.showSnackbar(
"This is a test snackbar message",
actionLabel = "Action Label",
duration = Indefinite,
)
}
} }
@OptIn(ExperimentalMaterial3AdaptiveApi::class)
private fun testSnackbarScreenshotWithSize( private fun testSnackbarScreenshotWithSize(
snackbarHostState: SnackbarHostState,
width: Dp, width: Dp,
height: Dp, height: Dp,
screenshotName: String, screenshotName: String,
action: suspend () -> Unit,
) { ) {
lateinit var scope: CoroutineScope
composeTestRule.setContent { composeTestRule.setContent {
CompositionLocalProvider( CompositionLocalProvider(
// Replaces images with placeholders // Replaces images with placeholders
LocalInspectionMode provides true, LocalInspectionMode provides true,
) { ) {
scope = rememberCoroutineScope()
DeviceConfigurationOverride( DeviceConfigurationOverride(
DeviceConfigurationOverride.ForcedSize(DpSize(width, height)), DeviceConfigurationOverride.ForcedSize(DpSize(width, height)),
) { ) {
@ -269,12 +245,9 @@ class SnackbarInsetsScreenshotTests {
userNewsResourceRepository = userNewsResourceRepository, userNewsResourceRepository = userNewsResourceRepository,
timeZoneMonitor = timeZoneMonitor, timeZoneMonitor = timeZoneMonitor,
) )
// Replace NiaApp for using Background, which contains SnackBar
NiaApp( NiaApp(
appState = appState, appState = appState,
snackbarHostState = snackbarHostState,
showSettingsDialog = false,
onSettingsDismissed = {},
onTopAppBarActionClick = {},
windowAdaptiveInfo = WindowAdaptiveInfo( windowAdaptiveInfo = WindowAdaptiveInfo(
windowSizeClass = WindowSizeClass.compute( windowSizeClass = WindowSizeClass.compute(
maxWidth.value, maxWidth.value,
@ -291,10 +264,6 @@ class SnackbarInsetsScreenshotTests {
} }
} }
scope.launch {
action()
}
composeTestRule.onNodeWithTag("root") composeTestRule.onNodeWithTag("root")
.captureRoboImage( .captureRoboImage(
"src/testDemo/screenshots/$screenshotName.png", "src/testDemo/screenshots/$screenshotName.png",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Loading…
Cancel
Save