11package com.mapbox.navigation.instrumentation_tests.core
22
33import android.location.Location
4- import com.mapbox.api.directions.v5.DirectionsCriteria
5- import com.mapbox.api.directions.v5.models.RouteOptions
64import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
75import com.mapbox.navigation.base.options.NavigationOptions
86import com.mapbox.navigation.base.route.NavigationRoute
9- import com.mapbox.navigation.base.route.RouterOrigin
7+ import com.mapbox.navigation.base.trip.model.RouteProgressState
108import com.mapbox.navigation.core.MapboxNavigation
119import com.mapbox.navigation.core.MapboxNavigationProvider
12- import com.mapbox.navigation.core.RoutesSetError
1310import com.mapbox.navigation.core.directions.session.RoutesExtra
1411import com.mapbox.navigation.core.directions.session.RoutesUpdatedResult
1512import com.mapbox.navigation.core.preview.RoutesPreviewUpdate
1613import com.mapbox.navigation.core.preview.RoutesPreviewUpdateReasons
1714import com.mapbox.navigation.instrumentation_tests.activity.EmptyTestActivity
1815import com.mapbox.navigation.instrumentation_tests.utils.MapboxNavigationRule
16+ import com.mapbox.navigation.instrumentation_tests.utils.coroutines.routeProgressUpdates
1917import com.mapbox.navigation.instrumentation_tests.utils.coroutines.routesPreviewUpdates
2018import com.mapbox.navigation.instrumentation_tests.utils.coroutines.routesUpdates
2119import com.mapbox.navigation.instrumentation_tests.utils.coroutines.sdkTest
22- import com.mapbox.navigation.instrumentation_tests.utils.coroutines.setNavigationRoutesAsync
2320import com.mapbox.navigation.instrumentation_tests.utils.routes.RoutesProvider
2421import com.mapbox.navigation.instrumentation_tests.utils.routes.RoutesProvider.toNavigationRoutes
2522import com.mapbox.navigation.testing.ui.BaseTest
2623import com.mapbox.navigation.testing.ui.utils.getMapboxAccessTokenFromResources
2724import com.mapbox.navigation.testing.ui.utils.runOnMainSync
28- import kotlinx.coroutines.delay
2925import kotlinx.coroutines.flow.first
30- import org.junit.Assert
3126import org.junit.Assert.assertEquals
32- import org.junit.Assert.assertNotNull
3327import org.junit.Assert.assertNull
34- import org.junit.Assert.assertTrue
3528import org.junit.Before
3629import org.junit.Rule
3730import org.junit.Test
38- import java.util.concurrent.TimeUnit
39- import kotlin.coroutines.resume
40- import kotlin.coroutines.suspendCoroutine
4131
4232@OptIn(ExperimentalPreviewMapboxNavigationAPI ::class )
43- class RoutesPreivewTest : BaseTest <EmptyTestActivity >(EmptyTestActivity : :class.java) {
33+ class RoutesPreviewTest : BaseTest <EmptyTestActivity >(EmptyTestActivity : :class.java) {
4434
4535 override fun setupMockLocation (): Location = mockLocationUpdatesRule.generateLocationUpdate {
4636 latitude = 38.894721
@@ -89,6 +79,8 @@ class RoutesPreivewTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::class.j
8979 mapboxNavigation.setRoutesPreview(emptyList())
9080 mapboxNavigation.routesUpdates()
9181 .first { it.reason == RoutesExtra .ROUTES_UPDATE_REASON_NEW }
82+ mapboxNavigation.routeProgressUpdates().
83+ first { it.currentState == RouteProgressState .TRACKING }
9284 assertEquals(RoutesPreviewUpdateReasons .PREVIEW_CLEAN_UP , currentRoutesPreview?.reason)
9385 assertNull(currentRoutesPreview!! .routesPreview)
9486 assertEquals(RoutesExtra .ROUTES_UPDATE_REASON_NEW , currentRoutes!! .reason)
@@ -102,4 +94,46 @@ class RoutesPreivewTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::class.j
10294 assertEquals(RoutesExtra .ROUTES_UPDATE_REASON_CLEAN_UP , currentRoutes!! .reason)
10395 assertEquals(emptyList<NavigationRoute >(), currentRoutes!! .navigationRoutes)
10496 }
97+
98+ @Test
99+ fun route_preview_in_parallel_to_active_guidance () = sdkTest {
100+ var currentRoutesPreview: RoutesPreviewUpdate ? = null
101+ mapboxNavigation.registerRoutesPreviewObserver { update ->
102+ currentRoutesPreview = update
103+ }
104+ var currentRoutes: RoutesUpdatedResult ? = null
105+ mapboxNavigation.registerRoutesObserver { update ->
106+ currentRoutes = update
107+ }
108+ // initial free drive
109+ mapboxNavigation.startTripSession()
110+ assertNull(currentRoutesPreview)
111+ assertNull(currentRoutes)
112+ // set routes preview
113+ val initialRoutes = RoutesProvider .dc_very_short(activity).toNavigationRoutes()
114+ mapboxNavigation.setRoutesPreview(initialRoutes)
115+ mapboxNavigation.routesPreviewUpdates()
116+ .first { it.reason == RoutesPreviewUpdateReasons .PREVIEW_NEW }
117+ // start active guidance
118+ mapboxNavigation.setNavigationRoutes(currentRoutesPreview!! .routesPreview!! .routesList)
119+ mapboxNavigation.setRoutesPreview(emptyList())
120+ mapboxNavigation.routeProgressUpdates()
121+ .first { it.currentState == RouteProgressState .TRACKING }
122+ // preview a different route not leaving action guidance
123+ val updatedRoutes = RoutesProvider .dc_very_short_two_legs(activity).toNavigationRoutes()
124+ mapboxNavigation.setRoutesPreview(updatedRoutes)
125+ mapboxNavigation.routesPreviewUpdates()
126+ .first { it.routesPreview?.routesList == updatedRoutes }
127+ assertEquals(
128+ " active guidance should track initial routes" ,
129+ initialRoutes,
130+ currentRoutes?.navigationRoutes
131+ )
132+ // user decided to switch to previewed routes
133+ mapboxNavigation.setNavigationRoutes(currentRoutesPreview!! .routesPreview!! .routesList)
134+ mapboxNavigation.setRoutesPreview(emptyList())
135+ mapboxNavigation.routeProgressUpdates().first {
136+ it.navigationRoute == updatedRoutes[0 ]
137+ }
138+ }
105139}
0 commit comments