Skip to content

Commit 5087c86

Browse files
authored
Merge pull request #1054 from android/revert-adaptive
Revert "Merge pull request #942 from android/feature/navigation-suite…
2 parents 335a7ec + 9c89e98 commit 5087c86

22 files changed

+533
-148
lines changed

app/build.gradle.kts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -116,12 +116,6 @@ dependencies {
116116
implementation(libs.androidx.compose.runtime)
117117
implementation(libs.androidx.lifecycle.runtimeCompose)
118118
implementation(libs.androidx.compose.runtime.tracing)
119-
implementation(libs.androidx.compose.material3.adaptive) {
120-
this.isTransitive = false
121-
}
122-
implementation(libs.androidx.compose.material3.adaptive.navigation.suite) {
123-
this.isTransitive = false
124-
}
125119
implementation(libs.androidx.compose.material3.windowSizeClass)
126120
implementation(libs.androidx.hilt.navigation.compose)
127121
implementation(libs.androidx.navigation.compose)

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import androidx.annotation.StringRes
2020
import androidx.compose.ui.test.assertCountEquals
2121
import androidx.compose.ui.test.assertIsOn
2222
import androidx.compose.ui.test.assertIsSelected
23+
import androidx.compose.ui.test.hasAnyAncestor
24+
import androidx.compose.ui.test.hasTestTag
2325
import androidx.compose.ui.test.hasText
2426
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
2527
import androidx.compose.ui.test.junit4.createAndroidComposeRule
@@ -218,6 +220,14 @@ class NavigationTest {
218220
onNodeWithText(saved).performClick()
219221
onNodeWithContentDescription(settings).performClick()
220222
onNodeWithText(ok).performClick()
223+
224+
// Check that the saved screen is still visible and selected.
225+
onNode(
226+
hasText(saved) and
227+
hasAnyAncestor(
228+
hasTestTag("NiaBottomBar") or hasTestTag("NiaNavRail"),
229+
),
230+
).assertIsSelected()
221231
}
222232
}
223233

Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
/*
2+
* Copyright 2022 The Android Open Source Project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.google.samples.apps.nowinandroid.ui
18+
19+
import androidx.compose.foundation.layout.BoxWithConstraints
20+
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
21+
import androidx.compose.material3.windowsizeclass.WindowSizeClass
22+
import androidx.compose.ui.test.assertIsDisplayed
23+
import androidx.compose.ui.test.junit4.createAndroidComposeRule
24+
import androidx.compose.ui.test.onNodeWithTag
25+
import androidx.compose.ui.unit.DpSize
26+
import androidx.compose.ui.unit.dp
27+
import com.google.accompanist.testharness.TestHarness
28+
import com.google.samples.apps.nowinandroid.core.data.repository.CompositeUserNewsResourceRepository
29+
import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor
30+
import com.google.samples.apps.nowinandroid.core.rules.GrantPostNotificationsPermissionRule
31+
import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepository
32+
import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository
33+
import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity
34+
import dagger.hilt.android.testing.BindValue
35+
import dagger.hilt.android.testing.HiltAndroidRule
36+
import dagger.hilt.android.testing.HiltAndroidTest
37+
import org.junit.Before
38+
import org.junit.Rule
39+
import org.junit.Test
40+
import org.junit.rules.TemporaryFolder
41+
import javax.inject.Inject
42+
43+
/**
44+
* Tests that the navigation UI is rendered correctly on different screen sizes.
45+
*/
46+
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
47+
@HiltAndroidTest
48+
class NavigationUiTest {
49+
50+
/**
51+
* Manages the components' state and is used to perform injection on your test
52+
*/
53+
@get:Rule(order = 0)
54+
val hiltRule = HiltAndroidRule(this)
55+
56+
/**
57+
* Create a temporary folder used to create a Data Store file. This guarantees that
58+
* the file is removed in between each test, preventing a crash.
59+
*/
60+
@BindValue
61+
@get:Rule(order = 1)
62+
val tmpFolder: TemporaryFolder = TemporaryFolder.builder().assureDeletion().build()
63+
64+
/**
65+
* Grant [android.Manifest.permission.POST_NOTIFICATIONS] permission.
66+
*/
67+
@get:Rule(order = 2)
68+
val postNotificationsPermission = GrantPostNotificationsPermissionRule()
69+
70+
/**
71+
* Use a test activity to set the content on.
72+
*/
73+
@get:Rule(order = 3)
74+
val composeTestRule = createAndroidComposeRule<HiltComponentActivity>()
75+
76+
val userNewsResourceRepository = CompositeUserNewsResourceRepository(
77+
newsRepository = TestNewsRepository(),
78+
userDataRepository = TestUserDataRepository(),
79+
)
80+
81+
@Inject
82+
lateinit var networkMonitor: NetworkMonitor
83+
84+
@Before
85+
fun setup() {
86+
hiltRule.inject()
87+
}
88+
89+
@Test
90+
fun compactWidth_compactHeight_showsNavigationBar() {
91+
composeTestRule.setContent {
92+
TestHarness(size = DpSize(400.dp, 400.dp)) {
93+
BoxWithConstraints {
94+
NiaApp(
95+
windowSizeClass = WindowSizeClass.calculateFromSize(
96+
DpSize(maxWidth, maxHeight),
97+
),
98+
networkMonitor = networkMonitor,
99+
userNewsResourceRepository = userNewsResourceRepository,
100+
)
101+
}
102+
}
103+
}
104+
105+
composeTestRule.onNodeWithTag("NiaBottomBar").assertIsDisplayed()
106+
composeTestRule.onNodeWithTag("NiaNavRail").assertDoesNotExist()
107+
}
108+
109+
@Test
110+
fun mediumWidth_compactHeight_showsNavigationRail() {
111+
composeTestRule.setContent {
112+
TestHarness(size = DpSize(610.dp, 400.dp)) {
113+
BoxWithConstraints {
114+
NiaApp(
115+
windowSizeClass = WindowSizeClass.calculateFromSize(
116+
DpSize(maxWidth, maxHeight),
117+
),
118+
networkMonitor = networkMonitor,
119+
userNewsResourceRepository = userNewsResourceRepository,
120+
)
121+
}
122+
}
123+
}
124+
125+
composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed()
126+
composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist()
127+
}
128+
129+
@Test
130+
fun expandedWidth_compactHeight_showsNavigationRail() {
131+
composeTestRule.setContent {
132+
TestHarness(size = DpSize(900.dp, 400.dp)) {
133+
BoxWithConstraints {
134+
NiaApp(
135+
windowSizeClass = WindowSizeClass.calculateFromSize(
136+
DpSize(maxWidth, maxHeight),
137+
),
138+
networkMonitor = networkMonitor,
139+
userNewsResourceRepository = userNewsResourceRepository,
140+
)
141+
}
142+
}
143+
}
144+
145+
composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed()
146+
composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist()
147+
}
148+
149+
@Test
150+
fun compactWidth_mediumHeight_showsNavigationBar() {
151+
composeTestRule.setContent {
152+
TestHarness(size = DpSize(400.dp, 500.dp)) {
153+
BoxWithConstraints {
154+
NiaApp(
155+
windowSizeClass = WindowSizeClass.calculateFromSize(
156+
DpSize(maxWidth, maxHeight),
157+
),
158+
networkMonitor = networkMonitor,
159+
userNewsResourceRepository = userNewsResourceRepository,
160+
)
161+
}
162+
}
163+
}
164+
165+
composeTestRule.onNodeWithTag("NiaBottomBar").assertIsDisplayed()
166+
composeTestRule.onNodeWithTag("NiaNavRail").assertDoesNotExist()
167+
}
168+
169+
@Test
170+
fun mediumWidth_mediumHeight_showsNavigationRail() {
171+
composeTestRule.setContent {
172+
TestHarness(size = DpSize(610.dp, 500.dp)) {
173+
BoxWithConstraints {
174+
NiaApp(
175+
windowSizeClass = WindowSizeClass.calculateFromSize(
176+
DpSize(maxWidth, maxHeight),
177+
),
178+
networkMonitor = networkMonitor,
179+
userNewsResourceRepository = userNewsResourceRepository,
180+
)
181+
}
182+
}
183+
}
184+
185+
composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed()
186+
composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist()
187+
}
188+
189+
@Test
190+
fun expandedWidth_mediumHeight_showsNavigationRail() {
191+
composeTestRule.setContent {
192+
TestHarness(size = DpSize(900.dp, 500.dp)) {
193+
BoxWithConstraints {
194+
NiaApp(
195+
windowSizeClass = WindowSizeClass.calculateFromSize(
196+
DpSize(maxWidth, maxHeight),
197+
),
198+
networkMonitor = networkMonitor,
199+
userNewsResourceRepository = userNewsResourceRepository,
200+
)
201+
}
202+
}
203+
}
204+
205+
composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed()
206+
composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist()
207+
}
208+
209+
@Test
210+
fun compactWidth_expandedHeight_showsNavigationBar() {
211+
composeTestRule.setContent {
212+
TestHarness(size = DpSize(400.dp, 1000.dp)) {
213+
BoxWithConstraints {
214+
NiaApp(
215+
windowSizeClass = WindowSizeClass.calculateFromSize(
216+
DpSize(maxWidth, maxHeight),
217+
),
218+
networkMonitor = networkMonitor,
219+
userNewsResourceRepository = userNewsResourceRepository,
220+
)
221+
}
222+
}
223+
}
224+
225+
composeTestRule.onNodeWithTag("NiaBottomBar").assertIsDisplayed()
226+
composeTestRule.onNodeWithTag("NiaNavRail").assertDoesNotExist()
227+
}
228+
229+
@Test
230+
fun mediumWidth_expandedHeight_showsNavigationRail() {
231+
composeTestRule.setContent {
232+
TestHarness(size = DpSize(610.dp, 1000.dp)) {
233+
BoxWithConstraints {
234+
NiaApp(
235+
windowSizeClass = WindowSizeClass.calculateFromSize(
236+
DpSize(maxWidth, maxHeight),
237+
),
238+
networkMonitor = networkMonitor,
239+
userNewsResourceRepository = userNewsResourceRepository,
240+
)
241+
}
242+
}
243+
}
244+
245+
composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed()
246+
composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist()
247+
}
248+
249+
@Test
250+
fun expandedWidth_expandedHeight_showsNavigationRail() {
251+
composeTestRule.setContent {
252+
TestHarness(size = DpSize(900.dp, 1000.dp)) {
253+
BoxWithConstraints {
254+
NiaApp(
255+
windowSizeClass = WindowSizeClass.calculateFromSize(
256+
DpSize(maxWidth, maxHeight),
257+
),
258+
networkMonitor = networkMonitor,
259+
userNewsResourceRepository = userNewsResourceRepository,
260+
)
261+
}
262+
}
263+
}
264+
265+
composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed()
266+
composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist()
267+
}
268+
}

0 commit comments

Comments
 (0)