/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . google . samples . apps . ios ched . util Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . google . samples . apps . ios ched . android test . util . LiveData TestUtil Ċ import Ġcom . google . samples . apps . ios ched . shared . domain . internal . IOS ched Handler Ċ import Ġcom . google . samples . apps . ios ched . shared . time . Time Provider Ċ import Ġcom . google . samples . apps . ios ched . test . data . TestData Ċ import Ġcom . google . samples . apps . ios ched . test . util . Sync Task Executor Rule Ċ import Ġcom . google . samples . apps . ios ched . test . util . time . Fixed Time Executor Rule Ċ import Ġcom . google . samples . apps . ios ched . util . Conference State . ENDED Ċ import Ġcom . google . samples . apps . ios ched . util . Conference State . STARTED Ċ import Ġcom . google . samples . apps . ios ched . util . Conference State . UP COM ING Ċ import Ġcom . n ha ar man . mockito _ kotlin . do Return Ċ import Ġcom . n ha ar man . mockito _ kotlin . mock Ċ import Ġorg . hamcrest . Core Matchers .` is ` Ċ import Ġorg . hamcrest . Core Matchers . equalTo Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mockito .` when ` Ċ import Ġorg . mockito . Mockito . verify Ċ import Ġorg . th reet en . bp . Instant Ċ Ċ /** Ċ Ġ* ĠUnit Ġtests Ġfor Ġ[ Conference State LiveData ] Ċ Ġ*/ Ċ class ĠConference State LiveData Test Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠINST ANT _ BEFORE _ CON FER ENCE _ START : ĠInstant Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Data . Test Conference Days [ 0 ]. start . to Instant () ĊĠĠĠĠĠĠĠ Ġ// ĠConference Ġactually Ġstarts Ġafter Ġ 3 Ġhours Ġof Ġday 0 Ġstart Ġtime ĊĠĠĠĠĠĠĠ Ġval ĠINST ANT _ D UR ING _ CON FER ENCE : ĠInstant Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Data . Test Conference Days [ 0 ]. start . plus Hours ( 4 ). to Instant () ĊĠĠĠĠĠĠĠ Ġval ĠINST ANT _ AFTER _ CON FER ENCE _ END : ĠInstant Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Data . Test Conference Days [ 2 ]. end . plus Seconds ( 1 ). to Instant () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Rule Ġvar Ġinstant Task Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ@ get : Rule Ġvar Ġsync Task Executor Rule Ġ= ĠSync Task Executor Rule () ĊĊĠĠĠ Ġ@ get : Rule Ġvar Ġfixed Time Executor Rule Ġ= ĠFixed Time Executor Rule () ĊĊĠĠĠ Ġprivate Ġval Ġfake Handler Ġ= Ġobject Ġ: ĠIOS ched Handler Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpost ( run nable : ĠRunnable ) Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpost Delayed ( run nable : ĠRunnable , Ġmillis : ĠLong ) Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġremove Callbacks ( run nable : ĠRunnable ) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Up coming State () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconference State LiveData Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Conference State LiveData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠiOS ched Handler Ġ= Ġfake Handler , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstant Ġ= ĠINST ANT _ BEFORE _ CON FER ENCE _ START ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLive Data TestUtil . getValue ( conference State LiveData ), Ġ` is ` ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( equalTo ( UP COM ING )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Started State () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconference State LiveData Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Conference State LiveData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠiOS ched Handler Ġ= Ġfake Handler , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstant Ġ= ĠINST ANT _ D UR ING _ CON FER ENCE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLive Data TestUtil . getValue ( conference State LiveData ), Ġ` is ` ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( equalTo ( STARTED )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Ended State () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconference State LiveData Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Conference State LiveData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠiOS ched Handler Ġ= Ġfake Handler , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstant Ġ= ĠINST ANT _ AFTER _ CON FER ENCE _ END ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLive Data TestUtil . getValue ( conference State LiveData ), Ġ` is ` ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( equalTo ( ENDED )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest State Transition () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Time Provider Ġ= Ġmock < Time Provider > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġnow () Ġ}. do Return ( INST ANT _ BEFORE _ CON FER ENCE _ START ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġmock < Observer < Conference State >> Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhandler With Transition Verification Ġ= Ġobject Ġ: ĠIOS ched Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar ĠnumberOf Times Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpost ( run nable : ĠRunnable ) Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpost Delayed ( run nable : ĠRunnable , Ġmillis : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numberOf Times Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( UP COM ING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdv ance Ġtime Ġbeyond Ġthe Ġstart Ġof Ġconference . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` when `( mock Time Provider . now ()). thenReturn ( INST ANT _ D UR ING _ CON FER ENCE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Times ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunnable . run () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numberOf Times Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( STARTED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdv ance Ġtime Ġjust Ġafter Ġthe Ġend Ġof Ġconference . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` when `( mock Time Provider . now ()). thenReturn ( INST ANT _ AFTER _ CON FER ENCE _ END ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Times ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunnable . run () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numberOf Times Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( ENDED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġremove Callbacks ( run nable : ĠRunnable ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġconference State LiveData Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Conference State LiveData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠiOS ched Handler Ġ= Ġhandler With Transition Verification , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider Ġ= Ġmock Time Provider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġconference State LiveData . observe Fore ver ( observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Conference State LiveData ( ĊĠĠĠĠĠĠĠ ĠiOS ched Handler : ĠIOS ched Handler , ĊĠĠĠĠĠĠĠ Ġinstant : ĠInstant Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠ Ġtime Provider : ĠTime Provider Ġ= Ġmock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġnow () Ġ}. do Return ( instant ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ): ĠConference State LiveData Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠConference State LiveData ( iOS ched Handler , Ġtime Provider ) ĊĠĠĠ Ġ} Ċ }