/* Ċ Ġ* Ġ ĠCopyright Ġ 2 0 1 7 ĠGoogle ĠInc . Ċ Ġ* Ċ Ġ* Ġ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ġ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . example . android . architecture . blueprint s . todo app Ċ Ċ import Ġandroid . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroid . arch . lifecycle . Lifecycle Ċ import Ġandroid . arch . lifecycle . Lifecycle Owner Ċ import Ġandroid . arch . lifecycle . Lifecycle Registry Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Argument Matchers Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito .` when ` Ċ import Ġorg . mockito . Mockito . never Ċ import Ġorg . mockito . Mockito . times Ċ import Ġorg . mockito . Mockito . verify Ċ import Ġorg . mockito . Mockito Annotations ĊĊ Ċ class ĠSingle Live Event Test Ġ{ ĊĊĠĠĠ Ġ// ĠExecute Ġtasks Ġsynchronous ly ĊĠĠĠ Ġ@ get : Rule Ġvar Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĠĠĠ Ġ// ĠThe Ġclass Ġthat Ġhas Ġthe Ġlifecycle ĊĠĠĠ Ġ@ Mock Ġprivate Ġlateinit Ġvar Ġowner : ĠLifecycle Owner ĊĠĠĠ Ġ// ĠThe Ġobserver Ġof Ġthe Ġevent Ġunder Ġtest ĊĠĠĠ Ġ@ Mock Ġprivate Ġlateinit Ġvar Ġevent Observer : ĠObserver < Int > ĊĠĠĠ Ġ// ĠDefines Ġthe ĠAndroid ĠLifecycle Ġof Ġan Ġobject , Ġused Ġto Ġtrigger Ġdifferent Ġevents ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlifecycle : ĠLifecycle Registry ĊĠĠĠ Ġ// ĠEvent Ġobject Ġunder Ġtest ĊĠĠĠ Ġprivate Ġval Ġsingle Live Event Ġ= ĠSingle Live Event < Int >() ĊĊĠĠĠ Ġ@ Before Ġfun ĠsetUp L ifec yc les () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠLink Ġcustom Ġlifecycle Ġowner Ġwith Ġthe Ġl ifec yle Ġregister . ĊĠĠĠĠĠĠĠ Ġlifecycle Ġ= ĠLifecycle Registry ( owner ) ĊĠĠĠĠĠĠĠ Ġ` when `( owner . lifecycle ). thenReturn ( lifecycle ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġob serving ĊĠĠĠĠĠĠĠ Ġsingle Live Event . observe ( owner , Ġevent Observer ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġin Ġa Ġnon - active Ġstate ĊĠĠĠĠĠĠĠ Ġlifecycle . handle Lifecycle Event ( Lifecycle . Event . ON _ CREATE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġvalue Not Set _ on First On Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠOn Ġresume ĊĠĠĠĠĠĠĠ Ġlifecycle . handle Lifecycle Event ( Lifecycle . Event . ON _ RE SU ME ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġno Ġupdate Ġshould Ġbe Ġemitted Ġbecause Ġno Ġvalue Ġhas Ġbeen Ġset ĊĠĠĠĠĠĠĠ Ġverify < Observer < Int >>( event Observer , Ġnever ()). on Changed ( Argument Matchers . any Int ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġsingle Update _ on Second On Resume _ updates Once () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAfter Ġa Ġvalue Ġis Ġset ĊĠĠĠĠĠĠĠ Ġsingle Live Event . setValue ( 4 2 ) ĊĊĠĠĠĠĠĠĠ Ġwith ( lifecycle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġob servers Ġare Ġcalled Ġonce Ġon Ġresume ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Lifecycle Event ( Lifecycle . Event . ON _ RE SU ME ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġon Ġsecond Ġresume , Ġno Ġupdate Ġshould Ġbe Ġemitted . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Lifecycle Event ( Lifecycle . Event . ON _ STOP ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Lifecycle Event ( Lifecycle . Event . ON _ RE SU ME ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe Ġobserver Ġis Ġcalled Ġonce ĊĠĠĠĠĠĠĠ Ġverify < Observer < Int >>( event Observer , Ġtimes ( 1 )). on Changed ( Argument Matchers . any Int ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtwo Updates _ updates Tw ice () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAfter Ġa Ġvalue Ġis Ġset ĊĠĠĠĠĠĠĠ Ġsingle Live Event . setValue ( 4 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġob servers Ġare Ġcalled Ġonce Ġon Ġresume ĊĠĠĠĠĠĠĠ Ġlifecycle . handle Lifecycle Event ( Lifecycle . Event . ON _ RE SU ME ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen Ġthe Ġvalue Ġis Ġset Ġagain , Ġob servers Ġare Ġcalled Ġagain . ĊĠĠĠĠĠĠĠ Ġsingle Live Event . setValue ( 2 3 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe Ġobserver Ġhas Ġbeen Ġcalled Ġtwice ĊĠĠĠĠĠĠĠ Ġverify < Observer < Int >>( event Observer , Ġtimes ( 2 )). on Changed ( Argument Matchers . any Int ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtwo Updates _ no Update Until Active () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġa Ġvalue ĊĠĠĠĠĠĠĠ Ġsingle Live Event . setValue ( 4 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhich Ġdoesn 't Ġemit Ġa Ġchange ĊĠĠĠĠĠĠĠ Ġverify < Observer < Int >>( event Observer , Ġnever ()). on Changed ( 4 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġand Ġset Ġit Ġagain ĊĠĠĠĠĠĠĠ Ġsingle Live Event . setValue ( 4 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġob servers Ġare Ġcalled Ġonce Ġon Ġresume . ĊĠĠĠĠĠĠĠ Ġlifecycle . handle Lifecycle Event ( Lifecycle . Event . ON _ RE SU ME ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe Ġobserver Ġis Ġcalled Ġonly Ġonce ĊĠĠĠĠĠĠĠ Ġverify < Observer < Int >>( event Observer , Ġtimes ( 1 )). on Changed ( Argument Matchers . any Int ()) ĊĠĠĠ Ġ} Ċ } Ċ