package Ġcom . team 2 8 . the h iker Ċ Ċ import Ġandroid . location . Location Ċ import Ġandroid . tele phony . Sms Manager Ċ import Ġcom . team 2 8 . the h iker . features . sos message . SMS Wrapper Ċ import Ġcom . team 2 8 . the h iker . features . sos message . S os Message Activity Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito .* Ċ Ċ class ĠSMS Wrapper Test Ġ{ ĊĠĠĠ Ġval ĠUPDATE _ INTERVAL Ġ: ĠLong Ġ= Ġ 5 0 0 ĊĊĠĠĠ Ġval Ġnumbers Ġ= ĠlistOf ("+ 4 3 6 6 4 6 6 4 6 6 4 ", Ġ"+ 4 9 7 8 8 7 7 8 8 ") ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġvar Ġsms Mock Ġ= Ġmock ( Sms Manager :: class . java ) ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġvar Ġactivity Ġ= Ġmock ( S os Message Activity :: class . java ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Start Stop Interval (){ ĊĠĠĠĠĠĠĠ Ġval Ġtest Location Ġ= Ġcreate Test Location ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġ` when `( activity . getString ( R . string . sms _ message _ sos )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn (" S OS !") ĊĊĠĠĠĠĠĠĠ Ġ` when `( activity . getString ( R . string . sms _ message _ em ergency _ over )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn (" E mergency Ġstate Ġis Ġover !") ĊĊĠĠĠĠĠĠĠ Ġval Ġsms Wrapper Ġ= ĠSMS Wrapper ( sms Mock , ĠUPDATE _ INTERVAL , Ġnumbers , Ġactivity ) ĊĊĠĠĠĠĠĠĠ Ġverify ( sms Mock , Ġnever ()). send Text Message ( any String (), Ġany (), Ġany String (), Ġany (), Ġany ()) ĊĊĠĠĠĠĠĠĠ Ġsms Wrapper . notify Location Update ( test Location ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcompare Message Start Ġ= Ġsms Wrapper . get Google Maps Location Message ( true ) ĊĊĠĠĠĠĠĠĠ Ġ// verify Ġonly Ġcalled Ġon Ġlocation Ġchange ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 3 Ġ* ĠUPDATE _ INTERVAL ) ĊĠĠĠĠĠĠĠ Ġverify ( sms Mock , Ġtimes ( 1 )). send Text Message ( eq ( numbers [ 0 ]), Ġany (), Ġeq ( compare Message Start ), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġverify ( sms Mock , Ġtimes ( 1 )). send Text Message ( eq ( numbers [ 1 ]), Ġany (), Ġeq ( compare Message Start ), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġverify ( sms Mock , Ġtimes ( 2 )). send Text Message ( any String (), Ġany (), Ġeq ( compare Message Start ), Ġany (), Ġany ()) ĊĊĠĠĠĠĠĠĠ Ġsms Wrapper . notify Location Update ( create Test Location ( 1 )) ĊĠĠĠĠĠĠĠ Ġcompare Message Start Ġ= Ġsms Wrapper . get Google Maps Location Message ( true ) ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 3 Ġ* ĠUPDATE _ INTERVAL ) ĊĠĠĠĠĠĠĠ Ġverify ( sms Mock , Ġtimes ( 1 )). send Text Message ( eq ( numbers [ 0 ]), Ġany (), Ġeq ( compare Message Start ), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġverify ( sms Mock , Ġtimes ( 1 )). send Text Message ( eq ( numbers [ 1 ]), Ġany (), Ġeq ( compare Message Start ), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġverify ( sms Mock , Ġtimes ( 2 )). send Text Message ( any String (), Ġany (), Ġeq ( compare Message Start ), Ġany (), Ġany ()) ĊĊĠĠĠĠĠĠĠ Ġsms Wrapper . stop () ĊĠĠĠĠĠĠĠ Ġval Ġcompare MessageEnd Ġ= Ġsms Wrapper . get Google Maps Location Message () ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 2 Ġ* ĠUPDATE _ INTERVAL ) ĊĠĠĠĠĠĠĠ Ġverify ( sms Mock , Ġtimes ( 1 )). send Text Message ( eq ( numbers [ 0 ]), Ġany (), Ġeq ( compare MessageEnd ), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġverify ( sms Mock , Ġtimes ( 1 )). send Text Message ( eq ( numbers [ 1 ]), Ġany (), Ġeq ( compare MessageEnd ), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġverify ( sms Mock , Ġtimes ( 2 )). send Text Message ( any String (), Ġany (), Ġeq ( compare MessageEnd ), Ġany (), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Test Location ( offset Ġ: ĠInt ) Ġ: ĠLocation { ĊĠĠĠĠĠĠĠ Ġval Ġtest Location Ġ= Ġmock ( Location :: class . java ) ĊĠĠĠĠĠĠĠ Ġ` when `( test Location . latitude ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( 5 1 . 9 9 0 1 6 1 5 Ġ+ Ġoffset % 3 0 ) ĊĊĠĠĠĠĠĠĠ Ġ` when `( test Location . longitude ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( 2 0 . 7 9 1 1 6 5 4 Ġ+ Ġoffset % 6 0 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtest Location ĊĠĠĠ Ġ} Ċ }