Skip to content

Commit b993536

Browse files
authored
Merge pull request #1230 from android/replace-testharness
Replace Accompanist TestHarness with DeviceConfigurationOverride
2 parents 59ed7f4 + c7d5cb4 commit b993536

File tree

20 files changed

+89
-50
lines changed

20 files changed

+89
-50
lines changed

app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ dependencies {
113113

114114
testImplementation(projects.core.dataTest)
115115
testImplementation(projects.core.testing)
116-
testImplementation(libs.accompanist.testharness)
116+
testImplementation(libs.androidx.compose.ui.test)
117117
testImplementation(libs.hilt.android.testing)
118118
testImplementation(libs.work.testing)
119119

@@ -126,7 +126,7 @@ dependencies {
126126
androidTestImplementation(projects.core.datastoreTest)
127127
androidTestImplementation(libs.androidx.test.espresso.core)
128128
androidTestImplementation(libs.androidx.navigation.testing)
129-
androidTestImplementation(libs.accompanist.testharness)
129+
androidTestImplementation(libs.androidx.compose.ui.test)
130130
androidTestImplementation(libs.hilt.android.testing)
131131

132132
baselineProfile(projects.benchmarks)

app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationUiTest.kt

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ import androidx.compose.foundation.layout.BoxWithConstraints
2020
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
2121
import androidx.compose.material3.windowsizeclass.WindowSizeClass
2222
import androidx.compose.runtime.Composable
23+
import androidx.compose.ui.test.DeviceConfigurationOverride
24+
import androidx.compose.ui.test.ForcedSize
2325
import androidx.compose.ui.test.assertIsDisplayed
2426
import androidx.compose.ui.test.junit4.createAndroidComposeRule
2527
import androidx.compose.ui.test.onNodeWithTag
2628
import androidx.compose.ui.unit.Dp
2729
import androidx.compose.ui.unit.DpSize
2830
import androidx.compose.ui.unit.dp
29-
import com.google.accompanist.testharness.TestHarness
3031
import com.google.samples.apps.nowinandroid.core.data.repository.CompositeUserNewsResourceRepository
3132
import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor
3233
import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor
@@ -95,7 +96,9 @@ class NavigationUiTest {
9596
@Test
9697
fun compactWidth_compactHeight_showsNavigationBar() {
9798
composeTestRule.setContent {
98-
TestHarness(size = DpSize(400.dp, 400.dp)) {
99+
DeviceConfigurationOverride(
100+
DeviceConfigurationOverride.ForcedSize(DpSize(400.dp, 400.dp)),
101+
) {
99102
BoxWithConstraints {
100103
NiaApp(fakeAppState(maxWidth, maxHeight))
101104
}
@@ -109,7 +112,9 @@ class NavigationUiTest {
109112
@Test
110113
fun mediumWidth_compactHeight_showsNavigationRail() {
111114
composeTestRule.setContent {
112-
TestHarness(size = DpSize(610.dp, 400.dp)) {
115+
DeviceConfigurationOverride(
116+
DeviceConfigurationOverride.ForcedSize(DpSize(610.dp, 400.dp)),
117+
) {
113118
BoxWithConstraints {
114119
NiaApp(fakeAppState(maxWidth, maxHeight))
115120
}
@@ -123,7 +128,9 @@ class NavigationUiTest {
123128
@Test
124129
fun expandedWidth_compactHeight_showsNavigationRail() {
125130
composeTestRule.setContent {
126-
TestHarness(size = DpSize(900.dp, 400.dp)) {
131+
DeviceConfigurationOverride(
132+
DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 400.dp)),
133+
) {
127134
BoxWithConstraints {
128135
NiaApp(fakeAppState(maxWidth, maxHeight))
129136
}
@@ -137,7 +144,9 @@ class NavigationUiTest {
137144
@Test
138145
fun compactWidth_mediumHeight_showsNavigationBar() {
139146
composeTestRule.setContent {
140-
TestHarness(size = DpSize(400.dp, 500.dp)) {
147+
DeviceConfigurationOverride(
148+
DeviceConfigurationOverride.ForcedSize(DpSize(400.dp, 500.dp)),
149+
) {
141150
BoxWithConstraints {
142151
NiaApp(fakeAppState(maxWidth, maxHeight))
143152
}
@@ -151,7 +160,9 @@ class NavigationUiTest {
151160
@Test
152161
fun mediumWidth_mediumHeight_showsNavigationRail() {
153162
composeTestRule.setContent {
154-
TestHarness(size = DpSize(610.dp, 500.dp)) {
163+
DeviceConfigurationOverride(
164+
DeviceConfigurationOverride.ForcedSize(DpSize(610.dp, 500.dp)),
165+
) {
155166
BoxWithConstraints {
156167
NiaApp(fakeAppState(maxWidth, maxHeight))
157168
}
@@ -165,7 +176,9 @@ class NavigationUiTest {
165176
@Test
166177
fun expandedWidth_mediumHeight_showsNavigationRail() {
167178
composeTestRule.setContent {
168-
TestHarness(size = DpSize(900.dp, 500.dp)) {
179+
DeviceConfigurationOverride(
180+
DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 500.dp)),
181+
) {
169182
BoxWithConstraints {
170183
NiaApp(fakeAppState(maxWidth, maxHeight))
171184
}
@@ -179,7 +192,9 @@ class NavigationUiTest {
179192
@Test
180193
fun compactWidth_expandedHeight_showsNavigationBar() {
181194
composeTestRule.setContent {
182-
TestHarness(size = DpSize(400.dp, 1000.dp)) {
195+
DeviceConfigurationOverride(
196+
DeviceConfigurationOverride.ForcedSize(DpSize(400.dp, 1000.dp)),
197+
) {
183198
BoxWithConstraints {
184199
NiaApp(fakeAppState(maxWidth, maxHeight))
185200
}
@@ -193,7 +208,9 @@ class NavigationUiTest {
193208
@Test
194209
fun mediumWidth_expandedHeight_showsNavigationRail() {
195210
composeTestRule.setContent {
196-
TestHarness(size = DpSize(610.dp, 1000.dp)) {
211+
DeviceConfigurationOverride(
212+
DeviceConfigurationOverride.ForcedSize(DpSize(610.dp, 1000.dp)),
213+
) {
197214
BoxWithConstraints {
198215
NiaApp(fakeAppState(maxWidth, maxHeight))
199216
}
@@ -207,7 +224,9 @@ class NavigationUiTest {
207224
@Test
208225
fun expandedWidth_expandedHeight_showsNavigationRail() {
209226
composeTestRule.setContent {
210-
TestHarness(size = DpSize(900.dp, 1000.dp)) {
227+
DeviceConfigurationOverride(
228+
DeviceConfigurationOverride.ForcedSize(DpSize(900.dp, 1000.dp)),
229+
) {
211230
BoxWithConstraints {
212231
NiaApp(fakeAppState(maxWidth, maxHeight))
213232
}

app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination
7676
import com.google.samples.apps.nowinandroid.feature.settings.R as settingsR
7777

7878
@Composable
79-
fun NiaApp(appState: NiaAppState) {
79+
fun NiaApp(appState: NiaAppState, modifier: Modifier = Modifier) {
8080
val shouldShowGradientBackground =
8181
appState.currentTopLevelDestination == TopLevelDestination.FOR_YOU
8282
var showSettingsDialog by rememberSaveable { mutableStateOf(false) }
8383

84-
NiaBackground {
84+
NiaBackground(modifier = modifier) {
8585
NiaGradientBackground(
8686
gradientColors = if (shouldShowGradientBackground) {
8787
LocalGradientColors.current

app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@
1717
package com.google.samples.apps.nowinandroid.ui
1818

1919
import android.util.Log
20-
import androidx.compose.foundation.layout.BoxWithConstraints
2120
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
2221
import androidx.compose.material3.windowsizeclass.WindowSizeClass
2322
import androidx.compose.runtime.CompositionLocalProvider
2423
import androidx.compose.ui.platform.LocalInspectionMode
24+
import androidx.compose.ui.test.DeviceConfigurationOverride
25+
import androidx.compose.ui.test.ForcedSize
2526
import androidx.compose.ui.test.junit4.createAndroidComposeRule
2627
import androidx.compose.ui.test.onRoot
2728
import androidx.compose.ui.unit.Dp
@@ -32,7 +33,6 @@ import androidx.work.Configuration
3233
import androidx.work.testing.SynchronousExecutor
3334
import androidx.work.testing.WorkManagerTestInitHelper
3435
import com.github.takahirom.roborazzi.captureRoboImage
35-
import com.google.accompanist.testharness.TestHarness
3636
import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository
3737
import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository
3838
import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository
@@ -143,19 +143,19 @@ class NiaAppScreenSizesScreenshotTests {
143143
CompositionLocalProvider(
144144
LocalInspectionMode provides true,
145145
) {
146-
TestHarness(size = DpSize(width, height)) {
147-
BoxWithConstraints {
148-
NiaTheme {
149-
val fakeAppState = rememberNiaAppState(
150-
windowSizeClass = WindowSizeClass.calculateFromSize(
151-
DpSize(maxWidth, maxHeight),
152-
),
153-
networkMonitor = networkMonitor,
154-
userNewsResourceRepository = userNewsResourceRepository,
155-
timeZoneMonitor = timeZoneMonitor,
156-
)
157-
NiaApp(fakeAppState)
158-
}
146+
DeviceConfigurationOverride(
147+
override = DeviceConfigurationOverride.ForcedSize(DpSize(width, height)),
148+
) {
149+
NiaTheme {
150+
val fakeAppState = rememberNiaAppState(
151+
windowSizeClass = WindowSizeClass.calculateFromSize(
152+
DpSize(width, height),
153+
),
154+
networkMonitor = networkMonitor,
155+
userNewsResourceRepository = userNewsResourceRepository,
156+
timeZoneMonitor = timeZoneMonitor,
157+
)
158+
NiaApp(fakeAppState)
159159
}
160160
}
161161
}

app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarScreenshotTests.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import androidx.compose.material3.SnackbarHostState
2323
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
2424
import androidx.compose.material3.windowsizeclass.WindowSizeClass
2525
import androidx.compose.runtime.rememberCoroutineScope
26+
import androidx.compose.ui.test.DeviceConfigurationOverride
27+
import androidx.compose.ui.test.ForcedSize
2628
import androidx.compose.ui.test.junit4.createAndroidComposeRule
2729
import androidx.compose.ui.test.onRoot
2830
import androidx.compose.ui.unit.Dp
@@ -33,7 +35,6 @@ import androidx.work.Configuration
3335
import androidx.work.testing.SynchronousExecutor
3436
import androidx.work.testing.WorkManagerTestInitHelper
3537
import com.github.takahirom.roborazzi.captureRoboImage
36-
import com.google.accompanist.testharness.TestHarness
3738
import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository
3839
import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository
3940
import com.google.samples.apps.nowinandroid.core.data.test.repository.FakeUserDataRepository
@@ -208,7 +209,9 @@ class SnackbarScreenshotTests {
208209
composeTestRule.setContent {
209210
scope = rememberCoroutineScope()
210211

211-
TestHarness(size = DpSize(width, height)) {
212+
DeviceConfigurationOverride(
213+
DeviceConfigurationOverride.ForcedSize(DpSize(width, height)),
214+
) {
212215
BoxWithConstraints {
213216
val appState = rememberNiaAppState(
214217
windowSizeClass = WindowSizeClass.calculateFromSize(
-2.8 KB
Loading
-5.89 KB
Loading
-5.66 KB
Loading

core/designsystem/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ dependencies {
4040
implementation(libs.coil.kt.compose)
4141

4242
testImplementation(libs.androidx.compose.ui.test)
43-
testImplementation(libs.accompanist.testharness)
4443
testImplementation(libs.hilt.android.testing)
4544
testImplementation(libs.robolectric)
4645
testImplementation(libs.roborazzi)

core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import androidx.compose.material.icons.filled.MoreVert
2323
import androidx.compose.material.icons.outlined.Bookmarks
2424
import androidx.compose.material.icons.outlined.Upcoming
2525
import androidx.compose.material.icons.rounded.Add
26-
import androidx.compose.material.icons.rounded.ArrowBack
2726
import androidx.compose.material.icons.rounded.Bookmark
2827
import androidx.compose.material.icons.rounded.BookmarkBorder
2928
import androidx.compose.material.icons.rounded.Bookmarks
@@ -33,7 +32,6 @@ import androidx.compose.material.icons.rounded.Grid3x3
3332
import androidx.compose.material.icons.rounded.Person
3433
import androidx.compose.material.icons.rounded.Search
3534
import androidx.compose.material.icons.rounded.Settings
36-
import androidx.compose.material.icons.rounded.ShortText
3735
import androidx.compose.material.icons.rounded.Upcoming
3836
import androidx.compose.material.icons.rounded.ViewDay
3937
import androidx.compose.ui.graphics.vector.ImageVector

0 commit comments

Comments
 (0)