package Ġorg . sage b ion etwork s . research . mp ower Ċ Ċ import Ġandroid . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroid . support . test . Instrumentation Registry Ċ import Ġandroid . support . test . runner . Android JUnit 4 Ċ import Ġcom . google . common . collect . Immutable Set Ċ import Ġcom . google . common . collect . Range Set Ċ import Ġorg . junit .* Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . runner .* Ċ import Ġorg . sage b ion etwork s . research . mp ower . tracking . model . Tracking Item Ċ import Ġorg . sage b ion etwork s . research . mp ower . tracking . model . Tracking Step Ċ import Ġorg . sage b ion etwork s . research . mp ower . tracking . model . Tracking Step View Ċ import Ġorg . sage b ion etwork s . research . mp ower . tracking . model . Tracking Sub step Info Ċ import Ġorg . sage b ion etwork s . research . mp ower . tracking . recycler _ view . Med ication Logging Item Ċ import Ġorg . sage b ion etwork s . research . mp ower . tracking . recycler _ view . Med ication Logging Schedule Ċ import Ġorg . sage b ion etwork s . research . mp ower . tracking . recycler _ view . Med ication Logging Title Ċ import Ġorg . sage b ion etwork s . research . mp ower . tracking . view _ model . Med ication Tracking Task ViewModel Ċ import Ġorg . sage b ion etwork s . research . mp ower . tracking . view _ model . logs . Dos age Item Ċ import Ġorg . sage b ion etwork s . research . mp ower . tracking . view _ model . logs . Med ication Log Ċ import Ġorg . sage b ion etwork s . research . mp ower . tracking . view _ model . logs . Med ication Timestamp Ċ import Ġorg . th reet en . bp . LocalDateTime Ċ import Ġorg . th reet en . bp . Local Time Ċ import Ġorg . th reet en . bp . Month Ċ import Ġjava . util . Arrays Ċ import Ġjava . util . Collections Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠMed ication Time Based Filtering Test Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠMed ic ations Ġin Ġthis Ġtest Ġhave Ġthe Ġfollowing Ġs chedules : ĠAll Ġdos ages Ġare Ġ" 1 0 0 mg " ĠMed 1 Ġ- ĠAny time ĠMed 2 Ġ- ĊĠĠĠĠ Ġ* ĠMonday , ĠT uesday , ĠF riday Ġat Ġ 6 : 0 0 AM ĠMed 3 Ġ- ĠEvery day Ġat Ġ 1 : 0 0 PM Ġ- ĠS aturday , ĠS unday Ġat Ġ 6 : 0 0 PM ĠMed 4 Ġ- ĠEvery day Ġat ĊĠĠĠĠ Ġ* Ġ 1 : 0 0 AM ĠMed 5 Ġ- ĠTh ursday Ġat Ġ 5 : 3 0 PM Ġ- ĠTh ursday Ġat Ġ 9 : 0 0 PM Ġ- ĠF riday Ġat Ġ 2 : 3 0 AM ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠD OS AGE Ġ= Ġ" 1 0 0 mg " ĊĠĠĠĠĠĠĠ Ġval ĠITEM _ 1 Ġ= ĠTracking Item . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Identifier (" Med 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Section Identifier (" section ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval ĠCONFIG _ 1 : ĠMed ication Log ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCONFIG _ 1 Ġ= ĠMed ication Log . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Identifier (" Med 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Dos age Items ( mutable ListOf ( Dos age Item ( DOS AGE , ĠD os age Item . daily Set . to Mutable Set (), Ġmutable Set Of ()))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠITEM _ 2 Ġ= ĠTracking Item . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Identifier (" Med 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Section Identifier (" section ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval ĠCONFIG _ 2 : ĠMed ication Log ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Stamp Ġ= ĠMed ication Timestamp . builder (). setTime OfDay (" 0 6 : 0 0 ") !!. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġset Of ( 2 , Ġ 3 , Ġ 6 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCONFIG _ 2 Ġ= ĠMed ication Log . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Identifier (" Med 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Dos age Items ( mutable ListOf ( Dos age Item ( DOS AGE , Ġdays . to Mutable Set (), Ġmutable Set Of ( time Stamp )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠITEM _ 3 Ġ= ĠTracking Item . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Identifier (" Med 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Section Identifier (" section ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval ĠCONFIG _ 3 : ĠMed ication Log ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Stamp 1 Ġ= ĠMed ication Timestamp . builder (). setTime OfDay (" 1 3 : 0 0 ") !!. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Stamp 2 Ġ= ĠMed ication Timestamp . builder (). setTime OfDay (" 1 8 : 0 0 ") !!. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġset Of ( 7 , Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCONFIG _ 3 Ġ= ĠMed ication Log . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Identifier (" Med 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Dos age Items ( mutable ListOf ( Dos age Item ( DOS AGE , Ġdays . to Mutable Set (), Ġmutable Set Of ( time Stamp 1 , Ġtime Stamp 2 )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠITEM _ 4 Ġ= ĠTracking Item . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Identifier (" Med 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Section Identifier (" section ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval ĠCONFIG _ 4 : ĠMed ication Log ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Stamp Ġ= ĠMed ication Timestamp . builder (). setTime OfDay (" 0 1 : 0 0 ") !!. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCONFIG _ 4 Ġ= ĠMed ication Log . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Identifier (" Med 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Dos age Items ( mutable ListOf ( Dos age Item ( DOS AGE , ĠD os age Item . daily Set . to Mutable Set (), Ġmutable Set Of ( time Stamp )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠITEM _ 5 Ġ= ĠTracking Item . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Identifier (" Med 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Section Identifier (" section ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval ĠCONFIG _ 5 : ĠMed ication Log ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Stamp 1 Ġ= ĠMed ication Timestamp . builder (). setTime OfDay (" 1 7 : 3 0 ") !!. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Stamp 2 Ġ= ĠMed ication Timestamp . builder (). setTime OfDay (" 2 1 : 0 0 ") !!. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Stamp 3 Ġ= ĠMed ication Timestamp . builder (). setTime OfDay (" 0 2 : 3 0 ") !!. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġset Of ( 4 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschedule 1 Ġ= ĠSchedule ( Local Time . NO ON . plus Hours ( 5 ). plus Minutes ( 3 0 ), Ġset Of ( 4 )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschedule 2 Ġ= ĠSchedule ( Local Time . NO ON . plus Hours ( 9 ), Ġset Of ( 4 )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschedule 3 Ġ= ĠSchedule ( Local Time . MID N IGHT . plus Hours ( 2 ). plus Minutes ( 3 0 ), Ġset Of ( 5 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCONFIG _ 5 Ġ= ĠMed ication Log . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Identifier (" Med 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Dos age Items ( mutable ListOf ( Dos age Item ( DOS AGE , Ġdays . to Mutable Set (), Ġmutable Set Of ( time Stamp 1 , Ġtime Stamp 2 , Ġtime Stamp 3 )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠSTEP : ĠTracking Step ĊĠĠĠĠĠĠĠ Ġval ĠSTEP _ VIEW : ĠTracking Step View ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrem inders Info Ġ= ĠTracking Sub step Info . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" title ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setText (" text ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselection Info Ġ= ĠTracking Sub step Info . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" title ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setText (" text ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTEP Ġ= ĠTracking Step . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Identifier (" Test Step ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Items ( Immutable Set . of ( ITEM _ 1 , ĠITEM _ 2 , ĠITEM _ 3 , ĠITEM _ 4 , ĠITEM _ 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setSelection Info ( selection Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Rem inders Info ( rem inders Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTEP _ VIEW Ġ= ĠTracking Step View . from Tracking Step ( STEP , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġinstant Task Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠMed ication Tracking Task ViewModel ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠMed ication Tracking Task ViewModel ( Instrumentation Registry . getTarget Context (), ĠSTEP _ VIEW , Ġnull ) ĊĠĠĠĠĠĠĠ ĠviewModel . add Config ( CONFIG _ 1 ) ĊĠĠĠĠĠĠĠ ĠviewModel . add Config ( CONFIG _ 2 ) ĊĠĠĠĠĠĠĠ ĠviewModel . add Config ( CONFIG _ 3 ) ĊĠĠĠĠĠĠĠ ĠviewModel . add Config ( CONFIG _ 4 ) ĊĠĠĠĠĠĠĠ ĠviewModel . add Config ( CONFIG _ 5 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtest _ time Block ( time : ĠLocal Time , Ġidentifier : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Block : ĠPair < String , ĠRange Set < Local Time >> Ġ= ĠviewModel . getTime Block ( time ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Unexpected Ġtime Ġblock Ġreturned ", Ġidentifier , Ġtime Block . first ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ time Block _ 1 AM () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime : ĠLocal Time Ġ= ĠLocal Time . MID N IGHT . plus Hours ( 1 ) ĊĠĠĠĠĠĠĠ Ġtest _ time Block ( time , Ġ" Night ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ time Block _ 6 AM () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime : ĠLocal Time Ġ= ĠLocal Time . MID N IGHT . plus Hours ( 6 ) ĊĠĠĠĠĠĠĠ Ġtest _ time Block ( time , Ġ" Mor ning ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ time Block _ 1 PM () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime : ĠLocal Time Ġ= ĠLocal Time . NO ON . plus Hours ( 1 ) ĊĠĠĠĠĠĠĠ Ġtest _ time Block ( time , Ġ" Af tern oon ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ time Block _ 6 PM () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime : ĠLocal Time Ġ= ĠLocal Time . NO ON . plus Hours ( 6 ) ĊĠĠĠĠĠĠĠ Ġtest _ time Block ( time , Ġ" Even ing ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ time Block _ 1 1 PM () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime : ĠLocal Time Ġ= ĠLocal Time . NO ON . plus Hours ( 1 1 ) ĊĠĠĠĠĠĠĠ Ġtest _ time Block ( time , Ġ" Night ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ Current Configs _ 6 AM _ Tuesday () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSeptember Ġ 2 5 th , Ġ 2 0 1 8 Ġis Ġa ĠT uesday . ĊĠĠĠĠĠĠĠ Ġval Ġtime : ĠLocalDateTime Ġ= ĠLocalDateTime . of ( 2 0 1 8 , ĠMonth . SEP TE MBER , Ġ 2 5 , Ġ 6 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġtime Block : ĠPair < String , ĠRange Set < Local Time >> Ġ= ĠviewModel . getTime Block ( time . to Local Time ()) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Configs : ĠList < Med ication Logging Item > Ġ= ĠviewModel . getCurrent Time Block Med ic ations ( time Block , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime . to LocalDate ()) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠList < Med ication Logging Item > Ġ= ĠArrays . asList ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMed ication Logging Title (" Med 1 Ġ 1 0 0 mg "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMed ication Logging Schedule ( CONFIG _ 1 , ĠCONFIG _ 1 . dos age Items [ 0 ], Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMed ication Logging Title (" Med 2 Ġ 1 0 0 mg "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMed ication Logging Schedule ( CONFIG _ 2 , ĠCONFIG _ 2 . dos age Items [ 0 ], Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( current Configs . size , Ġexpected . size ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( current Configs [ 0 ] Ġis ĠMed ication Logging Title ) ĊĠĠĠĠĠĠĠ ĠassertEquals (( current Configs [ 0 ] Ġas ĠMed ication Logging Title ). title , Ġ" Med 1 Ġ 1 0 0 mg ") ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( current Configs [ 1 ] Ġis ĠMed ication Logging Schedule ) ĊĠĠĠĠĠĠĠ ĠassertEquals (( current Configs [ 1 ] Ġas ĠMed ication Logging Schedule ). config , ĠCONFIG _ 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals (( current Configs [ 1 ] Ġas ĠMed ication Logging Schedule ). dos age Item , ĠCONFIG _ 1 . dos age Items [ 0 ]) ĊĠĠĠĠĠĠĠ ĠassertFalse (( current Configs [ 1 ] Ġas ĠMed ication Logging Schedule ). is Logged ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( current Configs [ 2 ] Ġis ĠMed ication Logging Title ) ĊĠĠĠĠĠĠĠ ĠassertEquals (( current Configs [ 2 ] Ġas ĠMed ication Logging Title ). title , Ġ" Med 2 Ġ 1 0 0 mg ") ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( current Configs [ 3 ] Ġis ĠMed ication Logging Schedule ) ĊĠĠĠĠĠĠĠ ĠassertEquals (( current Configs [ 3 ] Ġas ĠMed ication Logging Schedule ). config , ĠCONFIG _ 2 ) ĊĠĠĠĠĠĠĠ ĠassertEquals (( current Configs [ 3 ] Ġas ĠMed ication Logging Schedule ). dos age Item , ĠCONFIG _ 2 . dos age Items [ 0 ]) ĊĠĠĠĠĠĠĠ ĠassertFalse (( current Configs [ 3 ] Ġas ĠMed ication Logging Schedule ). is Logged ) ĊĠĠĠ Ġ} Ċ }