@@ -9,6 +9,7 @@ import com.mapbox.api.directions.v5.models.DirectionsResponse
9
9
import com.mapbox.api.directions.v5.models.Incident
10
10
import com.mapbox.api.directions.v5.models.RouteOptions
11
11
import com.mapbox.geojson.Point
12
+ import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
12
13
import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions
13
14
import com.mapbox.navigation.base.options.NavigationOptions
14
15
import com.mapbox.navigation.base.options.RoutingTilesOptions
@@ -59,6 +60,7 @@ import java.net.URI
59
60
import java.util.concurrent.TimeUnit
60
61
import kotlin.math.absoluteValue
61
62
63
+ @OptIn(ExperimentalPreviewMapboxNavigationAPI ::class )
62
64
class RouteRefreshTest : BaseTest <EmptyTestActivity >(EmptyTestActivity : :class.java) {
63
65
64
66
@get:Rule
@@ -528,6 +530,73 @@ class RouteRefreshTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::class.ja
528
530
assertEquals(187.126 , refreshedRoutes[1 ].getSumOfDurationAnnotationsFromLeg(0 ), 0.0001 )
529
531
}
530
532
533
+ @Test
534
+ fun route_refresh_updates_annotations_for_new_alternative_with_more_legs () =
535
+ sdkTest {
536
+ setupMockRequestHandlers(
537
+ multilegCoordinates,
538
+ R .raw.route_response_single_route_multileg,
539
+ R .raw.route_response_single_route_multileg_refreshed,
540
+ " route_response_single_route_multileg" ,
541
+ acceptedGeometryIndex = 70
542
+ )
543
+ mockWebServerRule.requestHandlers.add(
544
+ FailByRequestMockRequestHandler (
545
+ MockDirectionsRefreshHandler (
546
+ " route_response_single_route_multileg_alternative" ,
547
+ readRawFileText(
548
+ activity,
549
+ R .raw.route_response_single_route_multileg_alternative_refreshed
550
+ ),
551
+ acceptedGeometryIndex = 11
552
+ )
553
+ )
554
+ )
555
+ val routeOptions = generateRouteOptions(multilegCoordinates)
556
+ val alternativeRoutes = mapboxNavigation.requestRoutes(routeOptions)
557
+ .getSuccessfulResultOrThrowException()
558
+ .routes
559
+ // alternative which was requested on the second leg of the original route,
560
+ // so the alternative has only one leg while the original route has two
561
+ val primaryRoute = alternativeForMultileg(activity).toNavigationRoutes().first()
562
+
563
+ // corresponds to currentRouteGeometryIndex = 70 for alternative route and 11 for the primary route
564
+ mockLocationUpdatesRule.pushLocationUpdate(
565
+ mockLocationUpdatesRule.generateLocationUpdate {
566
+ latitude = 38.581798
567
+ longitude = - 121.476146
568
+ }
569
+ )
570
+
571
+ mapboxNavigation.setNavigationRoutes(listOf (primaryRoute) + alternativeRoutes, initialLegIndex = 0 )
572
+ mapboxNavigation.startTripSession()
573
+
574
+ mapboxNavigation.routeProgressUpdates()
575
+ .filter {
576
+ it.currentRouteGeometryIndex == 11
577
+ }
578
+ .first()
579
+
580
+ val refreshedRoutes = mapboxNavigation.routesUpdates()
581
+ .filter {
582
+ it.reason == ROUTES_UPDATE_REASON_REFRESH
583
+ }
584
+ .first()
585
+ .navigationRoutes
586
+
587
+ assertEquals(
588
+ alternativeRoutes[0 ].getSumOfDurationAnnotationsFromLeg(0 ),
589
+ refreshedRoutes[1 ].getSumOfDurationAnnotationsFromLeg(0 ),
590
+ 0.0001
591
+ )
592
+
593
+ assertEquals(201.673 , alternativeRoutes[0 ].getSumOfDurationAnnotationsFromLeg(1 ), 0.0001 )
594
+ assertEquals(202.881 , refreshedRoutes[1 ].getSumOfDurationAnnotationsFromLeg(1 ), 0.0001 )
595
+
596
+ assertEquals(194.3 , primaryRoute.getSumOfDurationAnnotationsFromLeg(0 ), 0.0001 )
597
+ assertEquals(187.126 , refreshedRoutes[0 ].getSumOfDurationAnnotationsFromLeg(0 ), 0.0001 )
598
+ }
599
+
531
600
@Test
532
601
fun expect_route_refresh_to_update_annotations_incidents_and_closures_for_truncated_next_leg () =
533
602
sdkTest {
0 commit comments