android / android/android-test

ActivityScenario changes behavior of Navigation Component and breaks backstack

Aperta
#759 3 commenti 4 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Java
Stelle
1.2k
Fork
342
Merge medio
11h 29m
PR unite (30g)
2

Descrizione

### Description
When using `ActivityScenario`, backstack doesn't work as expected when launching deeplinks.

### Steps to Reproduce
Please see the repro project at https://github.com/lwasyl/activity-scenario-navigation-issue.
1. Navigation library is set up with navigation graph that defines deeplinks
2. Press the button to display a notification. The notification opens the app on FragmentB, with fragmentA in the backstack.
3. Press back button

### Expected Results
Fragment A is visible, as it's the previous one on the backstack.

### Actual Results
When starting main activity normally (via launcher), backstack works as expected: after clicking the notification, fragment B is visible. Then, after pressing back button, fragment A is visible.

When starting main activity via `ActivityScenario`, backstack doesn't work as expected: after clicking the notification, fragment B is visible, however after pressing back button, _app exits_.

Please note that the behavior was correct (that is, consistent with how the app behaves outside the tests) with `ActivityTestRule`, which is now deprecated. There's no clear migration path to test the now-failing case with `ActivityScenario`.

### AndroidX Test and Android OS Versions
`androidx.test.ext:junit-ktx:1.1.2`
Checked on various emulators and it doesn't seem to be related to OS version. Reproduced on API 26, 29, 30 (https://github.com/lwasyl/activity-scenario-navigation-issue/actions/runs/295793564)

### Link to a public git repo demonstrating the problem:
https://github.com/lwasyl/activity-scenario-navigation-issue

Here's how the app behaves normally:
![running-from-launcher](https://user-images.githubusercontent.com/3951580/95485496-1d840a80-0992-11eb-8f07-30fe2885028c.gif)

When pressing back, app properly cycles through the backstack.

Here's UI tests that uses `ActivityScenario` and performs exactly the same steps as I did manually in the gif above (run the main activity, press button, press on notification, press back button):
![running-test](https://user-images.githubusercontent.com/3951580/95485579-3db3c980-0992-11eb-8c06-776b24e985b9.gif)

fragmentA is never shown again

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia con il progetto di riproduzione collegato e il relativo test UI che usa ActivityScenario, quindi confronta il comportamento di Lifecycle e backstack con il normale flusso del launcher e con l'obsoleto ActivityTestRule. Riproduci il deeplink della notifica sui livelli API elencati e traccia il motivo per cui premere Indietro fa uscire dall'app invece di mostrare FragmentA; il lavoro è concluso quando il flusso del test corrisponde al normale comportamento dell'app.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
android, java
Ambito
mobile-dev, testing
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.