android / android/android-test
ActivityScenario: expectations for Activity.isTaskRoot() behavior
- Lingua principale
- Java
- Stelle
- 1.2k
- Fork
- 342
- Merge medio
- 11h 29m
- PR unite (30g)
- 2
Descrizione
### Description
When using `ActivityScenario` to test activities, the activity under test is not considered as the task root. I guess this is by design since `FLAG_ACTIVITY_NEW_TASK` is masked when launched via `BootstrapActivity` in `InstrumentationActivityInvoker`. For activities that make use of `Activity.isTaskRoot()` this could lead to unexpected behaviors during testing since the activity under test isn't actually the root of the task. This is a behavior change compared to running the test with `ActivityTestRule` or in some cases compared to running the real application. Is it reasonable to expect the activity under test to be considered as the task root even if it is somehow faked or configurable to return true?
### Steps to Reproduce
minimal sample:
```kotlin
// in main source set as the launcher activity
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (!isTaskRoot) {
finish()
}
}
}
// in test sources
class MainActivityTest {
@Test
fun scenario() {
ActivityScenario.launch(MainActivity::class.java).onActivity { }
}
@Test
fun testRule() {
val rule = ActivityTestRule(MainActivity::class.java, true, false)
rule.launchActivity(null)
assertTrue(rule.activity.isTaskRoot)
}
}
```
### Expected Results
Be able to test activities that are making use of `isTaskRoot()` reliably.
### Actual Results
scenario test case cannot run `onActivity` since the activity is immediately finished.
testRule test case works as expected.
### AndroidX Test and Android OS Versions
1.2.1-alpha02, API 28
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia da ActivityScenario e dal percorso di avvio di BootstrapActivity, quindi esamina InstrumentationActivityInvoker, dove FLAG_ACTIVITY_NEW_TASK viene mascherato. Riproduci l’esempio Kotlin su API 28 e confronta ActivityScenario con ActivityTestRule; il lavoro è completato quando l’activity sottoposta a test può riportare in modo affidabile il comportamento previsto di isTaskRoot() e lo scenario raggiunge onActivity.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- android, java, kotlin
- 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