package Ġcom . mapbox . navigation . core . trip . session Ċ Ċ import Ġandroid . location . Location Ċ import Ġandroid . os . Looper Ċ import Ġcom . mapbox . android . core . location . Location Engine Ċ import Ġcom . mapbox . android . core . location . Location Engine Callback Ċ import Ġcom . mapbox . android . core . location . Location Engine Request Ċ import Ġcom . mapbox . android . core . location . Location Engine Result Ċ import Ġcom . mapbox . api . directions . v 5 . models . Banner Instructions Ċ import Ġcom . mapbox . api . directions . v 5 . models . Directions Route Ċ import Ġcom . mapbox . api . directions . v 5 . models . Voice Instructions Ċ import Ġcom . mapbox . navigation . base . trip . model . Route Progress Ċ import Ġcom . mapbox . navigation . core . trip . service . Trip Service Ċ import Ġcom . mapbox . navigation . navigator . Map box Native Navigator Ċ import Ġcom . mapbox . navigation . navigator . Trip Status Ċ import Ġcom . mapbox . navigation . testing . Main Coroutine Rule Ċ import Ġcom . mapbox . navigation . utils . thread . Job Control Ċ import Ġcom . mapbox . navigation . utils . thread . Thread Controller Ċ import Ġcom . mapbox . navigator . Navigation Status Ċ import Ġio . mock k . clear Mocks Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . co Verify Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . mock k Object Ċ import Ġio . mock k . slot Ċ import Ġio . mock k . un mock k Object Ċ import Ġio . mock k . verify Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . Internal Cor outines Api Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġkotlinx . coroutines . cancel And Join Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ import Ġorg . ro bo lectric . annotation . Config Ċ Ċ @ Internal Cor outines Api Ċ @ Experimental Cor outines Api Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ @ Config ( manifest Ġ= ĠConfig . NONE ) Ċ class ĠMap box Trip Session Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġcoroutine Rule Ġ= ĠMain Coroutine Rule () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtrip Session : ĠMap box Trip Session ĊĊĠĠĠ Ġprivate Ġval Ġtrip Service : ĠTrip Service Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġlocation Engine : ĠLocation Engine Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġlocation Engine Request : ĠLocation Engine Request Ġ= Ġmock k () ĊĠĠĠ Ġprivate Ġval Ġroute : ĠDirection s Route Ġ= Ġmock k () ĊĊĠĠĠ Ġprivate Ġval Ġlocation Callback Slot Ġ= Ġslot < Location Engine Callback < Location Engine Result >>() ĊĠĠĠ Ġprivate Ġval Ġlocation Engine Result : ĠLocation Engine Result Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġlocation : ĠLocation Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġenhanced Location : ĠLocation Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġkey Points : ĠList < Location > Ġ= ĠlistOf ( mock k ( relax Unit Fun Ġ= Ġtrue )) ĊĊĠĠĠ Ġprivate Ġval Ġnavigator : ĠMap box Native Navigator Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġnavigation Status : ĠNavigation Status Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġtrip Status : ĠTrip Status Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠ Ġprivate Ġval Ġroute Progress : ĠRoute Progress Ġ= Ġmock k () ĊĠĠĠ Ġprivate Ġval Ġnavigator Polling Delay Ġ= Ġ 1 5 0 0 L ĊĊĠĠĠ Ġprivate Ġval Ġparent Job Ġ= ĠSuper visor Job () ĊĠĠĠ Ġprivate Ġval Ġtest Scope Ġ= ĠCor outine Scope ( parent Job Ġ+ Ġcoroutine Rule . test Dispatcher ) ĊĊĠĠĠ Ġprivate Ġval Ġstate Observer : ĠTrip Session State Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock k Object ( Thread Controller ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Controller . IO Dispatcher Ġ} Ġreturns Ġcoroutine Rule . test Dispatcher ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Controller . get IO Scope And Root Job () Ġ} Ġreturns ĠJob Control ( parent Job , Ġtest Scope ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Controller . get Main Scope And Root Job () Ġ} Ġreturns ĠJob Control ( parent Job , Ġtest Scope ) ĊĊĠĠĠĠĠĠĠ Ġtrip Session Ġ= ĠMap box Trip Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Polling Delay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġnavigator . getStatus ( any ()) Ġ} Ġreturns Ġtrip Status ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnavigator . update Location ( any ()) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġnavigator . set Route ( any ()) Ġ} Ġreturns Ġnavigation Status ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrip Status . en hanced Location Ġ} Ġreturns Ġenhanced Location ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrip Status . key Points Ġ} Ġreturns Ġkey Points ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrip Status . off Route Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Progress . banner Instructions () Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Progress . voice Instructions () Ġ} Ġreturns Ġnull ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine . request Location Updates ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture ( location Callback Slot ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{} ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġlocation Engine Result . locations Ġ} Ġreturns ĠlistOf ( location ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrip Status . route Progress Ġ} Ġreturns Ġroute Progress ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstart Session () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġtrip Service . start Service () Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine . request Location Updates ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL ooper . get Main Looper () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstop Session () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġlocation Callback Slot . captured . on Success ( location Engine Result ) ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġtrip Service . stop Service () Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġlocation Engine . remove Location Updates ( location Callback Slot . captured ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstop Session DoesNot Clear Up Route () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . route Ġ= Ġroute ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( route , Ġtrip Session . route ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlocation Observer Success () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : ĠLocation Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtrip Session . register Location Observer ( observer ) ĊĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġobserver . on Raw Location Changed ( location ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( location , Ġtrip Session . getRaw Location ()) ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlocation Observer Immediate () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : ĠLocation Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĊĠĠĠĠĠĠĠ Ġtrip Session . register Location Observer ( observer ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġobserver . on Raw Location Changed ( location ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġunregister Location Observer () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : ĠLocation Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtrip Session . register Location Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . unregister Location Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġobserver . on Raw Location Changed ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlocation Push () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġnavigator . update Location ( location ) Ġ} ĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġroute Progress Observer Success () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session Ġ= ĠMap box Trip Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Polling Delay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread Controller ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : ĠRoute Progress Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtrip Session . register Route Progress Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġobserver . on Route Progress Changed ( route Progress ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( route Progress , Ġtrip Session . get Route Progress ()) ĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġroute Progress Observer Immediate () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session Ġ= ĠMap box Trip Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Polling Delay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread Controller ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : ĠRoute Progress Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtrip Session . register Route Progress Observer ( observer ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġobserver . on Route Progress Changed ( route Progress ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( route Progress , Ġtrip Session . get Route Progress ()) ĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġroute Progress Observer Unregister () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session Ġ= ĠMap box Trip Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Polling Delay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread Controller ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : ĠRoute Progress Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtrip Session . register Route Progress Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . unregister Route Progress Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġobserver . on Route Progress Changed ( route Progress ) Ġ} ĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġroute Progress Observer Double Register () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session Ġ= ĠMap box Trip Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Polling Delay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread Controller ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : ĠRoute Progress Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtrip Session . register Route Progress Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĠĠĠĠĠĠĠ Ġtrip Session . unregister Route Progress Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . register Route Progress Observer ( observer ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 2 ) Ġ{ Ġobserver . on Route Progress Changed ( route Progress ) Ġ} ĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġenhanced Location Observer Success () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session Ġ= ĠMap box Trip Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Polling Delay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread Controller ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : ĠLocation Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtrip Session . register Location Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġobserver . on Enhanced Location Changed ( en hanced Location , Ġkey Points ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( en hanced Location , Ġtrip Session . get Enhanced Location ()) ĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġenhanced Location Observer Immediate () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session Ġ= ĠMap box Trip Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Polling Delay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread Controller ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : ĠLocation Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtrip Session . register Location Observer ( observer ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġobserver . on Enhanced Location Changed ( en hanced Location , Ġempty List ()) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( en hanced Location , Ġtrip Session . get Enhanced Location ()) ĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġenhanced Location Observer Unregister () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session Ġ= ĠMap box Trip Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Polling Delay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread Controller ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : ĠLocation Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtrip Session . register Location Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . unregister Location Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġobserver . on Enhanced Location Changed ( en hanced Location , Ġkey Points ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Trip Service () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( trip Service , Ġtrip Session . trip Service ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Location Engine () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( location Engine , Ġtrip Session . location Engine ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Route () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . route Ġ= Ġroute ĊĠĠĠĠĠĠĠ ĠassertEquals ( route , Ġtrip Session . route ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġset Route () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . route Ġ= Ġroute ĊĊĠĠĠĠĠĠĠ Ġco Verify Ġ{ Ġnavigator . set Route ( route ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġset Route _ nullable () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . route Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġco Verify Ġ{ Ġnavigator . set Route ( null ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstate Observer Immediate Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . register State Observer ( state Observer ) ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġstate Observer . on Session StateChanged ( Trip Session State . STOP PED ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstate Observer Immediate Start () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġtrip Session . register State Observer ( state Observer ) ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġstate Observer . on Session StateChanged ( Trip Session State . STARTED ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstate Observer Start () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . register State Observer ( state Observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġstate Observer . on Session StateChanged ( Trip Session State . STARTED ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstate Observer Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġtrip Session . register State Observer ( state Observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġstate Observer . on Session StateChanged ( Trip Session State . STOP PED ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstate Observer Double Start () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . register State Observer ( state Observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġstate Observer . on Session StateChanged ( Trip Session State . STARTED ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstate Observer Double Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġtrip Session . register State Observer ( state Observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġstate Observer . on Session StateChanged ( Trip Session State . STOP PED ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstate Observer Unregister () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . register State Observer ( state Observer ) ĊĠĠĠĠĠĠĠ Ġclear Mocks ( state Observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . unregister State Observer ( state Observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġstate Observer . on Session StateChanged ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġunregister All Location Observer s () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Progress . banner Instructions () Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Progress . voice Instructions () Ġ} Ġreturns Ġnull ĊĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : ĠLocation Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtrip Session . register Location Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . unregister All Location Observer s () ĊĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġobserver . on Raw Location Changed ( location ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( location , Ġtrip Session . getRaw Location ()) ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġunregister All Route Progress Observer s () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session Ġ= ĠMap box Trip Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Polling Delay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread Controller ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġval Ġroute Progress Observer : ĠRoute Progress Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtrip Session . register Route Progress Observer ( route Progress Observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . unregister All Route Progress Observer s () ĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġroute Progress Observer . on Route Progress Changed ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġunregister All Off Route Observer s () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session Ġ= ĠMap box Trip Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Polling Delay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread Controller ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġval Ġoff Route Observer : ĠOff Route Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtrip Session . register Off Route Observer ( off Route Observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . unregister All Off Route Observer s () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrip Status . off Route Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĊĠĠĠĠĠĠĠ Ġ// Ġregister Off Route Observer Ġwill Ġcall Ġon Off Route StateChanged () Ġon ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġoff Route Observer Ġso Ġthat Ġaccounts Ġfor Ġthe Ġverify Ġ 1 Ġtime ĊĠĠĠĠĠĠĠ Ġ// Ġbelow . ĠHowever Ġthere Ġshouldn 't Ġbe Ġany Ġadditional Ġcalls Ġwhen ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġlocation Callback . on Success () Ġis Ġcalled Ġbecause Ġthe Ġcollection ĊĠĠĠĠĠĠĠ Ġ// Ġof Ġoff Route Observer s Ġshould Ġbe Ġempty . ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġoff Route Observer . on Off Route StateChanged ( false ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġunregister All State Observer s () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġtrip Session . register State Observer ( state Observer ) ĊĠĠĠĠĠĠĠ Ġclear Mocks ( state Observer ) ĊĠĠĠĠĠĠĠ Ġtrip Session . unregister All State Observer s () ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġstate Observer . on Session StateChanged ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġunregister All Banner Instructions Observer s () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbanner Instructions Observer : ĠBanner Instructions Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġbanner Instructions : ĠBanner Instructions Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Progress . banner Instructions () Ġ} Ġreturns Ġbanner Instructions ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Progress . voice Instructions () Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrip Status . off Route Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠ Ġtrip Session Ġ= ĠMap box Trip Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Polling Delay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread Controller ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġtrip Session . register Banner Instructions Observer ( banner Instructions Observer ) ĊĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġtrip Session . unregister All Banner Instructions Observer s () ĊĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġbanner Instructions Observer . on New Banner Instructions ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġunregister All Voice Instructions Observer s () Ġ= Ġcoroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvoice Instructions Observer : ĠVoice Instructions Observer Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġvoice Instructions : ĠVoice Instructions Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Progress . banner Instructions () Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Progress . voice Instructions () Ġ} Ġreturns Ġvoice Instructions ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrip Status . off Route Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠ Ġtrip Session Ġ= ĠMap box Trip Session ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrip Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Engine Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Polling Delay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread Controller ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġtrip Session . register Voice Instructions Observer ( voice Instructions Observer ) ĊĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĊĠĠĠĠĠĠĠ Ġtrip Session . start () ĊĠĠĠĠĠĠĠ Ġtrip Session . unregister All Voice Instructions Observer s () ĊĊĠĠĠĠĠĠĠ Ġupdate Location And Join () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġvoice Instructions Observer . on New Voice Instructions ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġtrip Session . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġclean Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġun mock k Object ( Thread Controller ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupdate Location And Join () Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation Callback Slot . captured . on Success ( location Engine Result ) ĊĠĠĠĠĠĠĠ Ġparent Job . cancel And Join () ĊĠĠĠ Ġ} Ċ } Ċ