1
1
package com.mapbox.navigation.core.trip.service
2
2
3
- import android.util.Log
4
3
import androidx.test.ext.junit.runners.AndroidJUnit4
5
4
import androidx.test.platform.app.InstrumentationRegistry
6
- import com.mapbox.api.directions.v5.models.DirectionsRoute
7
5
import com.mapbox.navigation.base.options.NavigationOptions
8
6
import com.mapbox.navigation.base.route.NavigationRoute
9
7
import com.mapbox.navigation.base.route.RouterOrigin
10
- import com.mapbox.navigation.base.route.toNavigationRoute
8
+ import com.mapbox.navigation.core.MapboxNavigation
11
9
import com.mapbox.navigation.core.MapboxNavigationProvider
12
10
import com.mapbox.navigation.core.navigator.toFixLocation
13
11
import com.mapbox.navigation.core.replay.history.ReplayEventUpdateLocation
@@ -34,17 +32,22 @@ import kotlinx.coroutines.runBlocking
34
32
import org.junit.Assert.assertTrue
35
33
import org.junit.Test
36
34
import org.junit.runner.RunWith
35
+ import kotlin.coroutines.resume
36
+ import kotlin.coroutines.suspendCoroutine
37
37
38
38
@RunWith(AndroidJUnit4 ::class )
39
39
class ArtificialDriverTest {
40
40
41
41
@Test
42
42
fun testFollowingRoute () = runBlocking<Unit >(Dispatchers .Main ) {
43
- getNativeNavigator { nativeNavigator ->
43
+ withNavigators { mapboxNavigation, nativeNavigator ->
44
+ mapboxNavigation.historyRecorder.startRecording()
44
45
val testRoute = getTestRoute()
45
46
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 )
48
51
assertTrue(" result is $setRoutesResult " , setRoutesResult.isValue)
49
52
val statusesTracking = async<List <NavigationStatus >> {
50
53
nativeNavigator.collectStatuses(untilRouteState = RouteState .COMPLETE )
@@ -56,7 +59,16 @@ class ArtificialDriverTest {
56
59
}
57
60
58
61
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
+ )
60
72
}
61
73
}
62
74
}
@@ -81,7 +93,6 @@ data class OnStatusUpdateParameters(
81
93
fun MapboxNativeNavigator.statusUpdates (): Flow <OnStatusUpdateParameters > {
82
94
return callbackFlow {
83
95
val observer = NavigatorObserver { origin, status ->
84
- Log .d(" vadzim-debug" , " $origin , $status " )
85
96
this .trySend(OnStatusUpdateParameters (origin, status))
86
97
}
87
98
addNavigatorObserver(observer)
@@ -91,21 +102,23 @@ fun MapboxNativeNavigator.statusUpdates(): Flow<OnStatusUpdateParameters> {
91
102
}
92
103
}
93
104
94
- private suspend fun getNativeNavigator (block : suspend (MapboxNativeNavigator ) -> Unit ) {
105
+ private suspend fun withNavigators (block : suspend (MapboxNavigation , MapboxNativeNavigator ) -> Unit ) {
95
106
val context = InstrumentationRegistry .getInstrumentation().targetContext
96
107
val mapboxNavigation = MapboxNavigationProvider .create(
97
108
NavigationOptions .Builder (context)
98
109
.accessToken(context.getString(R .string.mapbox_access_token))
99
110
.build()
100
111
)
101
- block(MapboxNativeNavigatorImpl )
112
+ block(mapboxNavigation, MapboxNativeNavigatorImpl )
102
113
mapboxNavigation.onDestroy()
103
114
}
104
115
105
116
private fun getTestRoute (): NavigationRoute {
106
117
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()
111
124
}
0 commit comments