Skip to content

Commit 5b79869

Browse files
Adds dark screenshot tests and fixes background colors in ForYou (#918)
* Adds dark screenshot tests and fixes background colors in ForYou * 🤖 Updates screenshots
1 parent 851ca63 commit 5b79869

File tree

10 files changed

+82
-32
lines changed

10 files changed

+82
-32
lines changed

core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/ScreenshotHelper.kt

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import com.github.takahirom.roborazzi.RoborazziOptions
2828
import com.github.takahirom.roborazzi.RoborazziOptions.CompareOptions
2929
import com.github.takahirom.roborazzi.RoborazziOptions.RecordOptions
3030
import com.github.takahirom.roborazzi.captureRoboImage
31+
import com.google.accompanist.testharness.TestHarness
3132
import org.robolectric.RuntimeEnvironment
3233

3334
val DefaultRoborazziOptions =
@@ -36,25 +37,27 @@ val DefaultRoborazziOptions =
3637
recordOptions = RecordOptions(resizeScale = 0.5), // Reduce the size of the PNGs
3738
)
3839

40+
enum class DefaultTestDevices(val description: String, val spec: String) {
41+
PHONE("phone", "spec:shape=Normal,width=640,height=360,unit=dp,dpi=480"),
42+
FOLDABLE("foldable", "spec:shape=Normal,width=673,height=841,unit=dp,dpi=480"),
43+
TABLET("tablet", "spec:shape=Normal,width=1280,height=800,unit=dp,dpi=480"),
44+
}
3945
fun <A : ComponentActivity> AndroidComposeTestRule<ActivityScenarioRule<A>, A>.captureMultiDevice(
4046
screenshotName: String,
4147
body: @Composable () -> Unit,
4248
) {
43-
listOf(
44-
"phone" to "spec:shape=Normal,width=640,height=360,unit=dp,dpi=480",
45-
"foldable" to "spec:shape=Normal,width=673,height=841,unit=dp,dpi=480",
46-
"tablet" to "spec:shape=Normal,width=1280,height=800,unit=dp,dpi=480",
47-
).forEach {
48-
this.captureForDevice(it.first, it.second, screenshotName, body)
49+
DefaultTestDevices.values().forEach {
50+
this.captureForDevice(it.description, it.spec, screenshotName, body = body)
4951
}
5052
}
5153

5254
fun <A : ComponentActivity> AndroidComposeTestRule<ActivityScenarioRule<A>, A>.captureForDevice(
5355
deviceName: String,
5456
deviceSpec: String,
5557
screenshotName: String,
56-
body: @Composable () -> Unit,
5758
roborazziOptions: RoborazziOptions = DefaultRoborazziOptions,
59+
darkMode: Boolean = false,
60+
body: @Composable () -> Unit,
5861
) {
5962
val (width, height, dpi) = extractSpecs(deviceSpec)
6063

@@ -65,7 +68,9 @@ fun <A : ComponentActivity> AndroidComposeTestRule<ActivityScenarioRule<A>, A>.c
6568
CompositionLocalProvider(
6669
LocalInspectionMode provides true,
6770
) {
68-
body()
71+
TestHarness(darkMode = darkMode) {
72+
body()
73+
}
6974
}
7075
}
7176
this.onRoot()

feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt

Lines changed: 69 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,19 @@
1717
package com.google.samples.apps.nowinandroid.feature.foryou
1818

1919
import androidx.activity.ComponentActivity
20+
import androidx.compose.runtime.Composable
2021
import androidx.compose.ui.test.junit4.createAndroidComposeRule
22+
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaBackground
2123
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
24+
import com.google.samples.apps.nowinandroid.core.testing.util.DefaultTestDevices
25+
import com.google.samples.apps.nowinandroid.core.testing.util.captureForDevice
2226
import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiDevice
2327
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState
2428
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success
2529
import com.google.samples.apps.nowinandroid.core.ui.UserNewsResourcePreviewParameterProvider
2630
import com.google.samples.apps.nowinandroid.feature.foryou.OnboardingUiState.Loading
2731
import com.google.samples.apps.nowinandroid.feature.foryou.OnboardingUiState.NotShown
32+
import com.google.samples.apps.nowinandroid.feature.foryou.OnboardingUiState.Shown
2833
import dagger.hilt.android.testing.HiltTestApplication
2934
import org.junit.Before
3035
import org.junit.Rule
@@ -60,7 +65,7 @@ class ForYouScreenScreenshotTests {
6065
}
6166

6267
@Test
63-
fun testForYouScreenPopulatedFeed() {
68+
fun forYouScreenPopulatedFeed() {
6469
composeTestRule.captureMultiDevice("ForYouScreenPopulatedFeed") {
6570
NiaTheme {
6671
ForYouScreen(
@@ -82,7 +87,7 @@ class ForYouScreenScreenshotTests {
8287
}
8388

8489
@Test
85-
fun testForYouScreenLoading() {
90+
fun forYouScreenLoading() {
8691
composeTestRule.captureMultiDevice("ForYouScreenLoading") {
8792
NiaTheme {
8893
ForYouScreen(
@@ -102,16 +107,54 @@ class ForYouScreenScreenshotTests {
102107
}
103108

104109
@Test
105-
fun testForYouScreenTopicSelection() {
110+
fun forYouScreenTopicSelection() {
106111
composeTestRule.captureMultiDevice("ForYouScreenTopicSelection") {
107-
NiaTheme {
112+
ForYouScreenTopicSelection()
113+
}
114+
}
115+
116+
@Test
117+
fun forYouScreenTopicSelection_dark() {
118+
composeTestRule.captureForDevice(
119+
deviceName = "phone_dark",
120+
deviceSpec = DefaultTestDevices.PHONE.spec,
121+
screenshotName = "ForYouScreenTopicSelection",
122+
darkMode = true,
123+
) {
124+
ForYouScreenTopicSelection()
125+
}
126+
}
127+
128+
@Test
129+
fun forYouScreenPopulatedAndLoading() {
130+
composeTestRule.captureMultiDevice("ForYouScreenPopulatedAndLoading") {
131+
ForYouScreenPopulatedAndLoading()
132+
}
133+
}
134+
135+
@Test
136+
fun forYouScreenPopulatedAndLoading_dark() {
137+
composeTestRule.captureForDevice(
138+
deviceName = "phone_dark",
139+
deviceSpec = DefaultTestDevices.PHONE.spec,
140+
screenshotName = "ForYouScreenPopulatedAndLoading",
141+
darkMode = true,
142+
) {
143+
ForYouScreenPopulatedAndLoading()
144+
}
145+
}
146+
147+
@Composable
148+
private fun ForYouScreenTopicSelection() {
149+
NiaTheme {
150+
NiaBackground {
108151
ForYouScreen(
109152
isSyncing = false,
110-
onboardingUiState = OnboardingUiState.Shown(
153+
onboardingUiState = Shown(
111154
topics = userNewsResources.flatMap { news -> news.followableTopics }
112155
.distinctBy { it.topic.id },
113156
),
114-
feedState = NewsFeedUiState.Success(
157+
feedState = Success(
115158
feed = userNewsResources,
116159
),
117160
onTopicCheckedChanged = { _, _ -> },
@@ -126,24 +169,26 @@ class ForYouScreenScreenshotTests {
126169
}
127170
}
128171

129-
@Test
130-
fun testForYouScreenPopulatedAndLoading() {
131-
composeTestRule.captureMultiDevice("ForYouScreenPopulatedAndLoading") {
132-
NiaTheme {
133-
ForYouScreen(
134-
isSyncing = true,
135-
onboardingUiState = OnboardingUiState.Loading,
136-
feedState = NewsFeedUiState.Success(
137-
feed = userNewsResources,
138-
),
139-
onTopicCheckedChanged = { _, _ -> },
140-
saveFollowedTopics = {},
141-
onNewsResourcesCheckedChanged = { _, _ -> },
142-
onNewsResourceViewed = {},
143-
onTopicClick = {},
144-
deepLinkedUserNewsResource = null,
145-
onDeepLinkOpened = {},
146-
)
172+
@Composable
173+
private fun ForYouScreenPopulatedAndLoading() {
174+
NiaTheme {
175+
NiaBackground {
176+
NiaTheme {
177+
ForYouScreen(
178+
isSyncing = true,
179+
onboardingUiState = Loading,
180+
feedState = Success(
181+
feed = userNewsResources,
182+
),
183+
onTopicCheckedChanged = { _, _ -> },
184+
saveFollowedTopics = {},
185+
onNewsResourcesCheckedChanged = { _, _ -> },
186+
onNewsResourceViewed = {},
187+
onTopicClick = {},
188+
deepLinkedUserNewsResource = null,
189+
onDeepLinkOpened = {},
190+
)
191+
}
147192
}
148193
}
149194
}
-23 Bytes
Loading
-5 Bytes
Loading
40 KB
Loading
-2 Bytes
Loading
257 Bytes
Loading
245 Bytes
Loading
23.6 KB
Loading
136 Bytes
Loading

0 commit comments

Comments
 (0)