package Ġde . mann oder ma us . junit 5 Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroidx . test . core . app . Activity Scenario Ċ import Ġde . mann oder ma us . junit 5 . Activity Scenario Extension . Companion . launch Ċ import Ġorg . junit . jupiter . api . extension . After Each Callback Ċ import Ġorg . junit . jupiter . api . extension . BeforeEach Callback Ċ import Ġorg . junit . jupiter . api . extension . Extension Context Ċ import Ġorg . junit . jupiter . api . extension . Parameter Context Ċ import Ġorg . junit . jupiter . api . extension . Parameter Resolver Ċ import Ġorg . junit . jupiter . api . extension . Register Extension Ċ import Ġjava . lang . reflect . Parameterized Type Ċ Ċ /** Ċ Ġ* ĠJ Unit Ġ 5 ĠExtension Ġfor Ġthe Ġ[ Activity Scenario ] ĠAPI , Ċ Ġ* Ġprovided Ġby Ġthe ĠAndroid X Ġtest Ġcore Ġlibrary . Ċ Ġ* Ċ Ġ* ĠThis Ġextension Ġis Ġused Ġin Ġli eu Ġof Ġa ĠJ Unit Ġ 4 ĠRule Ġto Ġautomatically Ċ Ġ* Ġlaunch / stop Ġan Ġ[ Activity Scenario ] Ġfor Ġeach Ġtest Ġcase . Ċ Ġ* Ċ Ġ* ĠTo Ġuse Ġthis Ġextension Ġin Ġyour Ġtest Ġclass , Ġadd Ġit Ġas Ġa Ġnon - private Ġinstance Ġfield Ċ Ġ* Ġto Ġyour Ġtest Ġclass , Ġusing Ġone Ġof Ġthe Ġfactory Ġmethods Ġnamed Ġ[ launch ]. Ċ Ġ* ĠThen , Ġannotate Ġthis Ġfield Ġwith ĠJ Unit ĠJ upiter 's Ġ[ Register Extension ] Ġannotation . Ċ Ġ* ĠIn ĠKotlin , Ġalso Ġadd Ġ[ Jvm Field ] Ġor Ġelse Ġthe Ġgenerated Ġproperty Ġwon 't Ġbe Ġvisible Ġto Ġthe ĠTest Engine ! Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠĠ Ġ// ĠJava Ċ Ġ* ĠĠ Ġclass ĠMy Activity Tests Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ@ Register Extension Ċ Ġ* ĠĠĠĠ Ġfinal ĠActivity Scenario Extension < My Activity > Ġscenario Extension Ġ= ĠActivity Scenario Extension . launch ( My Activity . class ); Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠ Ġ// ĠKotlin Ċ Ġ* ĠĠ Ġclass ĠMy Activity Tests Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ@ Jvm Field Ċ Ġ* ĠĠĠĠ Ġ@ Register Extension Ċ Ġ* ĠĠĠĠ Ġval Ġscenario Extension Ġ= ĠActivity Scenario Extension . launch < My Activity >() Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠIn Ġyour Ġtest Ġmethod , Ġyou Ġcan Ġobtain Ġa Ġreference Ġto Ġthe Ġscenario Ġin Ġtwo Ġways : Ċ Ġ* Ċ Ġ* ĠA ) ĠYou Ġobtain Ġit Ġfrom Ġthe Ġextension Ġdirectly Ġthrough Ġits Ġaccessor Ġmethod : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠĠ Ġ// ĠJava Ċ Ġ* ĠĠ Ġclass ĠMy Activity Tests Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ@ Register Extension Ċ Ġ* ĠĠĠĠ Ġfinal ĠActivity Scenario Extension < My Activity > Ġscenario Extension Ġ= ĠActivity Scenario Extension . launch ( My Activity . class ); Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ@ Test Ċ Ġ* ĠĠĠĠ Ġvoid Ġmy Test () Ġ{ Ċ Ġ* ĠĠĠĠĠĠ ĠActivity Scenario < My Activity > Ġscenario Ġ= Ġscenario Extension . get Scenario (); Ċ Ġ* ĠĠĠĠĠĠ Ġ// ĠUse Ġthe Ġscenario ... Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠ Ġ// ĠKotlin Ċ Ġ* ĠĠ Ġclass ĠMy Activity Tests Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ@ Jvm Field Ċ Ġ* ĠĠĠĠ Ġ@ Register Extension Ċ Ġ* ĠĠĠĠ Ġval Ġscenario Extension Ġ= ĠActivity Scenario Extension . launch < My Activity >() Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ@ Test Ċ Ġ* ĠĠĠĠ Ġfun Ġmy Test () Ġ{ Ċ Ġ* ĠĠĠĠĠĠ Ġval Ġscenario Ġ= Ġscenario Extension . scenario Ċ Ġ* ĠĠĠĠĠĠ Ġ// ĠUse Ġthe Ġscenario ... Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠB ) ĠYou Ġadd Ġa Ġparameter Ġof Ġtype Ġ[ Activity Scenario ], Ġwith Ġthe Ġactivity Ġclass Ġas Ġits Ġgeneric Ġtype : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠĠ Ġ// ĠJava Ċ Ġ* ĠĠ Ġclass ĠMy Activity Tests Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ@ Register Extension Ċ Ġ* ĠĠĠĠ Ġfinal ĠActivity Scenario Extension < My Activity > Ġscenario Extension Ġ= ĠActivity Scenario Extension . launch ( My Activity . class ); Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ@ Test Ċ Ġ* ĠĠĠĠ Ġvoid Ġmy Test ( Activity Scenario < My Activity > Ġscenario ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠ Ġ// ĠUse Ġthe Ġscenario ... Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠ Ġ// ĠKotlin Ċ Ġ* ĠĠ Ġclass ĠMy Activity Tests Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ@ Jvm Field Ċ Ġ* ĠĠĠĠ Ġ@ Register Extension Ċ Ġ* ĠĠĠĠ Ġval Ġscenario Extension Ġ= ĠActivity Scenario Extension . launch < My Activity >() Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ@ Test Ċ Ġ* ĠĠĠĠ Ġfun Ġmy Test ( scenario : ĠActivity Scenario < My Activity >) Ġ{ Ċ Ġ* ĠĠĠĠĠĠ Ġ// ĠUse Ġthe Ġscenario ... Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ*/ Ċ @ Target Api ( Build . VERSION _ CODES . O ) Ċ public Ġclass ĠActivity Scenario Extension < A Ġ: ĠActivity > Ċ private Ġconstructor ( private Ġval Ġscenario Supplier : Ġ() Ġ-> ĠActivity Scenario < A >) Ġ: ĠBefore Each Callback , ĊĠĠĠ ĠAfter Each Callback , ĠParameter Resolver Ġ{ ĊĊĠĠĠ Ġpublic Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠLa unches Ġan Ġactivity Ġof Ġa Ġgiven Ġclass Ġand Ġconstructs Ġan Ġ[ Activity Scenario ] Ġfor Ġit . ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġdefault Ġlaunch Ġintent Ġwithout Ġspecific Ġextras Ġis Ġused Ġto Ġlaunch Ġthe Ġactivity . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġ< A Ġ: ĠActivity > Ġlaunch ( activity Class : ĠClass < A >): ĠActivity Scenario Extension < A > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Scenario Extension Ġ{ ĠActivity Scenario . launch ( activity Class ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠLa unches Ġan Ġactivity Ġof Ġa Ġgiven Ġclass Ġand Ġconstructs Ġan Ġ[ Activity Scenario ] Ġfor Ġit . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġgiven Ġintent Ġis Ġused Ġto Ġlaunch Ġthe Ġactivity . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġ< A Ġ: ĠActivity > Ġlaunch ( startActivity Intent : ĠIntent ): ĠActivity Scenario Extension < A > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Scenario Extension Ġ{ ĠActivity Scenario . launch < A >( startActivity Intent ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠKotlin - specific Ġconvenience Ġvariations Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠLa unches Ġan Ġactivity Ġof Ġa Ġgiven Ġclass Ġand Ġconstructs Ġan Ġ[ Activity Scenario ] Ġfor Ġit . ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġdefault Ġlaunch Ġintent Ġwithout Ġspecific Ġextras Ġis Ġused Ġto Ġlaunch Ġthe Ġactivity . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġinline Ġfun Ġ< re ified ĠA Ġ: ĠActivity > Ġlaunch (): ĠActivity Scenario Extension < A > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( A :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠFields Ġ*/ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ scenario : ĠActivity Scenario < A >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġcurrent Ġ[ Activity Scenario ] Ġof Ġthe Ġactivity Ġclass . ĊĠĠĠĠ Ġ* Ġ@ throws ĠNullPointerException ĠIf Ġthis Ġmethod Ġis Ġcalled Ġwhile Ġno Ġtest Ġis Ġrunning ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġval Ġscenario : ĠActivity Scenario < A > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ scenario !! ĊĊĠĠĠ Ġ/* ĠMethods Ġ*/ ĊĊĠĠĠ Ġoverride Ġfun ĠbeforeEach ( context : ĠExtension Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ scenario Ġ= Ġscenario Supplier () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠafterEach ( context : ĠExtension Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscenario . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsupports Parameter ( ĊĠĠĠĠĠĠĠ Ġparameter Context : ĠParameter Context , ĊĠĠĠĠĠĠĠ Ġextension Context : ĠExtension Context ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġextension Ġcan Ġresolve ĠActivity Scenario Ġparameters Ġthat Ġuse Ġthe Ġcorrect Ġactivity Ġtype . ĊĠĠĠĠĠĠĠ Ġval Ġparam Type Ġ= Ġparameter Context . parameter . parameter ized Type ĊĠĠĠĠĠĠĠ Ġreturn Ġparam Type Ġis ĠParameter ized Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġparam Type . raw Type Ġ== ĠActivity Scenario :: class . java ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresolve Parameter ( ĊĠĠĠĠĠĠĠ Ġparameter Context : ĠParameter Context , ĊĠĠĠĠĠĠĠ Ġextension Context : ĠExtension Context ĊĠĠĠ Ġ): ĠAny Ġ= Ġscenario Ċ } Ċ