@@ -311,6 +311,52 @@ class NavControllerTest {
311
311
assertThat(replacementLifecycleOwner.observerCount).isEqualTo(1 )
312
312
}
313
313
314
+ @UiThreadTest
315
+ @Test
316
+ fun testSetSameOnBackPressedDispatcher () {
317
+ val navController = createNavController()
318
+ val lifecycleOwner = TestLifecycleOwner (Lifecycle .State .RESUMED )
319
+ navController.setLifecycleOwner(lifecycleOwner)
320
+ // Set the graph and navigate to another destination to build up our back stack
321
+ navController.setGraph(R .navigation.nav_simple)
322
+ navController.navigate(R .id.second_test)
323
+
324
+ val dispatcher = OnBackPressedDispatcher ()
325
+ navController.setOnBackPressedDispatcher(dispatcher)
326
+ assertThat(dispatcher.hasEnabledCallbacks()).isTrue()
327
+ // One observer is the NavController itself, the other is the OnBackPressedCallback
328
+ assertThat(lifecycleOwner.observerCount).isEqualTo(2 )
329
+
330
+ navController.setOnBackPressedDispatcher(dispatcher)
331
+ assertThat(dispatcher.hasEnabledCallbacks()).isTrue()
332
+ // One observer is the NavController itself, the other is the OnBackPressedCallback
333
+ assertThat(lifecycleOwner.observerCount).isEqualTo(2 )
334
+ }
335
+
336
+ @UiThreadTest
337
+ @Test
338
+ fun testSetNewOnBackPressedDispatcher () {
339
+ val navController = createNavController()
340
+ val lifecycleOwner = TestLifecycleOwner (Lifecycle .State .RESUMED )
341
+ navController.setLifecycleOwner(lifecycleOwner)
342
+ // Set the graph and navigate to another destination to build up our back stack
343
+ navController.setGraph(R .navigation.nav_simple)
344
+ navController.navigate(R .id.second_test)
345
+
346
+ val dispatcher = OnBackPressedDispatcher ()
347
+ navController.setOnBackPressedDispatcher(dispatcher)
348
+ assertThat(dispatcher.hasEnabledCallbacks()).isTrue()
349
+ // One observer is the NavController itself, the other is the OnBackPressedCallback
350
+ assertThat(lifecycleOwner.observerCount).isEqualTo(2 )
351
+
352
+ val replacementDispatcher = OnBackPressedDispatcher ()
353
+ navController.setOnBackPressedDispatcher(replacementDispatcher)
354
+ assertThat(replacementDispatcher.hasEnabledCallbacks()).isTrue()
355
+ assertThat(dispatcher.hasEnabledCallbacks()).isFalse()
356
+ // One observer is the NavController itself, the other is the new OnBackPressedCallback
357
+ assertThat(lifecycleOwner.observerCount).isEqualTo(2 )
358
+ }
359
+
314
360
@UiThreadTest
315
361
@Test
316
362
fun testNavigate () {
0 commit comments