/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 2 ĠNew ĠVector ĠLtd Ċ Ġ* Ċ Ġ* Ġ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 Ġim . vector . app . features . location Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . location . Location Ċ import Ġandroid . location . Location Manager Ċ import Ġim . vector . app . core . utils . De bounc er Ċ import Ġim . vector . app . core . utils . create Background Handler Ċ import Ġim . vector . app . test . f akes . Fake Context Ċ import Ġim . vector . app . test . f akes . Fake Handler Ċ import Ġim . vector . app . test . f akes . Fake Location Manager Ċ import Ġio . mock k . every Ċ import Ġio . mock k . just Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . mock k Constructor Ċ import Ġio . mock k . mock k Static Ċ import Ġio . mock k . runs Ċ import Ġio . mock k . slot Ċ import Ġio . mock k . un mock k All Ċ import Ġio . mock k . verify Ċ import Ġio . mock k . verify Order Ċ import Ġorg . am sh ove . k lu ent . shouldBe EqualTo Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ private Ġconst Ġval ĠA _ LAT IT UDE Ġ= Ġ 1 . 2 Ċ private Ġconst Ġval ĠA _ LONG IT UDE Ġ= Ġ 4 4 . 0 Ċ private Ġconst Ġval ĠAN _ AC CUR ACY Ġ= Ġ 5 . 0 f Ċ Ċ class ĠLocation Tracker Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġfake Handler Ġ= ĠFake Handler () ĊĠĠĠ Ġprivate Ġval Ġfake Location Manager Ġ= ĠFake Location Manager () ĊĠĠĠ Ġprivate Ġval Ġfake Context Ġ= ĠFake Context (). also Ġ{ ĊĠĠĠĠĠĠĠ Ġit . given Service ( Context . LOCATION _ SERVICE , Ġandroid . location . Location Manager :: class . java , Ġfake Location Manager . instance ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocation Tracker : ĠLocation Tracker ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock k Constructor ( De bounc er :: class ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġany Construct ed < De bounc er >(). cancel All () Ġ} Ġjust Ġruns ĊĠĠĠĠĠĠĠ Ġval Ġrunnable Ġ= Ġslot < Runnable >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġany Construct ed < De bounc er >(). de bounce ( any (), ĠMIN _ TIME _ TO _ UPDATE _ LOCATION _ M ILL IS , Ġcapture ( run nable )) Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrunnable . captured . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmock k Static (" im . vector . app . core . utils . Handler Kt ") ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcreate Background Handler ( any ()) Ġ} Ġreturns Ġfake Handler . instance ĊĠĠĠĠĠĠĠ Ġlocation Tracker Ġ= ĠLocation Tracker ( fake Context . instance ) ĊĠĠĠĠĠĠĠ Ġfake Location Manager . given Remove Updates ( location Tracker ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġun mock k All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` given Ġavailable Ġlist Ġof Ġproviders Ġwhen Ġstarting Ġthen Ġlocation Ġupdates Ġare Ġrequested Ġin Ġpriority Ġorder `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproviders Ġ= ĠlistOf ( Location Manager . GPS _ PROVIDER , ĠLocation Manager . F USED _ PROVIDER , ĠLocation Manager . NETWORK _ PROVIDER ) ĊĠĠĠĠĠĠĠ Ġmock Available Providers ( providers ) ĊĊĠĠĠĠĠĠĠ Ġlocation Tracker . start () ĊĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfake Location Manager . instance . request Location Updates ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocation Manager . F USED _ PROVIDER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIN _ TIME _ TO _ UPDATE _ LOCATION _ M ILL IS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIN _ DISTANCE _ TO _ UPDATE _ LOCATION _ METER S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Tracker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfake Location Manager . instance . request Location Updates ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocation Manager . GPS _ PROVIDER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIN _ TIME _ TO _ UPDATE _ LOCATION _ M ILL IS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIN _ DISTANCE _ TO _ UPDATE _ LOCATION _ METER S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Tracker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfake Location Manager . instance . request Location Updates ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocation Manager . NETWORK _ PROVIDER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIN _ TIME _ TO _ UPDATE _ LOCATION _ M ILL IS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIN _ DISTANCE _ TO _ UPDATE _ LOCATION _ METER S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Tracker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` given Ġavailable Ġlist Ġof Ġproviders Ġwhen Ġlist Ġis Ġempty Ġthen Ġcallbacks Ġare Ġnotified `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproviders Ġ= Ġempty List < String >() ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġmock Callback () ĊĊĠĠĠĠĠĠĠ Ġlocation Tracker . add Callback ( callback ) ĊĠĠĠĠĠĠĠ Ġfake Location Manager . given Active Providers ( providers ) ĊĊĠĠĠĠĠĠĠ Ġlocation Tracker . start () ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcallback . on No Location Provider Available () Ġ} ĊĠĠĠĠĠĠĠ Ġlocation Tracker . remove Callback ( callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġadding Ġor Ġremoving Ġa Ġcallback Ġthen Ġit Ġis Ġadded Ġinto Ġor Ġremoved Ġfrom Ġthe Ġlist Ġof Ġcallbacks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcallback 1 Ġ= Ġmock Callback () ĊĠĠĠĠĠĠĠ Ġval Ġcallback 2 Ġ= Ġmock Callback () ĊĊĠĠĠĠĠĠĠ Ġlocation Tracker . add Callback ( callback 1 ) ĊĠĠĠĠĠĠĠ Ġlocation Tracker . add Callback ( callback 2 ) ĊĊĠĠĠĠĠĠĠ Ġlocation Tracker . callbacks . size ĠshouldBe EqualTo Ġ 2 ĊĠĠĠĠĠĠĠ Ġlocation Tracker . callbacks . first () ĠshouldBe EqualTo Ġcallback 1 ĊĠĠĠĠĠĠĠ Ġlocation Tracker . callbacks [ 1 ] ĠshouldBe EqualTo Ġcallback 2 ĊĊĠĠĠĠĠĠĠ Ġlocation Tracker . remove Callback ( callback 1 ) ĊĊĠĠĠĠĠĠĠ Ġlocation Tracker . callbacks . size ĠshouldBe EqualTo Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġlocation Tracker . remove Callback ( callback 2 ) ĊĊĠĠĠĠĠĠĠ Ġlocation Tracker . callbacks . size ĠshouldBe EqualTo Ġ 0 ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġlocation Tracker . stop () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġlocation Ġupdates Ġare Ġreceived Ġfrom Ġf used Ġprovider Ġthen Ġf used Ġlocations Ġare Ġtaken Ġin Ġpriority `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproviders Ġ= ĠlistOf ( Location Manager . GPS _ PROVIDER , ĠLocation Manager . F USED _ PROVIDER , ĠLocation Manager . NETWORK _ PROVIDER ) ĊĠĠĠĠĠĠĠ Ġmock Available Providers ( providers ) ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġmock Callback () ĊĠĠĠĠĠĠĠ Ġlocation Tracker . add Callback ( callback ) ĊĠĠĠĠĠĠĠ Ġlocation Tracker . start () ĊĊĠĠĠĠĠĠĠ Ġval Ġf used Location Ġ= Ġmock Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Ġ= ĠLocation Manager . F USED _ PROVIDER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= Ġ 3 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccuracy Ġ= Ġ 4 f ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġgps Location Ġ= Ġmock Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Ġ= ĠLocation Manager . GPS _ PROVIDER ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnetwork Location Ġ= Ġmock Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Ġ= ĠLocation Manager . NETWORK _ PROVIDER ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlocation Tracker . on Location Changed ( f used Location ) ĊĠĠĠĠĠĠĠ Ġlocation Tracker . on Location Changed ( gps Location ) ĊĠĠĠĠĠĠĠ Ġlocation Tracker . on Location Changed ( network Location ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Location Data Ġ= ĠLocation Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= Ġ 3 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuncertainty Ġ= Ġ 4 . 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcallback . on Location Update ( expected Location Data ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġany Construct ed < De bounc er >(). de bounce ( any (), ĠMIN _ TIME _ TO _ UPDATE _ LOCATION _ M ILL IS , Ġany ()) Ġ} ĊĠĠĠĠĠĠĠ Ġlocation Tracker . has Location From F used Provider ĠshouldBe EqualTo Ġtrue ĊĠĠĠĠĠĠĠ Ġlocation Tracker . has Location From GPS Provider ĠshouldBe EqualTo Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġlocation Ġupdates Ġare Ġreceived Ġfrom Ġgps Ġprovider Ġthen Ġgps Ġlocations Ġare Ġtaken Ġif Ġnone Ġare Ġreceived Ġfrom Ġf used Ġprovider `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproviders Ġ= ĠlistOf ( Location Manager . GPS _ PROVIDER , ĠLocation Manager . F USED _ PROVIDER , ĠLocation Manager . NETWORK _ PROVIDER ) ĊĠĠĠĠĠĠĠ Ġmock Available Providers ( providers ) ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġmock Callback () ĊĠĠĠĠĠĠĠ Ġlocation Tracker . add Callback ( callback ) ĊĠĠĠĠĠĠĠ Ġlocation Tracker . start () ĊĊĠĠĠĠĠĠĠ Ġval Ġgps Location Ġ= Ġmock Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Ġ= ĠLocation Manager . GPS _ PROVIDER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= Ġ 3 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccuracy Ġ= Ġ 4 f ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnetwork Location Ġ= Ġmock Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Ġ= ĠLocation Manager . NETWORK _ PROVIDER ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlocation Tracker . on Location Changed ( gps Location ) ĊĠĠĠĠĠĠĠ Ġlocation Tracker . on Location Changed ( network Location ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Location Data Ġ= ĠLocation Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= Ġ 3 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuncertainty Ġ= Ġ 4 . 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcallback . on Location Update ( expected Location Data ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġany Construct ed < De bounc er >(). de bounce ( any (), ĠMIN _ TIME _ TO _ UPDATE _ LOCATION _ M ILL IS , Ġany ()) Ġ} ĊĠĠĠĠĠĠĠ Ġlocation Tracker . has Location From F used Provider ĠshouldBe EqualTo Ġfalse ĊĠĠĠĠĠĠĠ Ġlocation Tracker . has Location From GPS Provider ĠshouldBe EqualTo Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġlocation Ġupdates Ġare Ġreceived Ġfrom Ġnetwork Ġprovider Ġthen Ġnetwork Ġlocations Ġare Ġtaken Ġif Ġnone Ġare Ġreceived Ġfrom Ġf used Ġor Ġgps Ġprovider `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproviders Ġ= ĠlistOf ( Location Manager . GPS _ PROVIDER , ĠLocation Manager . F USED _ PROVIDER , ĠLocation Manager . NETWORK _ PROVIDER ) ĊĠĠĠĠĠĠĠ Ġmock Available Providers ( providers ) ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġmock Callback () ĊĠĠĠĠĠĠĠ Ġlocation Tracker . add Callback ( callback ) ĊĠĠĠĠĠĠĠ Ġlocation Tracker . start () ĊĊĠĠĠĠĠĠĠ Ġval Ġnetwork Location Ġ= Ġmock Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Ġ= ĠLocation Manager . NETWORK _ PROVIDER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= Ġ 3 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccuracy Ġ= Ġ 4 f ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlocation Tracker . on Location Changed ( network Location ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Location Data Ġ= ĠLocation Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= Ġ 3 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuncertainty Ġ= Ġ 4 . 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcallback . on Location Update ( expected Location Data ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġany Construct ed < De bounc er >(). de bounce ( any (), ĠMIN _ TIME _ TO _ UPDATE _ LOCATION _ M ILL IS , Ġany ()) Ġ} ĊĠĠĠĠĠĠĠ Ġlocation Tracker . has Location From F used Provider ĠshouldBe EqualTo Ġfalse ĊĠĠĠĠĠĠĠ Ġlocation Tracker . has Location From GPS Provider ĠshouldBe EqualTo Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġrequesting Ġthe Ġlast Ġlocation Ġthen Ġlast Ġlocation Ġis Ġnotified Ġvia Ġcallback `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproviders Ġ= ĠlistOf ( Location Manager . GPS _ PROVIDER ) ĊĠĠĠĠĠĠĠ Ġfake Location Manager . given Active Providers ( providers ) ĊĠĠĠĠĠĠĠ Ġval Ġlast Location Ġ= Ġmock Location ( provider Ġ= ĠLocation Manager . GPS _ PROVIDER ) ĊĠĠĠĠĠĠĠ Ġfake Location Manager . given Last Location For Provider ( provider Ġ= ĠLocation Manager . GPS _ PROVIDER , Ġlocation Ġ= Ġlast Location ) ĊĠĠĠĠĠĠĠ Ġfake Location Manager . given Request Updates For Provider ( provider Ġ= ĠLocation Manager . GPS _ PROVIDER , Ġlistener Ġ= Ġlocation Tracker ) ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġmock Callback () ĊĠĠĠĠĠĠĠ Ġlocation Tracker . add Callback ( callback ) ĊĠĠĠĠĠĠĠ Ġlocation Tracker . start () ĊĊĠĠĠĠĠĠĠ Ġlocation Tracker . request Last Known Location () ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Location Data Ġ= ĠLocation Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= ĠA _ LAT IT UDE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= ĠA _ LONG IT UDE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuncertainty Ġ= ĠAN _ AC CUR ACY . toDouble () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcallback . on Location Update ( expected Location Data ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġstopping Ġthen Ġlocation Ġupdates Ġare Ġstopped Ġand Ġcallbacks Ġare Ġcleared `() Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation Tracker . stop () ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġfake Location Manager . instance . remove Updates ( location Tracker ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġany Construct ed < De bounc er >(). cancel All () Ġ} ĊĠĠĠĠĠĠĠ Ġlocation Tracker . callbacks . isEmpty () ĠshouldBe EqualTo Ġtrue ĊĠĠĠĠĠĠĠ Ġlocation Tracker . has Location From GPS Provider ĠshouldBe EqualTo Ġfalse ĊĠĠĠĠĠĠĠ Ġlocation Tracker . has Location From F used Provider ĠshouldBe EqualTo Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmock Available Providers ( providers : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfake Location Manager . given Active Providers ( providers ) ĊĠĠĠĠĠĠĠ Ġproviders . forEach Ġ{ Ġprovider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfake Location Manager . given Last Location For Provider ( provider Ġ= Ġprovider , Ġlocation Ġ= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfake Location Manager . given Request Updates For Provider ( provider Ġ= Ġprovider , Ġlistener Ġ= Ġlocation Tracker ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmock Callback (): ĠLocation Tracker . Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmock k < Location Tracker . Callback >(). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġit . on No Location Provider Available () Ġ} Ġjust Ġruns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġit . on Location Update ( any ()) Ġ} Ġjust Ġruns ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmock Location ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovider : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude : ĠDouble Ġ= ĠA _ LAT IT UDE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude : ĠDouble Ġ= ĠA _ LONG IT UDE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccuracy : ĠFloat Ġ= ĠAN _ AC CUR ACY ĊĠĠĠ Ġ): ĠLocation Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmock k < Location >(). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġit . time Ġ} Ġreturns Ġ 1 2 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġit . latitude Ġ} Ġreturns Ġlatitude ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġit . longitude Ġ} Ġreturns Ġlongitude ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġit . accuracy Ġ} Ġreturns Ġaccuracy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġit . provider Ġ} Ġreturns Ġprovider ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ