Refactor Screenshot Test for SettingsDialog

pull/1367/head
yongsuk44 1 year ago
parent 76a7354012
commit b70c023cb2

@ -26,14 +26,13 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onRoot
import androidx.test.ext.junit.rules.ActivityScenarioRule
import com.github.takahirom.roborazzi.ExperimentalRoborazziApi
import com.github.takahirom.roborazzi.RoborazziOptions
import com.github.takahirom.roborazzi.RoborazziOptions.CompareOptions
import com.github.takahirom.roborazzi.RoborazziOptions.RecordOptions
import com.github.takahirom.roborazzi.captureRoboImage
import com.github.takahirom.roborazzi.captureScreenRoboImage
import com.google.accompanist.testharness.TestHarness
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
import org.robolectric.RuntimeEnvironment
@ -90,9 +89,9 @@ fun <A : ComponentActivity> AndroidComposeTestRule<ActivityScenarioRule<A>, A>.c
)
}
@OptIn(ExperimentalRoborazziApi::class)
fun <A : ComponentActivity> AndroidComposeTestRule<ActivityScenarioRule<A>, A>.captureDialog(
screenshotName: String,
nodeTag: String,
body: @Composable () -> Unit,
) {
this.activity.setContent {
@ -103,10 +102,8 @@ fun <A : ComponentActivity> AndroidComposeTestRule<ActivityScenarioRule<A>, A>.c
}
}
captureScreenRoboImage(
"src/test/screenshots/$screenshotName.png",
roborazziOptions = DefaultRoborazziOptions,
)
this.onNodeWithTag(nodeTag)
.captureRoboImage("src/test/screenshots/$screenshotName.png")
}
/**

@ -31,7 +31,6 @@ dependencies {
implementation(projects.core.domain)
testImplementation(libs.hilt.android.testing)
testImplementation(libs.robolectric)
testDemoImplementation(libs.roborazzi)
testImplementation(projects.core.screenshotTesting)

@ -31,7 +31,6 @@ dependencies {
implementation(projects.core.data)
testImplementation(libs.hilt.android.testing)
testImplementation(libs.robolectric)
testDemoImplementation(libs.roborazzi)
testImplementation(projects.core.screenshotTesting)

@ -88,6 +88,7 @@ fun SettingsDialog(
@Composable
fun SettingsDialog(
modifier: Modifier = Modifier,
settingsUiState: SettingsUiState,
supportDynamicColor: Boolean = supportsDynamicTheming(),
onDismiss: () -> Unit,
@ -106,7 +107,7 @@ fun SettingsDialog(
*/
AlertDialog(
properties = DialogProperties(usePlatformDefaultWidth = false),
modifier = Modifier.widthIn(max = configuration.screenWidthDp.dp - 80.dp),
modifier = modifier.widthIn(max = configuration.screenWidthDp.dp - 80.dp),
onDismissRequest = { onDismiss() },
title = {
Text(

@ -18,6 +18,8 @@ package com.google.samples.apps.nowinandroid.feature.settings
import androidx.activity.ComponentActivity
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig.DARK
@ -37,7 +39,7 @@ import org.robolectric.annotation.LooperMode
@RunWith(RobolectricTestRunner::class)
@GraphicsMode(GraphicsMode.Mode.NATIVE)
@LooperMode(LooperMode.Mode.PAUSED)
@Config(application = HiltTestApplication::class, qualifiers = "w360dp-h640dp-xhdpi")
@Config(application = HiltTestApplication::class, qualifiers = "w480dp-h960dp-480dpi")
class SettingsDialogScreenshotTests {
@get:Rule
@ -53,7 +55,10 @@ class SettingsDialogScreenshotTests {
@Test
fun settingsDialogLoading() {
composeTestRule.captureDialog("SettingsDialogLoading") {
composeTestRule.captureDialog(
screenshotName = "SettingsDialogLoading",
nodeTag = "SettingsDialog",
) {
SettingsDialogDefaultTheme(
settingsUiState = SettingsUiState.Loading,
)
@ -62,7 +67,10 @@ class SettingsDialogScreenshotTests {
@Test
fun settingsDialogLoadingDark() {
composeTestRule.captureDialog("SettingsDialogLoadingDark") {
composeTestRule.captureDialog(
screenshotName = "SettingsDialogLoadingDark",
nodeTag = "SettingsDialog",
) {
SettingsDialogDefaultTheme(
darkMode = true,
settingsUiState = SettingsUiState.Loading,
@ -72,14 +80,20 @@ class SettingsDialogScreenshotTests {
@Test
fun settingsDialogDefaultTheme() {
composeTestRule.captureDialog("SettingsDialogDefaultTheme") {
composeTestRule.captureDialog(
screenshotName = "SettingsDialogDefaultTheme",
nodeTag = "SettingsDialog",
) {
SettingsDialogDefaultTheme()
}
}
@Test
fun settingsDialogDefaultThemeDark() {
composeTestRule.captureDialog("SettingsDialogDefaultThemeDark") {
composeTestRule.captureDialog(
screenshotName = "SettingsDialogDefaultThemeDark",
nodeTag = "SettingsDialog",
) {
SettingsDialogDefaultTheme(
darkMode = true,
settingsUiState = Success(
@ -93,7 +107,10 @@ class SettingsDialogScreenshotTests {
@Test
fun settingsDialogDynamicColor() {
composeTestRule.captureDialog("SettingsDialogDynamicColor") {
composeTestRule.captureDialog(
screenshotName = "SettingsDialogDynamicColor",
nodeTag = "SettingsDialog",
) {
SettingsDialogDefaultTheme(
disableDynamicTheming = false,
settingsUiState = Success(
@ -107,7 +124,10 @@ class SettingsDialogScreenshotTests {
@Test
fun settingsDialogDynamicColorDark() {
composeTestRule.captureDialog("SettingsDialogDynamicColorDark") {
composeTestRule.captureDialog(
screenshotName = "SettingsDialogDynamicColorDark",
nodeTag = "SettingsDialog",
) {
SettingsDialogDefaultTheme(
darkMode = true,
disableDynamicTheming = false,
@ -123,7 +143,10 @@ class SettingsDialogScreenshotTests {
@Test
fun settingsDialogAndroidTheme() {
composeTestRule.captureDialog("SettingsDialogAndroidTheme") {
composeTestRule.captureDialog(
screenshotName = "SettingsDialogAndroidTheme",
nodeTag = "SettingsDialog",
) {
SettingsDialogDefaultTheme(
androidTheme = true,
settingsUiState = Success(
@ -137,7 +160,10 @@ class SettingsDialogScreenshotTests {
@Test
fun settingsDialogAndroidThemeDark() {
composeTestRule.captureDialog("SettingsDialogAndroidThemeDark") {
composeTestRule.captureDialog(
screenshotName = "SettingsDialogAndroidThemeDark",
nodeTag = "SettingsDialog",
) {
SettingsDialogDefaultTheme(
darkMode = true,
androidTheme = true,
@ -164,6 +190,7 @@ class SettingsDialogScreenshotTests {
disableDynamicTheming = disableDynamicTheming,
) {
SettingsDialog(
modifier = Modifier.testTag("SettingsDialog"),
onDismiss = {},
settingsUiState = settingsUiState,
onChangeThemeBrand = {},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Loading…
Cancel
Save