package Ġco il . transition Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . test . core . app . Application Provider Ċ import Ġco il . annotation . Experimental Co il Api Ċ import Ġco il . drawable . Cross fade Drawable Ċ import Ġco il . util . create Test Main Dispatcher Ċ import Ġco il . util . error Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . test . Test Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . test . reset Main Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue Ċ Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ @ Opt In ( Experimental Co il Api :: class , ĠExperimental Cor outines Api :: class ) Ċ class ĠCross fade Transition Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠContext ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmain Dispatcher : ĠTest Coroutine Dispatcher ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtransition : ĠCross fade Transition ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Ġ= ĠApplication Provider . getApplicationContext () ĊĠĠĠĠĠĠĠ Ġmain Dispatcher Ġ= Ġcreate Test Main Dispatcher () ĊĠĠĠĠĠĠĠ Ġtransition Ġ= ĠCross fade Transition () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġafter () Ġ{ ĊĠĠĠĠĠĠĠ ĠDispatch ers . reset Main () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` success Ġ- Ġis Memory Cache = true `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠColor Drawable () ĊĠĠĠĠĠĠĠ Ġvar ĠonSuccess Called Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . transition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= Ġcreate Transition Target ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( on Success Called ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Called Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( drawable , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠTransition Result . Success ( drawable , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( on Success Called ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` success Ġ- Ġis Memory Cache = false `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠColor Drawable () ĊĠĠĠĠĠĠĠ Ġvar ĠonSuccess Called Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . transition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= Ġcreate Transition Target ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( on Success Called ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Called Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠCross fade Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( drawable , Ġresult . end ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStop Ġthe Ġtransition Ġearly Ġto Ġsimulate Ġthe Ġend Ġof Ġthe Ġanimation . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠTransition Result . Success ( drawable , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( on Success Called ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfailure () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠColor Drawable () ĊĠĠĠĠĠĠĠ Ġvar ĠonSuccess Called Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . transition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= Ġcreate Transition Target ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( on Success Called ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Called Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( error Ġis ĠCross fade Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( drawable , Ġerror . end ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStop Ġthe Ġanimation Ġearly Ġto Ġsimulate Ġthe Ġend Ġof Ġthe Ġanimation . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠTransition Result . Error ( drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( on Success Called ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġcreate Transition Target ( ĊĠĠĠĠĠĠĠ Ġcross inline ĠonStart : Ġ( placeholder : ĠDrawable ?) Ġ-> ĠUnit Ġ= Ġ{ Ġerror () Ġ}, ĊĠĠĠĠĠĠĠ Ġcross inline ĠonError : Ġ( error : ĠDrawable ?) Ġ-> ĠUnit Ġ= Ġ{ Ġerror () Ġ}, ĊĠĠĠĠĠĠĠ Ġcross inline ĠonSuccess : Ġ( result : ĠDrawable ) Ġ-> ĠUnit Ġ= Ġ{ Ġerror () Ġ} ĊĠĠĠ Ġ): ĠTransition Target < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠTransition Target < ImageView > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġview Ġ= ĠImageView ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġdrawable : ĠDrawable ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġview . drawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart ( placeholder : ĠDrawable ?) Ġ= ĠonStart ( placeholder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠDrawable ?) Ġ= ĠonError ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( result : ĠDrawable ) Ġ= ĠonSuccess ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ