Index: chrome/browser/sync/glue/typed_url_model_associator_unittest.cc |
diff --git a/chrome/browser/sync/glue/typed_url_model_associator_unittest.cc b/chrome/browser/sync/glue/typed_url_model_associator_unittest.cc |
index 46b81ad500c741da353ae5dd3b77c812bc420c0b..6e03a7e05a48672a7391c0b9af642fce9252d71e 100644 |
--- a/chrome/browser/sync/glue/typed_url_model_associator_unittest.cc |
+++ b/chrome/browser/sync/glue/typed_url_model_associator_unittest.cc |
@@ -29,7 +29,8 @@ class TypedUrlModelAssociatorTest : public testing::Test { |
base::Time::FromInternalValue(last_visit)); |
history_url.set_hidden(hidden); |
visits->push_back(history::VisitRow( |
- history_url.id(), history_url.last_visit(), 0, 0, 0)); |
+ history_url.id(), history_url.last_visit(), 0, |
+ PageTransition::RELOAD, 0)); |
history_url.set_visit_count(visits->size()); |
return history_url; |
} |
@@ -234,3 +235,79 @@ TEST_F(TypedUrlModelAssociatorTest, DiffVisitsAdd) { |
EXPECT_EQ(new_visits[c].second, PageTransition::TYPED); |
} |
} |
+ |
+static history::VisitRow CreateVisit(PageTransition::Type type, |
+ int64 timestamp) { |
+ return history::VisitRow(0, base::Time::FromInternalValue(timestamp), 0, |
+ type, 0); |
+} |
+ |
+TEST_F(TypedUrlModelAssociatorTest, WriteTypedUrlSpecifics) { |
+ history::VisitVector visits; |
+ visits.push_back(CreateVisit(PageTransition::TYPED, 1)); |
+ visits.push_back(CreateVisit(PageTransition::RELOAD, 2)); |
+ visits.push_back(CreateVisit(PageTransition::LINK, 3)); |
+ |
+ history::URLRow url(MakeTypedUrlRow("http://pie.com/", "pie", |
+ 1, 100, false, &visits)); |
+ sync_pb::TypedUrlSpecifics typed_url; |
+ TypedUrlModelAssociator::WriteToTypedUrlSpecifics(url, visits, &typed_url); |
+ // RELOAD visits should be removed. |
+ EXPECT_EQ(2, typed_url.visits_size()); |
+ EXPECT_EQ(typed_url.visit_transitions_size(), typed_url.visits_size()); |
+ EXPECT_EQ(1, typed_url.visits(0)); |
+ EXPECT_EQ(3, typed_url.visits(1)); |
+ EXPECT_EQ(PageTransition::TYPED, |
+ static_cast<PageTransition::Type>(typed_url.visit_transitions(0))); |
+ EXPECT_EQ(PageTransition::LINK, |
+ static_cast<PageTransition::Type>(typed_url.visit_transitions(1))); |
+} |
+ |
+TEST_F(TypedUrlModelAssociatorTest, TooManyVisits) { |
+ history::VisitVector visits; |
+ int64 timestamp = 1000; |
+ visits.push_back(CreateVisit(PageTransition::TYPED, timestamp++)); |
+ for (int i = 0 ; i < 100; ++i) { |
+ visits.push_back(CreateVisit(PageTransition::LINK, timestamp++)); |
+ } |
+ history::URLRow url(MakeTypedUrlRow("http://pie.com/", "pie", |
+ 1, timestamp++, false, &visits)); |
+ sync_pb::TypedUrlSpecifics typed_url; |
+ TypedUrlModelAssociator::WriteToTypedUrlSpecifics(url, visits, &typed_url); |
+ // # visits should be capped at 100. |
+ EXPECT_EQ(100, typed_url.visits_size()); |
+ EXPECT_EQ(typed_url.visit_transitions_size(), typed_url.visits_size()); |
+ EXPECT_EQ(1000, typed_url.visits(0)); |
+ // Visit with timestamp of 1001 should be omitted since we should have |
+ // skipped that visit to stay under the cap. |
+ EXPECT_EQ(1002, typed_url.visits(1)); |
+ EXPECT_EQ(PageTransition::TYPED, |
+ static_cast<PageTransition::Type>(typed_url.visit_transitions(0))); |
+ EXPECT_EQ(PageTransition::LINK, |
+ static_cast<PageTransition::Type>(typed_url.visit_transitions(1))); |
+} |
+ |
+TEST_F(TypedUrlModelAssociatorTest, TooManyTypedVisits) { |
+ history::VisitVector visits; |
+ int64 timestamp = 1000; |
+ for (int i = 0 ; i < 102; ++i) { |
+ visits.push_back(CreateVisit(PageTransition::TYPED, timestamp++)); |
+ visits.push_back(CreateVisit(PageTransition::LINK, timestamp++)); |
+ visits.push_back(CreateVisit(PageTransition::RELOAD, timestamp++)); |
+ } |
+ history::URLRow url(MakeTypedUrlRow("http://pie.com/", "pie", |
+ 1, timestamp++, false, &visits)); |
+ sync_pb::TypedUrlSpecifics typed_url; |
+ TypedUrlModelAssociator::WriteToTypedUrlSpecifics(url, visits, &typed_url); |
+ // # visits should be capped at 100. |
+ EXPECT_EQ(100, typed_url.visits_size()); |
+ EXPECT_EQ(typed_url.visit_transitions_size(), typed_url.visits_size()); |
+ // First two typed visits should be skipped. |
+ EXPECT_EQ(1006, typed_url.visits(0)); |
+ |
+ // Ensure there are no non-typed visits since that's all that should fit. |
+ for (int i = 0; i < typed_url.visits_size(); ++i) { |
+ EXPECT_EQ(PageTransition::TYPED, static_cast<PageTransition::Type>( |
+ typed_url.visit_transitions(i))); |
+ } |
+} |