@@ -230,4 +230,59 @@ UNIT_TEST(TestFollowRouteFlagPersistence)
230
230
TEST (rebuildTimedSignal.WaitUntil (time ), (" Route was not built." ));
231
231
TEST (session.IsFollowing (), ());
232
232
}
233
+
234
+ UNIT_TEST (TestFollowRoutePercentTest)
235
+ {
236
+ Index index ;
237
+ RoutingSession session;
238
+ session.Init (nullptr , nullptr );
239
+ vector<m2::PointD> routePoints = kTestRoute ;
240
+ Route masterRoute (" dummy" , routePoints.begin (), routePoints.end ());
241
+ size_t counter = 0 ;
242
+ unique_ptr<DummyRouter> router = make_unique<DummyRouter>(masterRoute, DummyRouter::NoError, counter);
243
+ session.SetRouter (move (router), nullptr );
244
+
245
+ // Get completion percent of unexisted route.
246
+ TEST_EQUAL (session.GetCompletionPercent (), 0 , ());
247
+ // Go along the route.
248
+ TimedSignal alongTimedSignal;
249
+ session.BuildRoute (kTestRoute .front (), kTestRoute .back (),
250
+ [&alongTimedSignal](Route const &, IRouter::ResultCode)
251
+ {
252
+ alongTimedSignal.Signal ();
253
+ },
254
+ nullptr , 0 );
255
+ // Manual check of the routeBuilded mutex to avoid spurious results.
256
+ auto time = steady_clock::now () + kRouteBuildingMaxDuration ;
257
+ TEST (alongTimedSignal.WaitUntil (time ), (" Route was not built." ));
258
+
259
+ // Get completion percent of unstarted route.
260
+ TEST_EQUAL (session.GetCompletionPercent (), 0 , ());
261
+
262
+ location::GpsInfo info;
263
+ info.m_horizontalAccuracy = 0.01 ;
264
+ info.m_verticalAccuracy = 0.01 ;
265
+
266
+ // Go through the route.
267
+ info.m_longitude = 0 .;
268
+ info.m_latitude = 1 .;
269
+ session.OnLocationPositionChanged (info, index );
270
+ TEST (my::AlmostEqualAbs (session.GetCompletionPercent (), 0 ., 0.5 ), ());
271
+
272
+ info.m_longitude = 0 .;
273
+ info.m_latitude = 2 .;
274
+ session.OnLocationPositionChanged (info, index );
275
+ TEST (my::AlmostEqualAbs (session.GetCompletionPercent (), 33.3 , 0.5 ), ());
276
+
277
+
278
+ info.m_longitude = 0 .;
279
+ info.m_latitude = 3 .;
280
+ session.OnLocationPositionChanged (info, index );
281
+ TEST (my::AlmostEqualAbs (session.GetCompletionPercent (), 66.6 , 0.5 ), ());
282
+
283
+ info.m_longitude = 0 .;
284
+ info.m_latitude = 3.99 ;
285
+ session.OnLocationPositionChanged (info, index );
286
+ TEST (my::AlmostEqualAbs (session.GetCompletionPercent (), 100 ., 0.5 ), ());
287
+ }
233
288
} // namespace routing
0 commit comments