package Ġcom . mapbox . navigation . core . route altern atives Ċ Ċ import Ġcom . mapbox . api . directions . v 5 . models . Directions Route Ċ import Ġcom . mapbox . navigation . base . route . Route Altern atives Options Ċ import Ġcom . mapbox . navigation . base . route . Router Origin Ċ import Ġcom . mapbox . navigation . base . trip . model . Route Progress Ċ import Ġcom . mapbox . navigation . core . directions . session . Directions Session Ċ import Ġcom . mapbox . navigation . core . directions . session . Routes Extra Ċ import Ġcom . mapbox . navigation . core . trip . session . Trip Session Ċ import Ġcom . mapbox . navigation . navigator . internal . Map box Native Navigator Ċ import Ġcom . mapbox . navigation . testing . FileUtils Ċ import Ġcom . mapbox . navigation . testing . Main Coroutine Rule Ċ import Ġcom . mapbox . navigator . Route Altern atives Controller Interface Ċ import Ġio . mock k . every Ċ import Ġio . mock k . just Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . runs Ċ import Ġio . mock k . slot Ċ import Ġio . mock k . verify Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ @ Experimental Cor outines Api Ċ class ĠRoute Altern atives Controller Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġcoroutine Rule Ġ= ĠMain Coroutine Rule () ĊĊĠĠĠ Ġprivate Ġval Ġcontroller Interface : ĠRoute Altern atives Controller Interface Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġnavigator : ĠMap box Native Navigator Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcreate Route Altern atives Controller () Ġ} Ġreturns Ġcontroller Interface ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġdirections Session : ĠDirection s Session Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġtrip Session : ĠTrip Session Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĊĠĠĠ Ġprivate Ġfun Ġroute Altern atives Controller ( ĊĠĠĠĠĠĠĠ Ġoptions : ĠRoute Altern atives Options Ġ= ĠRoute Altern atives Options . Builder (). build () ĊĠĠĠ Ġ) Ġ= ĠRoute Altern atives Controller ( ĊĠĠĠĠĠĠĠ Ġoptions , ĊĠĠĠĠĠĠĠ Ġnavigator , ĊĠĠĠĠĠĠĠ Ġdirections Session , ĊĠĠĠĠĠĠĠ Ġtrip Session , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġset Ġrefresh Interval Seconds Ġfrom Ġoptions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCapture Ġthe Ġroute Ġoptions Ġset ĊĠĠĠĠĠĠĠ Ġval Ġnative Options Ġ= Ġslot < com . mapbox . navigator . Route Altern atives Options >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontroller Interface . set Route Altern atives Options ( capture ( native Options )) Ġ} Ġjust Ġruns ĊĊĠĠĠĠĠĠĠ Ġ// ĠConstruct Ġa Ġnative Ġroute Ġalternatives Ġinterface ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ= ĠRoute Altern atives Options . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. interval Millis ( 5 9 _ 1 3 5 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthe Ġconversion Ġwas Ġaccurate ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 9 . 1 3 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnative Options . captured . refresh Interval Seconds , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 0 1 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġadd Ġa Ġsingle Ġnav - native Ġobserver Ġwhen Ġregistering Ġlisteners `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroute Altern atives Controller Ġ= Ġroute Altern atives Controller () ĊĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . register ( mock k ( relax ed Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . register ( mock k ( relax ed Ġ= Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġcontroller Interface . add Observer ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġcontroller Interface . remove Observer ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġremove Observer Ġfrom Ġnav - native Ġinterface Ġwhen Ġall Ġob servers Ġare Ġremoved `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroute Altern atives Controller Ġ= Ġroute Altern atives Controller () ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Observer : ĠRoute Altern atives Observer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġsecond Observer : ĠRoute Altern atives Observer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . register ( first Observer ) ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . register ( second Observer ) ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . unregister ( first Observer ) ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . unregister ( second Observer ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġcontroller Interface . add Observer ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġcontroller Interface . remove Observer ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġremove All Observer s Ġfrom Ġnav - native Ġinterface Ġwhen Ġunregister All Ġis Ġcalled `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroute Altern atives Controller Ġ= Ġroute Altern atives Controller () ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Observer : ĠRoute Altern atives Observer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġsecond Observer : ĠRoute Altern atives Observer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . register ( first Observer ) ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . register ( second Observer ) ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . unregister All () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġcontroller Interface . add Observer ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġcontroller Interface . removeAll Observer s () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġbroadcast Ġalternative Ġroutes Ġchanges Ġfrom Ġnav - native `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroute Altern atives Controller Ġ= Ġroute Altern atives Controller () ĊĠĠĠĠĠĠĠ Ġval Ġnative Observer Ġ= Ġslot < com . mapbox . navigator . Route Altern atives Observer >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontroller Interface . add Observer ( capture ( native Observer )) Ġ} Ġjust Ġruns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrip Session . get Route Progress () Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Ġ} Ġreturns Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Observer : ĠRoute Altern atives Observer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġsecond Observer : ĠRoute Altern atives Observer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . register ( first Observer ) ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . register ( second Observer ) ĊĠĠĠĠĠĠĠ Ġval Ġalternative Route Json Ġ= ĠFileUtils . load Json Fixture ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" route _ alternative _ from _ native . txt " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġnative Observer . captured . on Route Altern atives Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Ġ} Ġreturns Ġalternative Route Json ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġfirst Observer . on Route Altern atives ( any (), Ġany (), Ġany ()) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġsecond Observer . on Route Altern atives ( any (), Ġany (), Ġany ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġbroadcast Ġcurrent Ġroute Ġwith Ġalternative `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroute Altern atives Controller Ġ= Ġroute Altern atives Controller () ĊĠĠĠĠĠĠĠ Ġval Ġnative Observer Ġ= Ġslot < com . mapbox . navigator . Route Altern atives Observer >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontroller Interface . add Observer ( capture ( native Observer )) Ġ} Ġjust Ġruns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrip Session . get Route Progress () Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Ġ} Ġreturns Ġmock k ( relax ed Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġduration () Ġ} Ġreturns Ġ 2 0 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Observer : ĠRoute Altern atives Observer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . register ( first Observer ) ĊĠĠĠĠĠĠĠ Ġval Ġalternative Route Json Ġ= ĠFileUtils . load Json Fixture ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" route _ alternative _ from _ native . txt " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġnative Observer . captured . on Route Altern atives Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Ġ} Ġreturns Ġalternative Route Json ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġroute Progress Slot Ġ= Ġslot < Route Progress >() ĊĠĠĠĠĠĠĠ Ġval Ġalternatives Slot Ġ= Ġslot < List < Directions Route >>() ĊĠĠĠĠĠĠĠ Ġval Ġrouter Origin Slot Ġ= Ġslot < Router Origin >() ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Observer . on Route Altern atives ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture ( route Progress Slot ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture ( altern atives Slot ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture ( router Origin Slot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 0 . 0 , Ġroute Progress Slot . captured . route . duration (), Ġ 0 . 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 2 1 . 7 9 6 , Ġalternatives Slot . captured [ 0 ]. duration (), Ġ 0 . 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Router Origin . On board , Ġrouter Origin Slot . captured ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġset Ġroute Ġwith Ġthe Ġnew Ġalternatives `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroute Altern atives Controller Ġ= Ġroute Altern atives Controller () ĊĠĠĠĠĠĠĠ Ġval Ġnative Observer Ġ= Ġslot < com . mapbox . navigator . Route Altern atives Observer >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontroller Interface . add Observer ( capture ( native Observer )) Ġ} Ġjust Ġruns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrip Session . get Route Progress () Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Ġ} Ġreturns Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Observer : ĠRoute Altern atives Observer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . register ( first Observer ) ĊĠĠĠĠĠĠĠ Ġval Ġalternative Route Json Ġ= ĠFileUtils . load Json Fixture ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" route _ alternative _ from _ native . txt " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġnative Observer . captured . on Route Altern atives Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Ġ} Ġreturns Ġalternative Route Json ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġroutes Set Capture Ġ= Ġslot < List < Directions Route >>() ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirections Session . set Routes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture ( routes Set Capture ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoutes Extra . ROUT ES _ UPDATE _ REASON _ ALTER NATIVE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġroutes Set Capture . captured . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 2 1 . 7 9 6 , Ġroutes Set Capture . captured [ 1 ]. duration (), Ġ 0 . 0 0 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġset Ġalternative ĠRoute Options Ġto Ġprimary ĠRoute Options `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Coordinates Ġ= Ġ"- 1 2 2 . 2 7 0 3 7 5 , 3 7 . 8 0 1 4 2 9 ;- 1 2 2 . 2 7 1 4 9 6 , Ġ 3 7 . 7 9 9 0 6 3 " ĊĠĠĠĠĠĠĠ Ġval Ġroute Altern atives Controller Ġ= Ġroute Altern atives Controller () ĊĠĠĠĠĠĠĠ Ġval Ġnative Observer Ġ= Ġslot < com . mapbox . navigator . Route Altern atives Observer >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontroller Interface . add Observer ( capture ( native Observer )) Ġ} Ġjust Ġruns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrip Session . get Route Progress () Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Options () Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcoordinates () Ġ} Ġreturns Ġoriginal Coordinates ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġroutes Set Capture Ġ= Ġslot < List < Directions Route >>() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdirections Session . set Routes ( capture ( routes Set Capture ), Ġany (), Ġany ()) Ġ} Ġjust Ġruns ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Observer : ĠRoute Altern atives Observer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġroute Altern atives Controller . register ( first Observer ) ĊĠĠĠĠĠĠĠ Ġval Ġalternative Route Json Ġ= ĠFileUtils . load Json Fixture ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" route _ alternative _ from _ native . txt " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġnative Observer . captured . on Route Altern atives Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroute Ġ} Ġreturns Ġalternative Route Json ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Coordinates , Ġroutes Set Capture . captured [ 0 ]. route Options ()?. coordinates () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Coordinates , Ġroutes Set Capture . captured [ 1 ]. route Options ()?. coordinates () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ