From df7ba7fbee2a83e41c874c138c49c1cbdc05225d Mon Sep 17 00:00:00 2001 From: Daria Volvenkova Date: Wed, 28 Aug 2019 22:07:07 +0300 Subject: [PATCH] [bookmarks] Add tracks block to sorted results. --- .../maps/bookmarks/data/BookmarkManager.cpp | 12 +- .../maps/bookmarks/BookmarksListFragment.java | 4 +- .../maps/bookmarks/data/BookmarkManager.java | 14 +- iphone/Maps/Bookmarks/BookmarksVC.mm | 2 +- map/bookmark_manager.cpp | 103 ++++++++++++--- map/bookmark_manager.hpp | 37 +++++- map/map_tests/bookmarks_test.cpp | 125 ++++++++++++++---- 7 files changed, 228 insertions(+), 69 deletions(-) diff --git a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp index d975d3f025..61047c9623 100644 --- a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp +++ b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp @@ -436,9 +436,9 @@ void OnUploadFinished(JNIEnv * env, BookmarkCatalog::UploadResult uploadResult, jni::HandleJavaException(env); } -void OnBookmarksSortingResults(JNIEnv * env, long long timestamp, - BookmarkManager::SortedBlocksCollection && sortedBlocks, - BookmarkManager::SortParams::Status status) +void OnCategorySortingResults(JNIEnv * env, long long timestamp, + BookmarkManager::SortedBlocksCollection && sortedBlocks, + BookmarkManager::SortParams::Status status) { ASSERT(g_bookmarkManagerClass, ()); ASSERT(g_sortedBlockClass, ()); @@ -1166,7 +1166,7 @@ Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeGetAvailableSortin } JNIEXPORT void JNICALL -Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeGetSortedBookmarks(JNIEnv *env, +Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeGetSortedCategory(JNIEnv *env, jobject, jlong catId, jint sortingType, jboolean hasMyPosition, jdouble lat, jdouble lon, jlong timestamp) { @@ -1177,8 +1177,8 @@ Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeGetSortedBookmarks sortParams.m_hasMyPosition = static_cast(hasMyPosition); sortParams.m_myPosition = MercatorBounds::FromLatLon(static_cast(lat), static_cast(lon)); - sortParams.m_onResults = bind(&OnBookmarksSortingResults, env, timestamp, _1, _2); + sortParams.m_onResults = bind(&OnCategorySortingResults, env, timestamp, _1, _2); - bm.GetSortedBookmarks(sortParams); + bm.GetSortedCategory(sortParams); } } // extern "C" diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java index 67bfab09eb..6b673ec88b 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java @@ -370,8 +370,8 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment const & sortedTracks, + SortedBlocksCollection & sortedBlocks) const +{ + if (!sortedTracks.empty()) + { + SortedBlock tracksBlock; + tracksBlock.m_blockName = GetTracksSortedBlockName(); + tracksBlock.m_trackIds.reserve(sortedTracks.size()); + for (auto const & track : sortedTracks) + tracksBlock.m_trackIds.push_back(track.m_id); + sortedBlocks.emplace_back(std::move(tracksBlock)); + } +} + +void BookmarkManager::SortTracksByTime(std::vector & tracks) const +{ + bool hasTimestamp = false; + for (auto const & track : tracks) + { + if (!kml::IsEqual(track.m_timestamp, kml::Timestamp())) + { + hasTimestamp = true; + break; + } + } + + if (!hasTimestamp) + return; + + std::sort(tracks.begin(), tracks.end(), + [](SortTrackData const & lbm, SortTrackData const & rbm) + { + return lbm.m_timestamp > rbm.m_timestamp; + }); +} + void BookmarkManager::SortByDistance(std::vector const & bookmarksForSort, + std::vector const & tracksForSort, m2::PointD const & myPosition, SortedBlocksCollection & sortedBlocks) { CHECK(m_regionAddressGetter != nullptr, ()); + AddTracksSortedBlock(tracksForSort, sortedBlocks); + std::vector> sortedMarks; sortedMarks.reserve(bookmarksForSort.size()); for (auto const & mark : bookmarksForSort) @@ -1105,8 +1150,13 @@ void BookmarkManager::SortByDistance(std::vector const & bookm } void BookmarkManager::SortByTime(std::vector const & bookmarksForSort, + std::vector const & tracksForSort, SortedBlocksCollection & sortedBlocks) const { + std::vector sortedTracks = tracksForSort; + SortTracksByTime(sortedTracks); + AddTracksSortedBlock(sortedTracks, sortedBlocks); + std::vector sortedMarks; sortedMarks.reserve(bookmarksForSort.size()); for (auto const & mark : bookmarksForSort) @@ -1143,12 +1193,16 @@ void BookmarkManager::SortByTime(std::vector const & bookmarks lastBlockType.reset(currentBlockType); currentBlock.m_markIds.push_back(mark->m_id); } - sortedBlocks.push_back(currentBlock); + if (!currentBlock.m_markIds.empty()) + sortedBlocks.push_back(currentBlock); } void BookmarkManager::SortByType(std::vector const & bookmarksForSort, + std::vector const & tracksForSort, SortedBlocksCollection & sortedBlocks) const { + AddTracksSortedBlock(tracksForSort, sortedBlocks); + std::vector sortedMarks; sortedMarks.reserve(bookmarksForSort.size()); for (auto const & mark : bookmarksForSort) @@ -1188,18 +1242,23 @@ void BookmarkManager::SortByType(std::vector const & bookmarks std::pair const & r){ return l.second > r.second; }); std::map blockIndices; - sortedBlocks.resize(sortedTypes.size() + (othersTypeMarksCount > 0 ? 1 : 0)); + sortedBlocks.reserve(sortedBlocks.size() + sortedTypes.size() + (othersTypeMarksCount > 0 ? 1 : 0)); for (size_t i = 0; i < sortedTypes.size(); ++i) { auto const type = sortedTypes[i].first; - sortedBlocks[i].m_blockName = GetLocalizedBookmarkBaseType(type); - sortedBlocks[i].m_markIds.reserve(sortedTypes[i].second); - blockIndices[type] = i; + SortedBlock typeBlock; + typeBlock.m_blockName = GetLocalizedBookmarkBaseType(type); + typeBlock.m_markIds.reserve(sortedTypes[i].second); + blockIndices[type] = sortedBlocks.size(); + sortedBlocks.emplace_back(std::move(typeBlock)); } + if (othersTypeMarksCount > 0) { - sortedBlocks.back().m_blockName = GetOthersSortedBlockName(); - sortedBlocks.back().m_markIds.reserve(othersTypeMarksCount); + SortedBlock othersBlock; + othersBlock.m_blockName = GetOthersSortedBlockName(); + othersBlock.m_markIds.reserve(othersTypeMarksCount); + sortedBlocks.emplace_back(std::move(othersBlock)); } for (auto mark : sortedMarks) @@ -1217,27 +1276,28 @@ void BookmarkManager::SortByType(std::vector const & bookmarks } } -void BookmarkManager::GetSortedBookmarksImpl(SortParams const & params, - std::vector const & bookmarksForSort, - SortedBlocksCollection & sortedBlocks) +void BookmarkManager::GetSortedCategoryImpl(SortParams const & params, + std::vector const & bookmarksForSort, + std::vector const & tracksForSort, + SortedBlocksCollection & sortedBlocks) { switch (params.m_sortingType) { case SortingType::ByDistance: CHECK(params.m_hasMyPosition, ()); - SortByDistance(bookmarksForSort, params.m_myPosition, sortedBlocks); + SortByDistance(bookmarksForSort, tracksForSort, params.m_myPosition, sortedBlocks); return; case SortingType::ByTime: - SortByTime(bookmarksForSort, sortedBlocks); + SortByTime(bookmarksForSort, tracksForSort, sortedBlocks); return; case SortingType::ByType: - SortByType(bookmarksForSort, sortedBlocks); + SortByType(bookmarksForSort, tracksForSort, sortedBlocks); return; } UNREACHABLE(); } -void BookmarkManager::GetSortedBookmarks(SortParams const & params) +void BookmarkManager::GetSortedCategory(SortParams const & params) { CHECK_THREAD_CHECKER(m_threadChecker, ()); CHECK(params.m_onResults != nullptr, ()); @@ -1253,6 +1313,14 @@ void BookmarkManager::GetSortedBookmarks(SortParams const & params) bookmarksForSort.emplace_back(bm->GetData(), bm->GetAddress()); } + std::vector tracksForSort; + tracksForSort.reserve(group->GetUserLines().size()); + for (auto trackId : group->GetUserLines()) + { + auto const * track = GetTrack(trackId); + tracksForSort.emplace_back(track->GetData()); + } + if (m_testModeEnabled) { // Sort bookmarks synchronously. @@ -1267,13 +1335,14 @@ void BookmarkManager::GetSortedBookmarks(SortParams const & params) PrepareBookmarksAddresses(bookmarksForSort, newAddresses); SortedBlocksCollection sortedBlocks; - GetSortedBookmarksImpl(params, bookmarksForSort, sortedBlocks); + GetSortedCategoryImpl(params, bookmarksForSort, tracksForSort, sortedBlocks); params.m_onResults(std::move(sortedBlocks), SortParams::Status::Completed); return; } GetPlatform().RunTask(Platform::Thread::File, - [this, params, bookmarksForSort = std::move(bookmarksForSort)]() mutable + [this, params, bookmarksForSort = std::move(bookmarksForSort), + tracksForSort = std::move(tracksForSort)]() mutable { std::unique_lock lock(m_regionAddressMutex); if (m_regionAddressGetter == nullptr) @@ -1290,7 +1359,7 @@ void BookmarkManager::GetSortedBookmarks(SortParams const & params) PrepareBookmarksAddresses(bookmarksForSort, newAddresses); SortedBlocksCollection sortedBlocks; - GetSortedBookmarksImpl(params, bookmarksForSort, sortedBlocks); + GetSortedCategoryImpl(params, bookmarksForSort, tracksForSort, sortedBlocks); GetPlatform().RunTask(Platform::Thread::Gui, [this, params, newAddresses = std::move(newAddresses), diff --git a/map/bookmark_manager.hpp b/map/bookmark_manager.hpp index de44f89552..c886956840 100644 --- a/map/bookmark_manager.hpp +++ b/map/bookmark_manager.hpp @@ -234,7 +234,7 @@ public: std::vector GetAvailableSortingTypes(kml::MarkGroupId groupId, bool hasMyPosition) const; - void GetSortedBookmarks(SortParams const & params); + void GetSortedCategory(SortParams const & params); bool GetLastSortingType(kml::MarkGroupId groupId, SortingType & sortingType) const; void SetLastSortingType(kml::MarkGroupId groupId, SortingType sortingType); @@ -416,6 +416,7 @@ public: static std::string GenerateValidAndUniqueFilePathForKMB(std::string const & fileName); static std::string GetActualBookmarksDirectory(); static bool IsMigrated(); + static std::string GetTracksSortedBlockName(); static std::string GetOthersSortedBlockName(); static std::string GetNearMeSortedBlockName(); enum class SortedByTimeBlockType : uint32_t @@ -645,18 +646,40 @@ private: search::ReverseGeocoder::RegionAddress m_address; }; - void GetSortedBookmarksImpl(SortParams const & params, std::vector const & bookmarksForSort, - SortedBlocksCollection & sortedBlocks); + struct SortTrackData + { + SortTrackData() = default; + SortTrackData(kml::TrackData const & trackData) + : m_id(trackData.m_id) + , m_timestamp(trackData.m_timestamp) + {} - void SortByDistance(std::vector const & bookmarksForSort, m2::PointD const & myPosition, - SortedBlocksCollection & sortedBlocks); - void SortByTime(std::vector const & bookmarksForSort, SortedBlocksCollection & sortedBlocks) const; - void SortByType(std::vector const & bookmarksForSort, SortedBlocksCollection & sortedBlocks) const; + kml::TrackId m_id; + kml::Timestamp m_timestamp; + }; + + void GetSortedCategoryImpl(SortParams const & params, + std::vector const & bookmarksForSort, + std::vector const & tracksForSort, + SortedBlocksCollection & sortedBlocks); + + void SortByDistance(std::vector const & bookmarksForSort, + std::vector const & tracksForSort, + m2::PointD const & myPosition, SortedBlocksCollection & sortedBlocks); + void SortByTime(std::vector const & bookmarksForSort, + std::vector const & tracksForSort, + SortedBlocksCollection & sortedBlocks) const; + void SortByType(std::vector const & bookmarksForSort, + std::vector const & tracksForSort, + SortedBlocksCollection & sortedBlocks) const; using AddressesCollection = std::vector>; void PrepareBookmarksAddresses(std::vector & bookmarksForSort, AddressesCollection & newAddresses); void FilterInvalidData(SortedBlocksCollection & sortedBlocks, AddressesCollection & newAddresses) const; void SetBookmarksAddresses(AddressesCollection const & addresses); + void AddTracksSortedBlock(std::vector const & sortedTracks, + SortedBlocksCollection & sortedBlocks) const; + void SortTracksByTime(std::vector & tracks) const; std::vector GetAllPaidCategoriesIds() const; diff --git a/map/map_tests/bookmarks_test.cpp b/map/map_tests/bookmarks_test.cpp index c3bfaba7df..113d1d41f3 100644 --- a/map/map_tests/bookmarks_test.cpp +++ b/map/map_tests/bookmarks_test.cpp @@ -628,6 +628,12 @@ UNIT_TEST(Bookmarks_Sorting) std::vector m_types; }; + struct TestTrackData + { + kml::TrackId m_trackId; + std::chrono::hours m_hoursSinceCreation; + }; + auto const kMoscowCenter = MercatorBounds::FromLatLon(55.750441, 37.6175138); auto const addrMoscow = fm.GetBookmarkManager().GetLocalizedRegionAddress(kMoscowCenter); @@ -635,7 +641,7 @@ UNIT_TEST(Bookmarks_Sorting) double constexpr kNearR = 20 * 1000; m2::PointD const myPos = MercatorBounds::GetSmPoint(kMoscowCenter, -kNearR, 0.0); - std::vector testData = { + std::vector testMarksData = { {0, MercatorBounds::GetSmPoint(myPos, kNearR * 0.07, 0.0), kDay + std::chrono::hours(1), {"historic-ruins"}}, {1, MercatorBounds::GetSmPoint(myPos, kNearR * 0.06, 0.0), kUnknownTime, {"amenity-restaurant", "cuisine-sushi"}}, {2, MercatorBounds::GetSmPoint(myPos, kNearR * 0.05, 0.0), kUnknownTime, {"shop-music", "shop-gift"}}, @@ -651,23 +657,32 @@ UNIT_TEST(Bookmarks_Sorting) {12, MercatorBounds::GetSmPoint(myPos, kNearR * 1.04, 0.0), kDay + std::chrono::hours(2), {"shop-music"}}, }; + std::vector testTracksData = { + {0, kDay + std::chrono::hours(1)}, + {1, kUnknownTime}, + {2, kMonth + std::chrono::hours(1)} + }; + BookmarkManager::SortedBlocksCollection expectedSortedByDistance = { - {BookmarkManager::GetNearMeSortedBlockName(), {8, 6, 4, 2, 1, 0}}, - {addrMoscow, {3, 5, 10, 12, 7, 9}}, - {BookmarkManager::GetOthersSortedBlockName(), {11}}}; + {BookmarkManager::GetTracksSortedBlockName(), {}, {0, 1, 2}}, + {BookmarkManager::GetNearMeSortedBlockName(), {8, 6, 4, 2, 1, 0}, {}}, + {addrMoscow, {3, 5, 10, 12, 7, 9}, {}}, + {BookmarkManager::GetOthersSortedBlockName(), {11}, {}}}; BookmarkManager::SortedBlocksCollection expectedSortedByTime = { - {BookmarkManager::GetSortedByTimeBlockName(BookmarkManager::SortedByTimeBlockType::WeekAgo), {8, 0, 12, 9}}, - {BookmarkManager::GetSortedByTimeBlockName(BookmarkManager::SortedByTimeBlockType::MonthAgo), {11, 3, 4}}, - {BookmarkManager::GetSortedByTimeBlockName(BookmarkManager::SortedByTimeBlockType::MoreThanMonthAgo), {5, 6}}, - {BookmarkManager::GetSortedByTimeBlockName(BookmarkManager::SortedByTimeBlockType::MoreThanYearAgo), {10}}, - {BookmarkManager::GetSortedByTimeBlockName(BookmarkManager::SortedByTimeBlockType::Others), {7, 2, 1}}}; + {BookmarkManager::GetTracksSortedBlockName(), {}, {0, 2, 1}}, + {BookmarkManager::GetSortedByTimeBlockName(BookmarkManager::SortedByTimeBlockType::WeekAgo), {8, 0, 12, 9}, {}}, + {BookmarkManager::GetSortedByTimeBlockName(BookmarkManager::SortedByTimeBlockType::MonthAgo), {11, 3, 4}, {}}, + {BookmarkManager::GetSortedByTimeBlockName(BookmarkManager::SortedByTimeBlockType::MoreThanMonthAgo), {5, 6}, {}}, + {BookmarkManager::GetSortedByTimeBlockName(BookmarkManager::SortedByTimeBlockType::MoreThanYearAgo), {10}, {}}, + {BookmarkManager::GetSortedByTimeBlockName(BookmarkManager::SortedByTimeBlockType::Others), {7, 2, 1}, {}}}; BookmarkManager::SortedBlocksCollection expectedSortedByType = { - {GetLocalizedBookmarkBaseType(BookmarkBaseType::Sights), {0, 3, 5, 10}}, - {GetLocalizedBookmarkBaseType(BookmarkBaseType::Food), {9, 4, 1}}, - {GetLocalizedBookmarkBaseType(BookmarkBaseType::Shop), {12, 6, 2}}, - {BookmarkManager::GetOthersSortedBlockName(), {8, 11, 7}}}; + {BookmarkManager::GetTracksSortedBlockName(), {}, {0, 1, 2}}, + {GetLocalizedBookmarkBaseType(BookmarkBaseType::Sights), {0, 3, 5, 10}, {}}, + {GetLocalizedBookmarkBaseType(BookmarkBaseType::Food), {9, 4, 1}, {}}, + {GetLocalizedBookmarkBaseType(BookmarkBaseType::Shop), {12, 6, 2}, {}}, + {BookmarkManager::GetOthersSortedBlockName(), {8, 11, 7}, {}}}; auto const kBerlin1 = MercatorBounds::FromLatLon(52.5038994, 13.3982282); auto const kBerlin2 = MercatorBounds::FromLatLon(52.5007139, 13.4005403); @@ -683,7 +698,7 @@ UNIT_TEST(Bookmarks_Sorting) auto const kVladimir = MercatorBounds::FromLatLon(56.2102137, 40.5195297); auto const kBermuda = MercatorBounds::FromLatLon(32.2946391, -64.7820014); - std::vector testData2 = { + std::vector testMarksData2 = { {100, kBerlin1, kUnknownTime, {"amenity", "building", "wheelchair-yes", "tourism-museum"}}, {101, kGreenland, kUnknownTime, {}}, {102, kVladimir, kUnknownTime, {"tourism-artwork"}}, @@ -720,12 +735,12 @@ UNIT_TEST(Bookmarks_Sorting) {addrBermuda, {111}}}; BookmarkManager::SortedBlocksCollection expectedSortedByType2 = { - {GetLocalizedBookmarkBaseType(BookmarkBaseType::Food), {111, 109, 107, 103}}, - {GetLocalizedBookmarkBaseType(BookmarkBaseType::Museum), {110, 106, 100}}, - {GetLocalizedBookmarkBaseType(BookmarkBaseType::ReligiousPlace), {108, 105, 104}}, - {BookmarkManager::GetOthersSortedBlockName(), {112, 102, 101}}}; + {GetLocalizedBookmarkBaseType(BookmarkBaseType::Food), {111, 109, 107, 103}, {}}, + {GetLocalizedBookmarkBaseType(BookmarkBaseType::Museum), {110, 106, 100}, {}}, + {GetLocalizedBookmarkBaseType(BookmarkBaseType::ReligiousPlace), {108, 105, 104}, {}}, + {BookmarkManager::GetOthersSortedBlockName(), {112, 102, 101}, {}}}; - std::vector testData3 = { + std::vector testMarksData3 = { {200, {0.0, 0.0}, kUnknownTime, {"tourism-museum"}}, {201, {0.0, 0.0}, kUnknownTime, {"leisure-park"}}, {202, {0.0, 0.0}, kUnknownTime, {"tourism-artwork"}}, @@ -734,7 +749,7 @@ UNIT_TEST(Bookmarks_Sorting) {205, {0.0, 0.0}, kUnknownTime, {"amenity-place_of_worship-christian"}}, }; - std::vector testData4 = { + std::vector testMarksData4 = { {300, {0.0, 0.0}, kUnknownTime, {"tourism-museum"}}, {301, {0.0, 0.0}, kUnknownTime, {"leisure-park"}}, {302, {0.0, 0.0}, kUnknownTime, {"tourism-artwork"}}, @@ -745,12 +760,30 @@ UNIT_TEST(Bookmarks_Sorting) BookmarkManager::SortedBlocksCollection expectedSortedByType4 = { {GetLocalizedBookmarkBaseType(BookmarkBaseType::Hotel), {305}}, - {BookmarkManager::GetOthersSortedBlockName(), {304, 303, 302, 301, 300}}}; + {BookmarkManager::GetOthersSortedBlockName(), {304, 303, 302, 301, 300}, {}}}; - auto const fillCategory = [&](kml::MarkGroupId cat, std::vector const & data) + std::vector testTracksData5 = { + {40, kUnknownTime}, + {41, kUnknownTime}, + {42, std::chrono::hours(1)}, + {43, kUnknownTime} + }; + + BookmarkManager::SortedBlocksCollection expectedSortedByTime5 = { + {BookmarkManager::GetTracksSortedBlockName(), {}, {42, 40, 41, 43}}}; + + std::vector testTracksData6 = { + {50, kUnknownTime}, + {51, kUnknownTime}, + {52, kUnknownTime} + }; + + auto const fillCategory = [&](kml::MarkGroupId cat, + std::vector const & marksData, + std::vector const & tracksData) { auto es = bmManager.GetEditSession(); - for (auto const & testMarkData : data) + for (auto const & testMarkData : marksData) { kml::BookmarkData bmData; bmData.m_id = testMarkData.m_markId; @@ -761,6 +794,16 @@ UNIT_TEST(Bookmarks_Sorting) auto const * bm = es.CreateBookmark(std::move(bmData)); es.AttachBookmark(bm->GetId(), cat); } + for (auto const & testTrackData : tracksData) + { + kml::TrackData trackData; + trackData.m_id = testTrackData.m_trackId; + trackData.m_points = {{0.0, 0.0}, {1.0, 0.0}}; + if (testTrackData.m_hoursSinceCreation != kUnknownTime) + trackData.m_timestamp = currentTime - testTrackData.m_hoursSinceCreation; + auto const * track = es.CreateTrack(std::move(trackData)); + es.AttachTrack(track->GetId(), cat); + } }; auto const printBlocks = [](std::string const & name, BookmarkManager::SortedBlocksCollection const & blocks) @@ -771,8 +814,10 @@ UNIT_TEST(Bookmarks_Sorting) for (auto const & block : blocks) { LOG(LINFO, ("========== ", block.m_blockName)); + for (auto const trackId : block.m_trackIds) + LOG(LINFO, (" track", trackId)); for (auto const markId : block.m_markIds) - LOG(LINFO, (" ", markId)); + LOG(LINFO, (" bookmark", markId)); } */ }; @@ -791,13 +836,13 @@ UNIT_TEST(Bookmarks_Sorting) { sortedBlocks = std::move(results); }; - bmManager.GetSortedBookmarks(params); + bmManager.GetSortedCategory(params); return sortedBlocks; }; { kml::MarkGroupId catId = bmManager.CreateBookmarkCategory("test", false); - fillCategory(catId, testData); + fillCategory(catId, testMarksData, testTracksData); std::vector expectedSortingTypes = { BookmarkManager::SortingType::ByType, @@ -823,7 +868,7 @@ UNIT_TEST(Bookmarks_Sorting) { kml::MarkGroupId catId2 = bmManager.CreateBookmarkCategory("test2", false); - fillCategory(catId2, testData2); + fillCategory(catId2, testMarksData2, {} /* tracksData */); std::vector expectedSortingTypes2 = { BookmarkManager::SortingType::ByType, @@ -850,7 +895,7 @@ UNIT_TEST(Bookmarks_Sorting) { kml::MarkGroupId catId3 = bmManager.CreateBookmarkCategory("test3", false); - fillCategory(catId3, testData3); + fillCategory(catId3, testMarksData3, {} /* tracksData */); std::vector expectedSortingTypes3 = {}; auto const sortingTypes3 = bmManager.GetAvailableSortingTypes(catId3, false); @@ -859,7 +904,7 @@ UNIT_TEST(Bookmarks_Sorting) { kml::MarkGroupId catId4 = bmManager.CreateBookmarkCategory("test4", false); - fillCategory(catId4, testData4); + fillCategory(catId4, testMarksData4, {} /* tracksData */); std::vector expectedSortingTypes4 = { BookmarkManager::SortingType::ByType }; auto const sortingTypes4 = bmManager.GetAvailableSortingTypes(catId4, false); @@ -869,6 +914,28 @@ UNIT_TEST(Bookmarks_Sorting) printBlocks("Sorted by type 4", sortedByType4); TEST(sortedByType4 == expectedSortedByType4, ()); } + + { + kml::MarkGroupId catId5 = bmManager.CreateBookmarkCategory("test5", false); + fillCategory(catId5, {} /* marksData */, testTracksData5); + std::vector expectedSortingTypes5 = { BookmarkManager::SortingType::ByTime }; + + auto const sortingTypes5 = bmManager.GetAvailableSortingTypes(catId5, false); + TEST(sortingTypes5 == expectedSortingTypes5, ()); + + auto const sortedByTime5 = getSortedBokmarks(catId5, BookmarkManager::SortingType::ByTime, false, {}); + printBlocks("Sorted by time 5", sortedByTime5); + TEST(sortedByTime5 == expectedSortedByTime5, ()); + } + + { + kml::MarkGroupId catId6 = bmManager.CreateBookmarkCategory("test6", false); + fillCategory(catId6, {} /* marksData */, testTracksData6); + std::vector expectedSortingTypes6 = {}; + + auto const sortingTypes6 = bmManager.GetAvailableSortingTypes(catId6, false); + TEST(sortingTypes6 == expectedSortingTypes6, ()); + } } namespace