Skip to content

Commit 832640b

Browse files
committed
NAVAND-1073: fix alternative routes refresh
1 parent 1098030 commit 832640b

25 files changed

+6144
-42
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Fixed alternative routes refresh.

instrumentation-tests/src/androidTest/java/com/mapbox/navigation/instrumentation_tests/core/RouteRefreshTest.kt

Lines changed: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import com.mapbox.navigation.instrumentation_tests.utils.coroutines.roadObjectsO
2626
import com.mapbox.navigation.instrumentation_tests.utils.coroutines.routeProgressUpdates
2727
import com.mapbox.navigation.instrumentation_tests.utils.coroutines.routesUpdates
2828
import com.mapbox.navigation.instrumentation_tests.utils.coroutines.sdkTest
29+
import com.mapbox.navigation.instrumentation_tests.utils.coroutines.setNavigationRoutesAndWaitForAlternativesUpdate
2930
import com.mapbox.navigation.instrumentation_tests.utils.coroutines.setNavigationRoutesAndWaitForUpdate
3031
import com.mapbox.navigation.instrumentation_tests.utils.http.FailByRequestMockRequestHandler
3132
import com.mapbox.navigation.instrumentation_tests.utils.http.MockDirectionsRefreshHandler
@@ -34,6 +35,8 @@ import com.mapbox.navigation.instrumentation_tests.utils.http.MockRoutingTileEnd
3435
import com.mapbox.navigation.instrumentation_tests.utils.idling.IdlingPolicyTimeoutRule
3536
import com.mapbox.navigation.instrumentation_tests.utils.location.MockLocationReplayerRule
3637
import com.mapbox.navigation.instrumentation_tests.utils.readRawFileText
38+
import com.mapbox.navigation.instrumentation_tests.utils.routes.RoutesProvider
39+
import com.mapbox.navigation.instrumentation_tests.utils.routes.RoutesProvider.toNavigationRoutes
3740
import com.mapbox.navigation.testing.ui.BaseTest
3841
import com.mapbox.navigation.testing.ui.utils.getMapboxAccessTokenFromResources
3942
import com.mapbox.navigation.testing.ui.utils.runOnMainSync
@@ -424,7 +427,7 @@ class RouteRefreshTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::class.ja
424427
R.raw.route_response_route_refresh,
425428
R.raw.route_response_route_refresh_truncated_first_leg,
426429
"route_response_route_refresh",
427-
acceptedGeometryIndex = 5
430+
acceptedGeometryIndex = 3
428431
)
429432
val routeOptions = generateRouteOptions(twoCoordinates)
430433
val requestedRoutes = mapboxNavigation.requestRoutes(routeOptions)
@@ -433,10 +436,10 @@ class RouteRefreshTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::class.ja
433436

434437
mapboxNavigation.setNavigationRoutes(requestedRoutes)
435438
mapboxNavigation.startTripSession()
436-
// corresponds to currentRouteGeometryIndex = 5
437-
stayOnPosition(38.57622, -121.496731)
439+
// corresponds to currentRouteGeometryIndex = 3
440+
stayOnPosition(38.577344, -121.496248)
438441
mapboxNavigation.routeProgressUpdates()
439-
.filter { it.currentRouteGeometryIndex == 5 }
442+
.filter { it.currentRouteGeometryIndex == 3 }
440443
.first()
441444
val refreshedRoutes = mapboxNavigation.routesUpdates()
442445
.filter {
@@ -446,12 +449,67 @@ class RouteRefreshTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::class.ja
446449
.navigationRoutes
447450

448451
assertEquals(224.224, requestedRoutes[0].getSumOfDurationAnnotationsFromLeg(0), 0.0001)
449-
assertEquals(169.582, refreshedRoutes[0].getSumOfDurationAnnotationsFromLeg(0), 0.0001)
452+
assertEquals(172.175, refreshedRoutes[0].getSumOfDurationAnnotationsFromLeg(0), 0.0001)
450453

451454
assertEquals(227.918, requestedRoutes[1].getSumOfDurationAnnotationsFromLeg(0), 0.0001)
452-
assertEquals(234.024, refreshedRoutes[1].getSumOfDurationAnnotationsFromLeg(0), 0.0001)
455+
assertEquals(235.641, refreshedRoutes[1].getSumOfDurationAnnotationsFromLeg(0), 0.0001)
453456
}
454457

458+
@Test
459+
fun expect_route_refresh_to_update_annotations_for_new_alternative() = sdkTest {
460+
setupMockRequestHandlers(
461+
twoCoordinates,
462+
R.raw.route_response_single_route_multileg,
463+
R.raw.route_response_single_route_multileg_refreshed,
464+
"route_response_single_route_multileg",
465+
acceptedGeometryIndex = 70
466+
)
467+
val routeOptions = generateRouteOptions(twoCoordinates)
468+
val requestedRoutes = mapboxNavigation.requestRoutes(routeOptions)
469+
.getSuccessfulResultOrThrowException()
470+
.routes
471+
val alternativeRoute =
472+
RoutesProvider.alternative_for_multileg(activity).toNavigationRoutes().first()
473+
474+
mapboxNavigation.setNavigationRoutes(requestedRoutes, initialLegIndex = 1)
475+
mapboxNavigation.startTripSession()
476+
477+
// corresponds to currentRouteGeometryIndex = 70 for primary route and 11 for alternative route
478+
stayOnPosition(38.581798, -121.476146)
479+
mapboxNavigation.routeProgressUpdates()
480+
.filter {
481+
it.currentRouteGeometryIndex == 70
482+
}
483+
.first()
484+
485+
mockWebServerRule.requestHandlers.add(
486+
FailByRequestMockRequestHandler(
487+
MockDirectionsRefreshHandler(
488+
"route_response_alternative_for_multileg",
489+
readRawFileText(
490+
activity,
491+
R.raw.route_response_alternative_for_multileg_refreshed
492+
),
493+
acceptedGeometryIndex = 11
494+
)
495+
)
496+
)
497+
mapboxNavigation.setNavigationRoutesAndWaitForAlternativesUpdate(requestedRoutes + alternativeRoute, initialLegIndex = 1)
498+
499+
val refreshedRoutes = mapboxNavigation.routesUpdates()
500+
.filter {
501+
it.reason == ROUTES_UPDATE_REASON_REFRESH
502+
}
503+
.first()
504+
.navigationRoutes
505+
506+
assertEquals(201.673, requestedRoutes[0].getSumOfDurationAnnotationsFromLeg(1), 0.0001)
507+
assertEquals( 202.881, refreshedRoutes[0].getSumOfDurationAnnotationsFromLeg(1), 0.0001)
508+
509+
assertEquals(194.3, alternativeRoute.getSumOfDurationAnnotationsFromLeg(0), 0.0001)
510+
assertEquals(187.126, refreshedRoutes[1].getSumOfDurationAnnotationsFromLeg(0), 0.0001)
511+
}
512+
455513
@Test
456514
fun expect_route_refresh_to_update_annotations_incidents_and_closures_for_truncated_next_leg() =
457515
sdkTest {

instrumentation-tests/src/androidTest/java/com/mapbox/navigation/instrumentation_tests/utils/coroutines/Adapters.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.mapbox.api.directions.v5.models.BannerInstructions
66
import com.mapbox.api.directions.v5.models.RouteOptions
77
import com.mapbox.api.directions.v5.models.VoiceInstructions
88
import com.mapbox.bindgen.Expected
9+
import com.mapbox.bindgen.ExpectedFactory
910
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
1011
import com.mapbox.navigation.base.route.NavigationRoute
1112
import com.mapbox.navigation.base.route.NavigationRouterCallback
@@ -22,6 +23,8 @@ import com.mapbox.navigation.core.directions.session.RoutesUpdatedResult
2223
import com.mapbox.navigation.core.history.MapboxHistoryRecorder
2324
import com.mapbox.navigation.core.preview.RoutesPreviewObserver
2425
import com.mapbox.navigation.core.preview.RoutesPreviewUpdate
26+
import com.mapbox.navigation.core.routealternatives.NavigationRouteAlternativesRequestCallback
27+
import com.mapbox.navigation.core.routealternatives.RouteAlternativesError
2528
import com.mapbox.navigation.core.trip.session.BannerInstructionsObserver
2629
import com.mapbox.navigation.core.trip.session.OffRouteObserver
2730
import com.mapbox.navigation.core.trip.session.RoadObjectsOnRouteObserver

instrumentation-tests/src/androidTest/java/com/mapbox/navigation/instrumentation_tests/utils/coroutines/TestUtils.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,11 @@ suspend fun MapboxNavigation.setNavigationRoutesAndAwaitError(
9393
}
9494

9595
suspend fun MapboxNavigation.setNavigationRoutesAndWaitForAlternativesUpdate(
96-
routes: List<NavigationRoute>
96+
routes: List<NavigationRoute>,
97+
initialLegIndex: Int = 0,
9798
) =
9899
withTimeout(MAX_TIME_TO_UPDATE_ROUTE) {
99-
setNavigationRoutes(routes)
100+
setNavigationRoutes(routes, initialLegIndex)
100101
waitForAlternativeRoute()
101102
}
102103

instrumentation-tests/src/androidTest/java/com/mapbox/navigation/instrumentation_tests/utils/routes/RoutesProvider.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,27 @@ object RoutesProvider {
167167
)
168168
}
169169

170+
fun alternative_for_multileg(context: Context): MockRoute {
171+
val jsonResponse = readRawFileText(context, R.raw.route_response_alternative_for_multileg)
172+
val coordinates = listOf(
173+
Point.fromLngLat(38.577427, -121.478077),
174+
Point.fromLngLat(38.582195, -121.468458)
175+
)
176+
return MockRoute(
177+
jsonResponse,
178+
DirectionsResponse.fromJson(jsonResponse),
179+
listOf(
180+
MockDirectionsRequestHandler(
181+
profile = DirectionsCriteria.PROFILE_DRIVING_TRAFFIC,
182+
jsonResponse = jsonResponse,
183+
expectedCoordinates = coordinates
184+
)
185+
),
186+
coordinates,
187+
emptyList()
188+
)
189+
}
190+
170191
fun MockRoute.toNavigationRoutes(
171192
routeOptionsBlock: RouteOptions.Builder.() -> RouteOptions.Builder = { this }
172193
) : List<NavigationRoute> {

0 commit comments

Comments
 (0)