11package com.mapbox.navigation.core.trip.service
22
3- import android.util.Log
43import androidx.test.ext.junit.runners.AndroidJUnit4
54import androidx.test.platform.app.InstrumentationRegistry
6- import com.mapbox.api.directions.v5.models.DirectionsRoute
75import com.mapbox.navigation.base.options.NavigationOptions
86import com.mapbox.navigation.base.route.NavigationRoute
97import com.mapbox.navigation.base.route.RouterOrigin
10- import com.mapbox.navigation.base.route.toNavigationRoute
8+ import com.mapbox.navigation.core.MapboxNavigation
119import com.mapbox.navigation.core.MapboxNavigationProvider
1210import com.mapbox.navigation.core.navigator.toFixLocation
1311import com.mapbox.navigation.core.replay.history.ReplayEventUpdateLocation
@@ -34,17 +32,22 @@ import kotlinx.coroutines.runBlocking
3432import org.junit.Assert.assertTrue
3533import org.junit.Test
3634import org.junit.runner.RunWith
35+ import kotlin.coroutines.resume
36+ import kotlin.coroutines.suspendCoroutine
3737
3838@RunWith(AndroidJUnit4 ::class )
3939class ArtificialDriverTest {
4040
4141 @Test
4242 fun testFollowingRoute () = runBlocking<Unit >(Dispatchers .Main ) {
43- getNativeNavigator { nativeNavigator ->
43+ withNavigators { mapboxNavigation, nativeNavigator ->
44+ mapboxNavigation.historyRecorder.startRecording()
4445 val testRoute = getTestRoute()
4546 val replayRouteMapper = ReplayRouteMapper ()
46- val events = replayRouteMapper.mapDirectionsRouteGeometry(testRoute.directionsRoute).filterIsInstance<ReplayEventUpdateLocation >()
47- val setRoutesResult = nativeNavigator.setRoutes(testRoute, reason = SetRoutesReason .NEW_ROUTE )
47+ val events = replayRouteMapper.mapDirectionsRouteGeometry(testRoute.directionsRoute)
48+ .filterIsInstance<ReplayEventUpdateLocation >()
49+ val setRoutesResult =
50+ nativeNavigator.setRoutes(testRoute, reason = SetRoutesReason .NEW_ROUTE )
4851 assertTrue(" result is $setRoutesResult " , setRoutesResult.isValue)
4952 val statusesTracking = async<List <NavigationStatus >> {
5053 nativeNavigator.collectStatuses(untilRouteState = RouteState .COMPLETE )
@@ -56,7 +59,16 @@ class ArtificialDriverTest {
5659 }
5760
5861 val states = statusesTracking.await()
59- assertTrue(states.all { it.routeState == RouteState .TRACKING })
62+ val historyFile = suspendCoroutine<String > { continuation ->
63+ mapboxNavigation.historyRecorder.stopRecording {
64+ continuation.resume(it ? : " null" )
65+ }
66+ }
67+ val notTrackingStates = states.filter { it.routeState != RouteState .TRACKING }
68+ assertTrue(
69+ " not all states are tracking, see history file $historyFile : $notTrackingStates " ,
70+ notTrackingStates.isEmpty()
71+ )
6072 }
6173 }
6274}
@@ -81,7 +93,6 @@ data class OnStatusUpdateParameters(
8193fun MapboxNativeNavigator.statusUpdates (): Flow <OnStatusUpdateParameters > {
8294 return callbackFlow {
8395 val observer = NavigatorObserver { origin, status ->
84- Log .d(" vadzim-debug" , " $origin , $status " )
8596 this .trySend(OnStatusUpdateParameters (origin, status))
8697 }
8798 addNavigatorObserver(observer)
@@ -91,21 +102,23 @@ fun MapboxNativeNavigator.statusUpdates(): Flow<OnStatusUpdateParameters> {
91102 }
92103}
93104
94- private suspend fun getNativeNavigator (block : suspend (MapboxNativeNavigator ) -> Unit ) {
105+ private suspend fun withNavigators (block : suspend (MapboxNavigation , MapboxNativeNavigator ) -> Unit ) {
95106 val context = InstrumentationRegistry .getInstrumentation().targetContext
96107 val mapboxNavigation = MapboxNavigationProvider .create(
97108 NavigationOptions .Builder (context)
98109 .accessToken(context.getString(R .string.mapbox_access_token))
99110 .build()
100111 )
101- block(MapboxNativeNavigatorImpl )
112+ block(mapboxNavigation, MapboxNativeNavigatorImpl )
102113 mapboxNavigation.onDestroy()
103114}
104115
105116private fun getTestRoute (): NavigationRoute {
106117 val context = InstrumentationRegistry .getInstrumentation().targetContext
107- return DirectionsRoute .fromJson(
108- context.resources.openRawResource(R .raw.multileg_route)
109- .readBytes().decodeToString()
110- ).toNavigationRoute(RouterOrigin .Custom ())
118+ return NavigationRoute .create(
119+ directionsResponseJson = context.resources.openRawResource(R .raw.test_long_route)
120+ .readBytes().decodeToString(),
121+ routeRequestUrl = " https://api.mapbox.com/directions/v5/mapbox/driving/11.566744%2C48.143769%3B8.675521%2C50.119087?alternatives=false&geometries=polyline6&language=en&overview=full&steps=true&access_token=YOUR_MAPBOX_ACCESS_TOKEN" ,
122+ routerOrigin = RouterOrigin .Custom ()
123+ ).first()
111124}
0 commit comments