Index: components/sync_sessions/task_tracker_unittest.cc |
diff --git a/components/sync_sessions/task_tracker_unittest.cc b/components/sync_sessions/task_tracker_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..36fa36978afcf48c9bee5155120ea61cc82da594 |
--- /dev/null |
+++ b/components/sync_sessions/task_tracker_unittest.cc |
@@ -0,0 +1,161 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "components/sync_sessions/task_tracker.h" |
+ |
+#include <utility> |
+ |
+#include "base/test/simple_test_clock.h" |
+#include "base/time/time.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+using testing::ElementsAre; |
+ |
+namespace sync_sessions { |
+ |
+namespace { |
+const int kTab1 = 15; |
+const int kTab2 = 25; |
+} // namespace |
+ |
+TEST(TaskTrackerTest, GetTabTasks) { |
+ TaskTracker task_tracker; |
+ TabTasks* tab_tasks = task_tracker.GetTabTasks(kTab1); |
+ ASSERT_NE(tab_tasks, nullptr); |
+ ASSERT_EQ(task_tracker.GetTabTasks(kTab1), tab_tasks); |
+ ASSERT_NE(task_tracker.GetTabTasks(kTab2), tab_tasks); |
+} |
+ |
+TEST(TaskTrackerTest, UpdateTasksWithMultipleClicks) { |
+ std::unique_ptr<base::SimpleTestClock> clock = |
+ base::MakeUnique<base::SimpleTestClock>(); |
+ base::SimpleTestClock* clock_ptr = clock.get(); |
+ TaskTracker task_tracker(std::move(clock)); |
+ TabTasks* tab_tasks = task_tracker.GetTabTasks(kTab1); |
+ |
+ clock_ptr->SetNow(base::Time::FromInternalValue(100)); |
+ tab_tasks->UpdateWithNavigation(1, ui::PageTransition::PAGE_TRANSITION_TYPED); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(1), |
+ ElementsAre(100)); |
+ |
+ clock_ptr->SetNow(base::Time::FromInternalValue(200)); |
+ tab_tasks->UpdateWithNavigation(2, ui::PageTransition::PAGE_TRANSITION_LINK); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(1), |
+ ElementsAre(100)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(2), |
+ ElementsAre(100, 200)); |
+ |
+ clock_ptr->SetNow(base::Time::FromInternalValue(300)); |
+ tab_tasks->UpdateWithNavigation(3, ui::PageTransition::PAGE_TRANSITION_LINK); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(1), |
+ ElementsAre(100)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(2), |
+ ElementsAre(100, 200)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(3), |
+ ElementsAre(100, 200, 300)); |
+} |
+ |
+TEST(TaskTrackerTest, UpdateTasksWithMultipleClicksAndTypes) { |
+ std::unique_ptr<base::SimpleTestClock> clock = |
+ base::MakeUnique<base::SimpleTestClock>(); |
+ base::SimpleTestClock* clock_ptr = clock.get(); |
+ TaskTracker task_tracker(std::move(clock)); |
+ TabTasks* tab_tasks = task_tracker.GetTabTasks(kTab1); |
+ |
+ clock_ptr->SetNow(base::Time::FromInternalValue(100)); |
+ tab_tasks->UpdateWithNavigation(1, ui::PAGE_TRANSITION_LINK); |
+ clock_ptr->SetNow(base::Time::FromInternalValue(200)); |
+ tab_tasks->UpdateWithNavigation(2, ui::PAGE_TRANSITION_LINK); |
+ clock_ptr->SetNow(base::Time::FromInternalValue(300)); |
+ tab_tasks->UpdateWithNavigation(3, ui::PAGE_TRANSITION_LINK); |
+ clock_ptr->SetNow(base::Time::FromInternalValue(400)); |
+ tab_tasks->UpdateWithNavigation(4, ui::PAGE_TRANSITION_TYPED); |
+ clock_ptr->SetNow(base::Time::FromInternalValue(500)); |
+ tab_tasks->UpdateWithNavigation(5, ui::PAGE_TRANSITION_LINK); |
+ clock_ptr->SetNow(base::Time::FromInternalValue(600)); |
+ tab_tasks->UpdateWithNavigation(6, ui::PAGE_TRANSITION_TYPED); |
+ clock_ptr->SetNow(base::Time::FromInternalValue(700)); |
+ tab_tasks->UpdateWithNavigation(7, ui::PAGE_TRANSITION_LINK); |
+ |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(1), |
+ ElementsAre(100)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(2), |
+ ElementsAre(100, 200)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(3), |
+ ElementsAre(100, 200, 300)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(4), |
+ ElementsAre(400)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(5), |
+ ElementsAre(400, 500)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(6), |
+ ElementsAre(600)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(7), |
+ ElementsAre(600, 700)); |
+} |
+ |
+TEST(TaskTrackerTest, UpdateTasksWithBackforwards) { |
+ std::unique_ptr<base::SimpleTestClock> clock = |
+ base::MakeUnique<base::SimpleTestClock>(); |
+ base::SimpleTestClock* clock_ptr = clock.get(); |
+ TaskTracker task_tracker(std::move(clock)); |
+ TabTasks* tab_tasks = task_tracker.GetTabTasks(kTab1); |
+ |
+ clock_ptr->SetNow(base::Time::FromInternalValue(100)); |
+ tab_tasks->UpdateWithNavigation(1, ui::PAGE_TRANSITION_TYPED); |
+ clock_ptr->SetNow(base::Time::FromInternalValue(200)); |
+ tab_tasks->UpdateWithNavigation(2, ui::PAGE_TRANSITION_LINK); |
+ clock_ptr->SetNow(base::Time::FromInternalValue(300)); |
+ tab_tasks->UpdateWithNavigation(3, ui::PAGE_TRANSITION_LINK); |
+ |
+ clock_ptr->SetNow(base::Time::FromInternalValue(400)); |
+ tab_tasks->UpdateWithNavigation( |
+ 1, ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | |
+ ui::PAGE_TRANSITION_FORWARD_BACK)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(1), |
+ ElementsAre(100)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(2), |
+ ElementsAre(100, 200)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(3), |
+ ElementsAre(100, 200, 300)); |
+ |
+ clock_ptr->SetNow(base::Time::FromInternalValue(500)); |
+ tab_tasks->UpdateWithNavigation( |
+ 3, ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK | |
+ ui::PAGE_TRANSITION_FORWARD_BACK)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(1), |
+ ElementsAre(100)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(2), |
+ ElementsAre(100, 200)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(3), |
+ ElementsAre(100, 200, 300)); |
+} |
+ |
+TEST(TaskTrackerTest, UpdateWithNavigationsWithBackAndForkedNavigation) { |
+ std::unique_ptr<base::SimpleTestClock> clock = |
+ base::MakeUnique<base::SimpleTestClock>(); |
+ base::SimpleTestClock* clock_ptr = clock.get(); |
+ TaskTracker task_tracker(std::move(clock)); |
+ TabTasks* tab_tasks = task_tracker.GetTabTasks(kTab1); |
+ clock_ptr->SetNow(base::Time::FromInternalValue(100)); |
+ tab_tasks->UpdateWithNavigation(1, ui::PAGE_TRANSITION_LINK); |
+ clock_ptr->SetNow(base::Time::FromInternalValue(200)); |
+ tab_tasks->UpdateWithNavigation(2, ui::PAGE_TRANSITION_LINK); |
+ clock_ptr->SetNow(base::Time::FromInternalValue(300)); |
+ tab_tasks->UpdateWithNavigation(3, ui::PAGE_TRANSITION_LINK); |
+ clock_ptr->SetNow(base::Time::FromInternalValue(400)); |
+ tab_tasks->UpdateWithNavigation( |
+ 1, ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK | |
+ ui::PAGE_TRANSITION_FORWARD_BACK)); |
+ clock_ptr->SetNow(base::Time::FromInternalValue(500)); |
+ tab_tasks->UpdateWithNavigation(2, ui::PAGE_TRANSITION_LINK); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(1), |
+ ElementsAre(100)); |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(2), |
+ ElementsAre(100, 500)); |
+ // We don't track navigation at index 3 any more, so it's unknown now. |
+ ASSERT_THAT(tab_tasks->RootToSelfTaskIdsOfNavigationIndex(3), ElementsAre()); |
+} |
+ |
+} // namespace sync_sessions |